[size=1.166em]Bash 和其他 shell 语言有 3 种循环结构,与 C 语言中的循环结构比较相似。每种循环执行一个命令列表 0 次或更多次。命令列表放在单词 do[size=1.166em]和done[size=1.166em]之间,每个命令前都有一个分号。
- for
- for循环有两种形式。shell 脚本中的最常用的形式是迭代一组值,对每个值执行命令列表一次。这组值可能是空的,在这种情况下,不会执行命令列表。另一种形式更加类似于传统的 C for循环,它使用 3 个算术表达式来控制开始条件、步进函数和结束条件。
- while
- while循环该循环每次开始时计算一个条件,如果条件为 true,则执行命令列表。如果该条件最初不为 true,则从不执行这些命令。
- until
- until循环执行命令列表并在每次循环结束时计算一个条件。如果条件为 true,则再执行该循环一次。即使条件最初不为 true,这些命令也会至少执行一次。
[size=1.166em]测试的条件可以是一个命令列表。在这种情况下,将使用执行的 最后一个命令的返回值。清单 23演示了这些循环命令。 清单 23. 简单的 for、while和 until循环- ian@at:~$ for x in abd 2 "my stuff"; do echo $x; done
- abd
- 2
- my stuff
- ian@at:~$ for (( x=2; x<5; x++ )); do echo $x; done
- 2
- 3
- 4
- ian@at:~$ let x=3; while [ $x -ge 0 ] ; do echo $x ;let x--;done
- 3
- 2
- 1
- 0
- ian@at:~$ let x=3; until echo -e "x=\c"; (( x-- == 0 )) ; do echo $x ; done
- x=2
- x=1
- x=0
复制代码
[size=1.166em]这些示例虽然不太自然,但它们演示了这些概念。您通常希望迭代一个函数或 shell 脚本的参数,或者命令替换所创建的一个列表。 break和 continue命令[size=1.166em]可以使用 break命令立即退出循环。如果您拥有嵌套循环,可以指定要分成的级别数。例如,如果您在一个 for内的另一个 for循环内有一个until循环,而它们都在一个 while循环内,则 break 3会立即终止 until循环和两个 for循环,并将控制权返回给 while循环中的下一个指令。 [size=1.166em]可以使用 continue语句绕过命令列表中的剩余语句,直接转到循环的下一次迭代。 清单 26演示了 break和 continue的使用。 清单 26. 使用 break和 continue- ian@at:~$ for word in red blue green yellow violet; do
- > if [ "$word" = blue ]; then continue; fi
- > if [ "$word" = yellow ]; then break; fi
- > echo "$word"
- > done
- red
- green
复制代码
|