20.6 Shell 循环表达式 (从新手到菜鸟的Linux教程)

先来看一下三种循环的语法:

$ help for | head -n1
for: for NAME [in WORDS ... ] ; do COMMANDS; done
$ help while | head -n1
while: while COMMANDS; do COMMANDS; done
$ help until | head -n1
until: until COMMANDS; do COMMANDS; done

反正我觉得 until 相对于 while 是没什么用= =

for 循环的话 NAME 是依次取 WORDS 中空格分割的部分;相对与 c 系语言的 for (auto i = 0; i < n; ++i) ,在 shell 里一般是这样实现:

$ for i in `seq 1 5`
> do
>   echo "Iteration $i."
> done
Iteration 1.
Iteration 2.
Iteration 3.
Iteration 4.
Iteration 5.

和 matlab 一样从 1 开始计数┑( ̄Д  ̄)┍


while 结构的话基本上就是用 shell 的方式写条件判断式,比如:

$ i=1
$ while [ $i -le 5 ]
> do
>   echo "Iteration $i."
>   i=`expr $i + 1`
> done
Iteration 1.
Iteration 2.
Iteration 3.
Iteration 4.
Iteration 5.

别忘了更新 i = = 但是更新起来这么麻烦还不如直接用 for

参考文档中看到一个很好的用法,就是把条件判断和命令结合在一起使用:

$ while read INPUT
> do
>   echo "Input is $INPUT."
> done
ha!
Input is ha!.
foo
Input is foo.
bar
Input is bar.
$

中断输入是输入 ^D (Ctrl-D) ,这是文件结束的脱字符表示。


顺便提一句 break 和 continue 也是可以用的,用法和其他语言是一样的,就是还可以接受一个数字参数,表示需要跳出几层/继续最近的第几层循环。