14.Shell跳出循环 - morris131/morris-book GitHub Wiki

Shell跳出循环

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

break命令

break命令允许跳出所有循环(终止执行后面的所有循环)。 下面的例子中,脚本进入死循环直至用户输入数字大于5。要跳出这个循环,返回到shell提示符下,就要使用break命令。

break.sh

#!/bin/bash

while :
do
    echo -n "Input a number between 1 to 5: "
    read aNum
    case $aNum in
        1|2|3|4|5) echo "Your number is $aNum!"
        ;;
        *) echo "You do not select a number between 1 to 5, game is over!"
            break
        ;;
    esac
done
# chmod +x break.sh
# ./break.sh
Input a number between 1 to 5: 1
Your number is 1!
Input a number between 1 to 5: 5
Your number is 5!
Input a number between 1 to 5: 6
You do not select a number between 1 to 5, game is over!

在嵌套循环中,break 命令后面还可以跟一个整数,表示跳出第几层循环。例如: break n 表示跳出第 n 层循环。 下面是一个嵌套循环的例子,如果 var1 等于 2,并且 var2 等于 0,就跳出循环:

breakn.sh

#!/bin/bash

for var1 in 1 2 3
do
   for var2 in 0 5
   do
      if [ $var1 -eq 2 -a $var2 -eq 0 ]
      then
         break 2
      else
         echo "$var1 $var2"
      fi
   done
done
chmod +x breakn.sh
# ./breakn.sh
1 0
1 5

continue命令

continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。 对上面的例子进行修改:

continue.sh

#!/bin/bash

COUNTER=1
while [ $COUNTER -le 5 ]
do
  if [ $COUNTER -eq 3 ]
  then
     COUNTER=`expr ${COUNTER} + 1`
     continue
  fi
  echo $COUNTER
  COUNTER=`expr ${COUNTER} + 1`
done
# chmod +x continue.sh
# ./continue.sh
1
2
4
5
⚠️ **GitHub.com Fallback** ⚠️