在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,像大多数编程语言一样,Shell也使用 break 和 continue 来跳出循环。

break命令

break命令允许跳出所有循环(终止执行后面的所有循环)。

下面的例子中,脚本进入死循环直至用户输入数字大于5。要跳出这个循环,返回到shell提示符下,就要使用break命令。

  1. #!/bin/bash
  2. while :
  3. do
  4. echo -n "Input a number between 1 to 5: "
  5. read aNum
  6. case $aNum in
  7. 1|2|3|4|5) echo "Your number is $aNum!"
  8. ;;
  9. *) echo "You do not select a number between 1 to 5, game is over!"
  10. break
  11. ;;
  12. esac
  13. done

在嵌套循环中,break 命令后面还可以跟一个整数,表示跳出第几层循环。例如:

  1. break n

表示跳出第 n 层循环。

下面是一个嵌套循环的例子,如果 var1 等于 2,并且 var2 等于 0,就跳出循环:

  1. #!/bin/bash
  2. for var1 in 1 2 3
  3. do
  4. for var2 in 0 5
  5. do
  6. if [ $var1 -eq 2 -a $var2 -eq 0 ]
  7. then
  8. break 2
  9. else
  10. echo "$var1 $var2"
  11. fi
  12. done
  13. done

如上,break 2 表示直接跳出外层循环。运行结果:

1 0
1 5

continue命令

continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。

对上面的例子进行修改:

  1. #!/bin/bash
  2. while :
  3. do
  4. echo -n "Input a number between 1 to 5: "
  5. read aNum
  6. case $aNum in
  7. 1|2|3|4|5) echo "Your number is $aNum!"
  8. ;;
  9. *) echo "You do not select a number between 1 to 5!"
  10. continue
  11. echo "Game is over!"
  12. ;;
  13. esac
  14. done

运行代码发现,当输入大于5的数字时,该例中的循环不会结束,语句

  1. echo "Game is over!"

永远不会被执行。

同样,continue 后面也可以跟一个数字,表示跳出第几层循环。

再看一个 continue 的例子:

  1. #!/bin/bash
  2. NUMS="1 2 3 4 5 6 7"
  3. for NUM in $NUMS
  4. do
  5. Q=`expr $NUM % 2`
  6. if [ $Q -eq 0 ]
  7. then
  8. echo "Number is an even number!!"
  9. continue
  10. fi
  11. echo "Found odd number"
  12. done

运行结果:

Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number

最新文章

  1. 15天玩转redis —— 第九篇 发布/订阅模式
  2. JAVA关键字与保留字说明及使用
  3. Visual Basic 2012 借助DataGridView控件将Excel 2010数据导入到SQL server 2012
  4. github 如何合并不同分支
  5. SQL阻塞原因造成系统多功能无响应的分析解决思路
  6. 为测试框架model类自动生成xml结果集
  7. I2C总线模拟(郭天祥视屏)
  8. Surprising Strings(map类)
  9. 如何运行jar文件
  10. js面向对象学习笔记(二):工厂方式:封装函数
  11. dbExpress操作中用TDBGrid显示数据
  12. web项目局部打印
  13. JsBom
  14. image-set实现Retina屏幕下图片显示详细介绍
  15. linux sticky
  16. vue.js - 解决vue-cli打包后自动压缩代码
  17. python内置函数详细介绍
  18. 【转】用SQL实现树的查询
  19. 我的Android进阶之旅------>修改Android签名证书keystore的密码、别名alias以及别名密码
  20. Operating System-进程/线程内部通信-临界区(Critical Regions)

热门文章

  1. [Rational Rose 2007]解决启动报”解决无法启动此程序因为丢失suite objects.dll“的问题
  2. Linux基础知识介绍
  3. OPENFIRE 启动流程
  4. K-means、KNN学习笔记
  5. LVM逻辑分区的优缺点与步骤
  6. c++ 各种类型字符串转换
  7. Java poi 的使用
  8. 国庆集训 || Wannafly Day4
  9. 在行列都排好序的矩阵中找数 【题目】 给定一个有N*M的整型矩阵matrix和一个整数K, matrix的每一行和每一 列都是排好序的。实现一个函数,判断K 是否在matrix中。 例如: 0 1 2 5 2 3 4 7 4 4 4 8 5 7 7 9 如果K为7,返回true;如果K为6,返 回false。 【要求】 时间复杂度为O(N+M),额外空间复杂度为O(1)。
  10. k8s framework