shell综合练习题(图文并茂代码清单)
Posted 王大雏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell综合练习题(图文并茂代码清单)相关的知识,希望对你有一定的参考价值。
shell综合练习题(图文并茂、代码清单)
- 1、请用shell脚本for,while,until这三种方式写出输出1到100的所有偶数的方法。(5分)
- 2、假设变量i=20 * 5,请用shell脚本格式写出4种方法输出 i 的值。(5分)
- 3、请通过在命令行中执行./output 20 30 输出20+30的值,脚本中使用sum()函数封装代码并通过调用sum函数返回结果,用2种方法返回结果。(10分)
- 4、先mkdir -p /root/bin/aa/bb/cc/dd ; touch /root/bin/aa/bb/cc/dd/abc.txt,再用递归函数输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件(10分)
- 5、请结合使用shell数组排序算法的方式把 123.txt 文件中的数字按照降序排序输出在同一行当中,并要求没有重复数字。(10分)
- 6、假设 file.txt 内容如下,请在grep,egrep,sed,awk中至少2种命令输出有效的号码:987 456-1230和(123) 456-7890,要求至少要有一种方法使用正则表达式匹配完整的号码。(10分)
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综合练习题(图文并茂代码清单)的主要内容,如果未能解决你的问题,请参考以下文章