我们不难发现:若while的测试结果永远为true的话,那循环将一直永久执行下去:
while : ;do echo looping… done
上例的:是bash的null command,不做任何动作,除了送回true的return value。因此这个循环不会结束,称作死循环。死循环的产生有可能是故意设计的(如跑daemon),也可能是设计错误。若要结束死循环,可透过signal来终止(如按下ctrl-c)。(关于process与signal,等日后有机会再补充,十三问暂时略过。)
一旦你能够理解while loop的话,那,就能理解until loop:
与while相反,until是在return value为false时进入循环,否则结束。
因此,前面的例子我们也可以轻松的用until来写:
num=1 until [ ! "$num" -le 10 ]; do echo "num is $num" num=$(($num + 1)) done
或是:
num=1 until [ "$num" -gt 10 ]; do echo "num is $num" num=$(($num + 1)) done
okay,关于bash的三个常用的loop暂时介绍到这里。在结束本章之前,再跟大家补充两个与loop有关的命令:break continue
这两个命令常用在复合式循环里,也就是在do…done之间又有更进一层的loop,当然,用在单一循环中也未尝不可啦…^_^
break是用来打断循环,也就是“强迫结束”循环。若break后面指定一个数值n的话,则“从里向外”打断第n个循环,预设值为break 1,也就是打断当前的循环。
在使用break时需要注意的是,它与return及exit是不同的:
而continue则与break相反:强迫进入下一次循环动作。若你理解不来的话,那你可简单的看成:在continue到done之间的句子略过而返回循环顶端…与break相同的是:continue后面也可指定一个数值n,以决定继续哪一层(从里向外计算)的循环,预设值为continue 1,也就是继续当前的循环。










