11.3 循环控制

Tournez cent tours, tournez mille tours,

Tournez souvent et tournez toujours . . .

——保尔·魏尔伦,《木马》

本节介绍两个会影响循环行为的命令。

break, continue

breakcontinue 命令的作用和在其他编程语言中的作用一样。break 用来中止(跳出)循环,而 continue 则是略过未执行的循环部分,直接进行下一次循环。

样例 11-21. 循环中 breakcontinue 的作用

#!/bin/bash

LIMIT=19  # 循环上界

echo
echo "Printing Numbers 1 through 20 (but not 3 and 11)."

a=0

while [ $a -le "$LIMIT" ]
do
 a=$(($a+1))

 if [ "$a" -eq 3 ] || [ "$a" -eq 11 ]  # 除了 3 和 11。
 then
   continue      # 略过本次循环的剩余部分。
 fi

 echo -n "$a "   # 当 a 等于 3 和 11 时,将不会执行这条语句。
done

# 思考:
# 为什么循环不会输出到20?

echo; echo

echo Printing Numbers 1 through 20, but something happens after 2.

##################################################################

# 用 'break' 代替了 'continue'。

a=0

while [ "$a" -le "$LIMIT" ]
do
 a=$(($a+1))

 if [ "$a" -gt 2 ]
 then
   break  # 中止循环。
 fi

 echo -n "$a"
done

echo; echo; echo

exit 0

break 命令接受一个参数。普通的 break 命令仅仅跳出其所在的那层循环,而 break N 命令则可以跳出其上 N 层的循环。

样例 11-22. 跳出多层循环

break 类似,continue 也接受一个参数。普通的 continue 命令仅仅影响其所在的那层循环,而 continue N 命令则可以影响其上 N 层的循环。

样例 11-23. continue 影响外层循环

样例 11-24. 真实环境中的 continue N

caution continue N 结构不易理解并且可能在一些情况下有歧义,因此不建议使用。

Last updated

Was this helpful?