shell脚本编写小测试1

1、请用shell脚本格式写出至少3种输出1到100的所有偶数的方法。

for

代码1:

#输入1到100的所有偶数
for ((i=1;i<=100;i++))
do
  if [ $[$i%2] -eq 0 ];then
      echo $i
  fi
done

在这里插入图片描述

代码2:

#!/bin/bash
for i in {2..100..2}
do
    echo $i
done

在这里插入图片描述

代码3:

#!/bin/bash
for i in `seq 2 2 100`
do
    echo $i
done

在这里插入图片描述

代码4:

#!/bin/bash
for((i=2;i<=100;i+=2))
do
    echo $i
done

在这里插入图片描述

运行结果截图

在这里插入图片描述

while

代码1

#! /bin/bash
#输入1到100的所有偶数
i=1
while [ $i -le 100 ]
do
  if [ $[$i%2] -eq 0 ];then
      echo $i
  fi
  let i++
done

在这里插入图片描述

代码2

#! /bin/bash
#输入1到100的所有偶数
i=2
while [ $i -le 100 ]
do
  if [ $[$i%2] -eq 0 ];then
      echo $i
  fi
  let i++
done

在这里插入图片描述

与上面的进行比较

代码1

#! /bin/bash
#输入1到100的所有偶数
i=1
while [ $i -le 100 ]
do
  let i++
  if [ $[$i%2] -eq 0 ];then
      echo $i
  fi
#  let i++
done

在这里插入图片描述

运行结果

在这里插入图片描述

代码2

#! /bin/bash
#输入1到100的所有偶数
i=2
while [ $i -le 100 ]
do
  let i++
  if [ $[$i%2] -eq 0 ];then
      echo $i
  fi
#  let i++
done

在这里插入图片描述

运行截图

在这里插入图片描述

until

代码

#!/bin/bash
i=0
until ((i>=100))
do
    let i+=2
    echo $i
done

在这里插入图片描述

2、假设变量i=20 * 5,请用shell脚本格式写出至少4种方法输出 i 的值。

代码

#!/bin/bash
#这里用了多种方法,运行脚本为了辨别输出,用其他变量表示

#法1
a=$(expr 20 \* 5)
    echo "a的值是$a"
#法2
b=$((20*5))
    echo "b的值是$b"

#法3
c=$[20*5]
    echo "c的值是$c"

#法4
let d=20*5
    echo "d的值是$d"

在这里插入图片描述

运行截图

在这里插入图片描述

3、请通过在命令行中执行./output 20 30 输出20+30的值,脚本中使用sum()函数封装代码并通过调用sum函数返回结果。

代码

#!/bin/bash
sum(){
sum=$(($1+$2))
return $sum
}
sum $1 $2
echo $?

在这里插入图片描述

运行结果

在这里插入图片描述

代码2

#!/bin/bash
sum(){
sum=$(($1+$2))
echo $sum
}
result=`sum $1 $2`
echo $result

在这里插入图片描述

运行结果

在这里插入图片描述

###4、请用递归函数输出PATH路径目录下的所有子目录和不可执行文件。

#!/bin/bash
list_files() {
for f in $1/*
do
  if [ -d $f ];then
  echo "子目录:$2$f"
  list_files "$f" " $2"
  elif [ ! -x $f ] && [ -f $f ];then
  echo "文件:$2$f"
  fi
done
}
OLDIFS=$IFS
IFS=':'
for i in $PATH
do
  echo "目录:$i"
  list_files $i " "
done
IFS=$OLDIFS

在这里插入图片描述

运行截图

在这里插入图片描述

5、请结合使用排序方法把 123.txt 文件中的数字按照降序排序输出在一行当中,并要求没有重复数字。

代码

[root@localhost 88shell]# cat 5.txt
1 4 7 9 3
2 5 8 3 8
3 6 9 7 6

#!/bin/bash
#请结合使用shell数组排序算法的方式把 123.txt 文件中的数字按照降序排序输出在同一行当中,并要求没有重复数字
#转数组
a=0
for i in `awk '{print $0}' 5.txt`
do
        arr[$a]=$i
        let a++
done
echo "转换数组arr为:${arr[*]}"
#排序(降序)
maopao (){
        echo "原数组的顺序为:${arr[*]}"
        length=${#arr[*]}

        for ((i=1; i<=$length; i++))
        do
                for ((j=0; j<$length-$i; j++))
                do
                        first=${arr[$j]}
                        k=$j+1
                        second=${arr[$k]}
                        if [ $first -lt $second ];then
                        temp=${arr[$j]}
                        arr[$j]=$second
                        arr[$k]=$temp
                fi
        done
done
echo "排序后新的数组的顺序为:${arr[*]}"
}
maopao $arr #调用函数
#去重
arr=($(awk -v RS=' ' '!a[$1]++' <<< ${arr[@]}))
echo "去重后:"${arr[@]}
                                                

运行截图

在这里插入图片描述

6、假设 file.txt 内容如下,请用shell脚本格式至少2种方法输出有效的号码:987 456-1230和(123) 456-7890,要求至少要有一种方法使用正则表达式匹配完整的号码。

[root@localhost 88shell]# cat file.txt
987-123-4567
987 456-1230
(123) 456-7890
[root@localhost 88shell]# awk '/^(\(?[0-9]{3}\)? )[0-9]{3}-([0-9]{4})$/{print}' file.txt
987 456-1230
(123) 456-7890
[root@localhost 88shell]# sed -nr /'^(\(?[0-9]{3}\)? )[0-9]{3}-([0-9]{4})$'/p file.txt
987 456-1230
(123) 456-7890
[root@localhost 88shell]# egrep '^(\(?[0-9]{3}\)? )[0-9]{3}-([0-9]{4})$' file.txt
987 456-1230
(123) 456-7890

代码运行

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不得不说的运维故事

你的赞是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值