15.2 while循环

15.2.1 while循环的语法

和for循环一样,while循环也是一种运行前测试语句,相比for循环来说,其语法更为简单,语法结构如下:


  1. while expression

  2. do

  3. command

  4. done


首先while将测试expression的返回值,如果返回值为真则执行循环体,返回值为假将不执行循环。循环完成后进入下一次循环之前将再次测试。

如果已知循环次数,可以用计数的方式控制循环,即设定一个计数器,在达到规定的循环次数后退出循环。


  1. [root@localhost ~]# cat while01.sh

  2. #!/bin/bash

  3. #

  4. 定义计数器,循环次数为5

  5. CONTER=5

  6. while [[ $CONTER -gt 0 ]] #

  7. 测试CONTER

  8. 的值大于0

  9. 的情况下继续循环

  10. do

  11. echo -n "$CONTER "

  12. let "CONTER-=1" #

  13. 每次循环CONTER

  14. 值减1

  15. done

  16. echo

  17. [root@localhost ~]# bash while01.sh

  18. 5 4 3 2 1


下面的示例使用类while循环,同时计算1到100的和以及1到100的奇数和。


  1. [root@localhost ~]# cat while02.sh

  2. #!/bin/bash

  3. #sum01

  4. 用于计算1

  5. 100

  6. 的和

  7. #sum02

  8. 用于计算1

  9. 100

  10. 的奇数和

  11. sum01=0

  12. sum02=0

  13. i=1

  14. j=1

  15. while [[ "$i" -le "100" ]]

  16. do

  17. let "sum01+=i"

  18. let "j=i%2" #

  19. 变量j

  20. 用来确定变量i

  21. 的奇偶性,如是奇数则余为1

  22. if [[ $j -ne 0 ]]; then

  23. let "sum02+=i"

  24. fi

  25. let "i+=1"

  26. done

  27. echo "sum01=$sum01"

  28. echo "sum02=$sum02"

  29. #

  30. 运行结果

  31. [root@localhost ~]# bash while02.sh

  32. sum01=5050

  33. sum02=2500


下面的示例是利用while做猜数字游戏,只有当输入的数字和预设的数字一致时,才会停止循环。


  1. [root@localhost ~]# cat while03.sh

  2. #!/bin/bash

  3. PRE_SET_NUM=8

  4. echo "Input a number between 1 and 10"

  5. while read GUESS

  6. do

  7. if [[ $GUESS -eq $PRE_SET_NUM ]]; then

  8. echo "You get the right number"

  9. exit

  10. else

  11. echo "Wrong, try again"

  12. fi

  13. done

  14. #

  15. 运行结果,输入6

  16. 7

  17. 都提示输入错误,并要求继续输入

  18. #

  19. 输入8

  20. 时,程序提示输入正确并退出循环

  21. [root@localhost ~]# bash while03.sh

  22. Input a number between 1 and 10

  23. 6

  24. Wrong, try again

  25. 7

  26. Wrong, try again

  27. 8

  28. You get the right number