for 循环是相对比较简单的循环,任何一个循环里面都可以嵌套循环,用for可以解决简单逻辑上的任何循环
。
有两种基本格式:for i in " ";do
或者dor((i=0;i<=9;i++))可以嵌套if或者while等循环
if循环。最重要的是判断的条件,if意为如果什么就怎样怎样,所以这里if条件判断经常出错就是在这,这里我就不对中括号,小括号用法再一一赘述了,之前说过。
while,当型循环,表述起来比for复杂一点,因为for有简化版条件,while只能在循环体里进行变量加减操作。
until循环,直到什么才怎样怎样,是。while的反例。非常擅长执行定时任务,所以说每个任务都各有所长,关键就在于使用的时候互相配合使用,达到既简化操作又完成目的的目标。
用until 解决
1、每隔3秒钟到系统上获取已经登录的用户的信息;如果发现用户hacker登录,则将登录时间和主机记录于日志/var/log/login.log中,并提示该用户退出系统。
username=`uptime | cut -d"," -f2 | grep -o "hacker"`
until [ -n $username ] ;do uptime sleep3;done
2、随机生成10以内的数字,实现猜字游戏,提示比较大或小,相等则退出
read -p "please input your number" n
declare -i a=(($RANDOM%10))
until [ $n -eq $a ];do
[ $n -gt $a ] && echo "you win" || echo "you lose"
done
exit 1
3、编写脚本,求100以内所有正整数之和
sum=0
i=1
until $i>100;do
((sum=sum+i))
((i++))
done
echo sum is $sum.
4、编写脚本,通过ping命令探测172.16.250.1-254范围内的所有主机的在线状态,统计在线主机和离线主机各多少。
ip=172.16.250.
i=1
a=0
until $i>254;do
ping -W1 -c2 $ip$i &> /dev/null && (echo "the host is on" let a=a+1)|| echo "the host is off"
done
echo "the online host is $a"
echo "the halt host is $((254-$a))'
5、编写脚本,打印九九乘法表
i=1
j=1
until $i>9;do
until $j>$i;do
echo $i*$j=$(($i*$j))
done
echo
6、编写脚本,利用变量RANDOM生成10个随机数字,输出这个10数字,并显示其中的最大者和最小者
利用数组来做
declare -a ran
declare -i max=0
declare -i min=11
for((j=0;j<=9;j++)) ;do
ran[$j]=$((RANDOM%10))
echo "${ran[$j]}"
[ ${ran[$j]} -le $min ] && min=${ran[$j]}
[ ${ran[$j]} -ge $max ] && max=${ran[$j]}
done
echo MAX:$max
echo MIN:$min
利用until
7、编写脚本,实现打印国际象棋棋盘
read -p "please input your number"n
i=1
j=1
until $i>$n;do
until $j>$n;do
[ $((($i+$j)%2)) -eq 0 ] && echo -en "\033[47m \033[0m" || echo -en "\033[41m \033[0m"
done
echo
done
8、打印等腰三角形
read -p "please input your number" n
i=1
until (($i>$n));do
echo""
原创文章,作者:sjfbjs,如若转载,请注明出处:http://www.178linux.com/37400