查看: 2401|回复: 0
打印 上一主题 下一主题

Shell break和continue命令 跳出循环

[复制链接]
跳转到指定楼层
沙发
发表于 2014-8-17 13:41:56 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,像大多数编程语言一样,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. 1 0
  2. 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
复制代码

运行结果:
  1. Found odd number
  2. Number is an even number!!
  3. Found odd number
  4. Number is an even number!!
  5. Found odd number
  6. Number is an even number!!
  7. Found odd number
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

快速回复 返回顶部 返回列表