庆祝六一,特奉上礼物一份,shell脚本的相关练习
- 1.用shell脚i本for,while,until这三种方式写出输出1到100的所有偶数的方法。
- 2.假设变量i=20 * 5,请用shell脚本格式写出4种方法输出 i 的值。
- 3.通过在命令行中执行./output 2i0 30 输出20+30的值,脚本中使用sum()函数封装代码并通过调用sum函数返回结果,用2种方法返回结果。
- 4.先mkdir -p /root/bin/aa/bb/cc/dd ; touch /root/bin/aa/bb/cc/dd/abc.txt再用递归函数输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件
- 5.结合使用shell数组排序算法的方式把 123.txt 文件中的数字按照降序排序输出在同一行当中,并要求没有重复数字。
1.用shell脚i本for,while,until这三种方式写出输出1到100的所有偶数的方法。
for循环
#!/bin/bash
for ((i=2;i<=100;i+=2))
do
echo $i
done
while循环
#!/bin/bash
i=2
while [ $i -le 100 ]
do
echo $i
i=$[$i+2]
done
until循环
#!/bin/bash
i=2
until [ $i -gt 100 ]
do
echo $i
let i+=2
done
2.假设变量i=20 * 5,请用shell脚本格式写出4种方法输出 i 的值。
#!/bin/bash
planA
i=$[20*5]
echo $i
planB
i=$((20*5))
echo $i
planC
let i=20*5
echo $i
planD
i=$(expr 20 \* 5)
echo $i
结果:
3.通过在命令行中执行./output 2i0 30 输出20+30的值,脚本中使用sum()函数封装代码并通过调用sum函数返回结果,用2种方法返回结果。
#!/bin/bash
#plan1
sum1 (){
echo "第一个值为:$1"
echo "第二个值为:$2"
sum=$[$1+$2]
echo $sum
}
sum1 $1 $2
#plan2
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所包含的所有目录以及其中的子目录和所有不可执行文件
#!/bin/bash
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 文件中的数字按照降序排序输出在同一行当中,并要求没有重复数字。
#!/bin/bash
c=0
for i in `awk '{print $0}' 123.txt`
do
accounts[$c]=$i
let c++
done
echo "转为数组:${accounts[*]}"
paixu (){
echo "原数组顺序为:${accounts[*]}"
length=${#accounts[*]}
for ((i=1; i<$length-1; i++))
do
for ((j=0; j<$length-$i; j++))
do
first=${accounts[$j]}
m=$j+1
second=${accounts[$m]}
if [ $first -lt $second ];then
temp=${accounts[$j]}
accounts[$j]=$second
accounts[$m]=$temp
fi
done
done
echo "排序后新的数组为:${accounts[*]}"
}
paixu $accounts
accounts=($(echo ${accounts[*]} | sed 's/ /\n/g'| sort -r | uniq))
echo "去重后:"${accounts[*]}