13.2-Shell脚本进阶之while循环
1.编写脚本,求100以内所有正奇数之和。
[root@localhost /data/scripts]#bash while_sum.sh
100以内所有正奇数之和为:2500
[root@localhost /data/scripts]#cat !*
cat while_sum.sh
#!/bin/bash
#********************************************************************
#Author: Kevin.Wen
#Revision: 1.0
#QQ: 2510905014
#Date: 2020-09-27
#FileName: while_sum.sh
#********************************************************************
sum=0
i=1
while [ $i -le 100 ];do
sum=$[${sum}+${i}]
i=$[$i+2]
done
echo "100以内所有正奇数之和为:$sum"
2.编写脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态,并统计在线和离线主机各多少。
答案还有瑕疵,后续改进
[root@localhost /data/scripts]#cat !*
cat while_scan_host.sh
#!/bin/bash
#********************************************************************
#Author: Kevin.Wen
#Revision: 1.0
#QQ: 2510905014
#Date: 2020-09-27
#FileName: while_scan_host.sh
#********************************************************************
read -p "Please enter the network address(eg:192.168.0.0): " NET
netid=echo $NET|cut -d. -f1-2
i=0
up=0
down=0
while [ $i -le 254 ];do
j=1
while [ $j -le 254 ];do
echo $netid.$i.$j
if `ping -c1 -w1 $netid.$i.$j &>/dev/null`;then
echo "The $netid.$i.$j is up"
let up++
else
echo "The $netid.$i.$j is down"
let down++
fi
let j++
done
let i++
done
echo "The up is $up"
echo "The down is $down"
3.编写脚本,打印九九乘法表。
[root@localhost /data/scripts]#bash !*
bash while_9x9.sh
11=11
12=21 22=22
13=31 23=32 33=33
14=41 24=42 34=43 44=44
15=51 25=52 35=53 45=54 55=55
16=61 26=62 36=63 46=64 56=65 66=66
17=71 27=72 37=73 47=74 57=75 67=76 77=77
18=81 28=82 38=83 48=84 58=85 68=86 78=87 88=88
19=91 29=92 39=93 49=94 59=95 69=96 79=97 89=98 99=99
[root@localhost /data/scripts]#cat !*
cat while_9x9.sh
#!/bin/bash
#********************************************************************
#Author: Kevin.Wen
#Revision: 1.0
#QQ: 2510905014
#Date: 2020-09-28
#FileName: while_9x9.sh
#********************************************************************
i=1
while [ "$i" -le "9" ];do
j=1
while [ "$j" -le "$i" ];do
echo -e "$j$i=`echo $i$j|bc` \c"
let j++
done
echo ""
let i++
done
4.编写脚本,利用变量RANDOM生成10个随机数字,输出这个10数字,并显示其中的最大值和最小值。
[root@localhost /data/scripts]#bash while_random.sh
the min number is 8207,the max number is 32152
[root@localhost /data/scripts]#cat !*
cat while_random.sh
#!/bin/bash
#********************************************************************
#Author: Kevin.Wen
#Revision: 1.0
#QQ: 2510905014
#Date: 2020-09-28
#FileName: while_random.sh
#********************************************************************
declare -i a=0
max=0
min=$RANDOM
while [ $a -le 9 ];do
num=$RANDOM
if [ $num -le $max ];then
if [ $num -le $min ];then
min=$num
fi
else
max=$num
fi
let a++
done
echo "the min number is $min,the max number is $max"
5.编写脚本,实现打印国际象棋棋盘。
[root@localhost /data/scripts]#cat !*
cat while_chess_board.sh
#!/bin/bash
#********************************************************************
#Author: Kevin.Wen
#Revision: 1.0
#QQ: 2510905014
#Date: 2020-09-28
#FileName: while_chess_board.sh
#********************************************************************
let i=0
while [ $i -le 15 ];do
for((j=0;j<4;j++));do
if [ $[i%4] -eq 0 -o $[i%4] -eq 1 ];then
echo -e "\033[1;41m \033[0m\033[1;47m \033[0m\c"
else
echo -e "\033[1;47m \033[0m\033[1;41m \033[0m\c"
fi
done
echo
let i++
done
6.后续六个字符串:efbaf275cd、4be9c40b8b、44b2395c46、f8c8873ce0、b902c16c8b、ad865d2f63是通过对随机数变量RANDOM随机执行命令: echo $RANDOM|md5sum|cut –c1-10后的结果,请破解这些字符串对应的RANDOM值。
[root@localhost /data/scripts]#cat while_md5_random.sh
#!/bin/bash
#********************************************************************
#Author: Kevin.Wen
#Revision: 1.0
#QQ: 2510905014
#Date: 2020-09-28
#FileName: while_md5_random.sh
#********************************************************************
cat test.txt | while read CHESS;do
{ while true;do
MD=`echo $RANDOM|md5sum|cut -c1-10`
if [[ "$MD" == "$CHESS" ]];then
echo $RAN
break
else
let RAN++
fi
done }&
wait
done