第九章 流程控制之while循环

1 语法

  1. #while语句结构:条件为真时,执行循环体代码
  2. while 条件
  3. do
  4. 循环体
  5. done

2 continue与break

  1. continue:默认退出本次循环
  2. break:默认退出本层循环

2.1 案例

  1. #!/bin/bash
  2. x=0
  3. while (($x < 10))
  4. do
  5. if (($x == 2));then
  6. let x++
  7. continue
  8. fi
  9. if (($x == 7));then
  10. break
  11. fi
  12. echo $x
  13. let x++
  14. done
  15. echo "================"
  16. y=0
  17. until (($y == 10))
  18. do
  19. if (($y == 2));then
  20. let y++
  21. continue
  22. fi
  23. if (($y == 7));then
  24. break
  25. fi
  26. echo $y
  27. let y++
  28. done
  29. [root@aliyun test]# ./a.sh
  30. 0
  31. 1
  32. 3
  33. 4
  34. 5
  35. 6
  36. ================
  37. 0
  38. 1
  39. 3
  40. 4
  41. 5
  42. 6

3 while循环案例

3.1 案例1:监控web页面状态信息,失败三次,表示网站出现问题需要进行告警

  1. #!/bin/bash
  2. timeout=3
  3. fails=0
  4. success=0
  5. url=$1
  6. while true
  7. do
  8. echo "=====>$fails"
  9. if [ $fails -eq 3 ]
  10. then
  11. echo "fails值等于3代表要进行第4次尝试,证明页面前访问3次均失败"
  12. break
  13. fi
  14. wget --timeout=$timeout --tries=1 http://$url -q
  15. if [ $? -ne 0 ]
  16. then
  17. let fails++
  18. else
  19. echo "页面访问成功"
  20. break
  21. fi
  22. done
  23. [root@aliyun test]# ./f.sh www.xujun.com.cn
  24. =====>0
  25. =====>1
  26. =====>2
  27. =====>3
  28. fails值等于3代表要进行第4次尝试,证明页面前访问3次均失败

3.2 案例2:猜数字

  1. # 补充知识
  2. 方法一: 通过random变量产生随机数 (0-32768)
  3. echo $RANDOM
  4. 方法二: 通过openssl命令产生随机数
  5. openssl rand -base64 10
  6. 方法三: 通过时间信息获取随机数
  7. date +%S%N
  8. 方法四: 通过一个特殊设备文件生成随机数
  9. head -c9 /dev/urandom|cksum
  10. tr -dc 0-9 < /dev/urandom | head -c8
  11. 方法五: 利用UUID文件生成随机数
  12. cat /proc/sys/kernel/random/uuid
  13. # 代码实现
  14. [root@local shell]# cat guess_age.sh
  15. #!/bin/bash
  16. num=`echo $((RANDOM%100+1))`
  17. count=0
  18. while :
  19. do
  20. [ $count -eq 3 ] && echo "猜的次数超过3次,退出" && exit
  21. read -p "请输入[1-100]之间的一个数字:" x
  22. [[ ! $x =~ ^[0-9]+$ ]] && echo "必须输入数字" && continue
  23. if [ $x -gt $num ];then
  24. echo "猜大了"
  25. elif [ $x -lt $num ];then
  26. echo "猜小了"
  27. else
  28. echo "猜对了"
  29. break
  30. fi
  31. let count++
  32. done

4 while循环小结

1、while循环的特长是执行守护进程以及我们希望循环不退出持续执行的场景,用于频率小于1分钟的循环处理,其他的while循环几乎都可以被我们即将要讲的for循环替代

2、一句话,if、for语句最常用,其次while(守护进程),case(服务启动脚本)