shell脚本编写小测试1

Posted 老张学coding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

代码运行

以上是关于shell脚本编写小测试1的主要内容,如果未能解决你的问题,请参考以下文章

Linux中编写Shell脚本

;~ 小部分AutoHotkey源代码片段测试模板2019年10月9日.ahk

编写MAC记录与端口扫描脚本的shell脚本

代码片段:Shell脚本实现重复执行和多进程

shell基础 变量 条件测试 判断结构

好用的SHELL小编程