shell中的循环结构有:for,while和until(while和until的语法结构、设计思路基本一致,因此归为一类讨论)
for
for循环有两种形态:
1.列表形态,形如:
for var in varlist; do
command 1
...
command n
done
其思路是:用var依次读取varlist中的各元素,因此循环次数取决于varlist的长度
这里的varlist可以直接写出来,也可以是变量替换${ }或命令行替换$( )(想想command处理流程中对meta的重组)
若缺省in varlist,则其值将从$*(或$@)中获得
直接写varlist的例子如下:
for var in aa bb cc dd ee ff; do
echo "now is ${var}"
done
2.循环计数形态,形如:
for (( i=1; i<=100; i++ )); do
command 1
...
command n
done
循环技术形态的设计思路和C语言很相似
这里利用到了(( ))的数值测试条件功能和变量值自增减功能(详见《${ },$( )和$(( ))》、《shell中的测试条件》)
while
1.while循环利用“测试条件”控制循环,其结构为
while [ ... ]; do
command 1
...
command n
done
2.until相当于对while取反,其表示:循环一直运行,“直到"测试条件成立才终止
break和continue
1.shell中的break和continue比C语言更灵活,因为二者可以指定目标循环层,举例说明
for ...; do #记为loop A
for ...; do #记为loop B
break #只退出loop B,但仍在loop A中(break的默认参数为1,1代表当前循环层)
done
done
for ...; do #记为loop A
for ...; do #记为loop B
break 2 #直接退出loop A
done
done
break和continue的缺省参数为1,
参数n表示从里向外数的第n层循环