第九章 流程控制之while循环
1 语法
#while语句结构:条件为真时,执行循环体代码
while 条件
do
循环体
done
2 continue与break
continue:默认退出本次循环
break:默认退出本层循环
2.1 案例
#!/bin/bash
x=0
while (($x < 10))
do
if (($x == 2));then
let x++
continue
fi
if (($x == 7));then
break
fi
echo $x
let x++
done
echo "================"
y=0
until (($y == 10))
do
if (($y == 2));then
let y++
continue
fi
if (($y == 7));then
break
fi
echo $y
let y++
done
[root@aliyun test]# ./a.sh
0
1
3
4
5
6
================
0
1
3
4
5
6
3 while循环案例
3.1 案例1:监控web页面状态信息,失败三次,表示网站出现问题需要进行告警
#!/bin/bash
timeout=3
fails=0
success=0
url=$1
while true
do
echo "=====>$fails"
if [ $fails -eq 3 ]
then
echo "fails值等于3代表要进行第4次尝试,证明页面前访问3次均失败"
break
fi
wget --timeout=$timeout --tries=1 http://$url -q
if [ $? -ne 0 ]
then
let fails++
else
echo "页面访问成功"
break
fi
done
[root@aliyun test]# ./f.sh www.xujun.com.cn
=====>0
=====>1
=====>2
=====>3
fails值等于3代表要进行第4次尝试,证明页面前访问3次均失败
3.2 案例2:猜数字
# 补充知识
方法一: 通过random变量产生随机数 (0-32768)
echo $RANDOM
方法二: 通过openssl命令产生随机数
openssl rand -base64 10
方法三: 通过时间信息获取随机数
date +%S%N
方法四: 通过一个特殊设备文件生成随机数
head -c9 /dev/urandom|cksum
tr -dc 0-9 < /dev/urandom | head -c8
方法五: 利用UUID文件生成随机数
cat /proc/sys/kernel/random/uuid
# 代码实现
[root@local shell]# cat guess_age.sh
#!/bin/bash
num=`echo $((RANDOM%100+1))`
count=0
while :
do
[ $count -eq 3 ] && echo "猜的次数超过3次,退出" && exit
read -p "请输入[1-100]之间的一个数字:" x
[[ ! $x =~ ^[0-9]+$ ]] && echo "必须输入数字" && continue
if [ $x -gt $num ];then
echo "猜大了"
elif [ $x -lt $num ];then
echo "猜小了"
else
echo "猜对了"
break
fi
let count++
done
4 while循环小结
1、while循环的特长是执行守护进程以及我们希望循环不退出持续执行的场景,用于频率小于1分钟的循环处理,其他的while循环几乎都可以被我们即将要讲的for循环替代
2、一句话,if、for语句最常用,其次while(守护进程),case(服务启动脚本)