shell综合练习题(图文并茂代码清单)

Posted 王大雏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell综合练习题(图文并茂代码清单)相关的知识,希望对你有一定的参考价值。

1、请用shell脚本for,while,until这三种方式写出输出1到100的所有偶数的方法。(5分)

for

#!/bin/bash
#输出1到100的所有偶数
#for

for ((i=1; i<=100; i++))
do
        if [ $[$i%2] -eq 0 ];then
                echo $i
        fi
done

在这里插入图片描述

while

#!/bin/bash
#输出1到100的所有偶数
#while

i=1
while [ $i -le 100 ]
do
        if [ $[$i%2] -eq 0 ];then
                echo $i
        fi
        let i++
done

在这里插入图片描述

until

#!/bin/bash
#输出1到100的所有偶数
#until

i=1
until ((i>100))
do
        if [ $[$i%2] -eq 0 ];then
                echo $i
        fi
        let i++
done

在这里插入图片描述
在这里插入图片描述

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

#!/bin/bash
#假设变量i=20 * 5,请用shell脚本格式写出4种方法输出 i 的值

#方法一
i=$[20*5]
echo $i

#方法二
i=$( expr 20 \\* 5 )
echo $i

#方法三
i=$((20*5))
echo $i

#方法四
let i=20*5
echo $i

在这里插入图片描述
在这里插入图片描述

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


#!/bin/bash
#请通过在命令行中执行./output 20 30 输出20+30的值,脚本中使用sum()函数封装代码并通过调用sum函数返回结果,用2种方法返回结果

#方法一
sum1 (){
        echo "第一个参数值为$1"
        echo "第二个参数值为$2"
        sum=$[$1+$2]
        echo $sum
}

sum1 $1 $2

#方法二
sum2 (){
        echo "第一个参数值为$1"
        echo "第二个参数值为$2"
        return $[$1+$2]
}

sum2 $1 $2
echo $?

在这里插入图片描述
在这里插入图片描述

4、先mkdir -p /root/bin/aa/bb/cc/dd ; touch /root/bin/aa/bb/cc/dd/abc.txt,再用递归函数输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件(10分)

#!/bin/bash
#先mkdir -p /root/bin/aa/bb/cc/dd ; touch /root/bin/aa/bb/cc/dd/abc.txt
#再用递归函数输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件

listdir() {
for a in $1/*
do
  if [ -d $a ];then
     echo "目录:$2$a"
     listdir $a " $2"
  elif [ ! -x $a ] && [ -f $a ];then
     echo "不可执行文件:$2$a"
  fi
done
}

OLDIFS=$IFS
IFS=':'
for i in $PATH
do
  echo "子目录:$i" 
  listdir $i " "
done
IFS=$OLDIFS

在这里插入图片描述
在这里插入图片描述

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

cat 123.txt 
1 4 7 9 4
2 5 8 3 8
3 6 9 7 6
#!/bin/bash
#请结合使用shell数组排序算法的方式把 123.txt 文件中的数字按照降序排序输出在同一行当中,并要求没有重复数字
#转数组
a=0
for i in `awk '{print $0}' 123.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 内容如下,请在grep,egrep,sed,awk中至少2种命令输出有效的号码:987 456-1230和(123) 456-7890,要求至少要有一种方法使用正则表达式匹配完整的号码。(10分)

cat file.txt
987-123-5430
987 456-1230
(123) 456-7890

算法思路

前三位以1-9数字开头,有或没有()

空格

三位数字456

-

0-9的四位数字
[root@localhost ~]# egrep "^(\\(?[0-9]{3}\\)?)[ ][456]{3}[-][0-9]{4}$" file.txt
987 456-1230
(123) 456-7890

[root@localhost ~]# awk '/^(\\(?[0-9]{3}\\)?)[ ][456]{3}[-][0-9]{4}$/{print}' file.txt
987 456-1230
(123) 456-7890

在这里插入图片描述

在这里插入图片描述

以上是关于shell综合练习题(图文并茂代码清单)的主要内容,如果未能解决你的问题,请参考以下文章

2-17作业 数据库和shell综合练习

shell基础之综合练习

shell脚本之购物车清单脚本

shell脚本之购物车清单脚本

SVM算法应用综合练习--人脸微笑识别

C语言进阶笔记用图文+代码让你深度理解数据在内存中的存储