循环命令while、until、break、continue详解
文章目录
while命令
while命令允许定义一个要测试 的命令,然后循环执行一组命令,只要定义的测试命令返回的是退出状态码0。它会在每次迭代的 一开始测试test命令。在test命令返回非零退出状态码时,while命令会停止执行那组命令。
while命令的格式是:
while testcommand do
other commands
done
while命令中定义的test command和if-then语句)中的格式一模一样。可以使用任何普通的bash shell命令,或者用test命令进行条件测试,比如测试变量值。
while命令允许你在while语句行定义多个测试命令。只有最后一个测试命令的退出状态码 会被用来决定什么时候结束循环。如果你不够小心,可能会导致一些有意思的结果。下面的例子将说明这一点。
|
|
注意,每个测试命令都出现在单独的一行上。
第一个测试简单地显示了var1变量的当前值。第二个测试用方括号来判断var1变量的值。
在循环内部,echo语句会显示一条简单的消息,说明循环被执行了。注意当你运行本例时输出 是如何结束的。注意当你运行本例时输出 是如何结束的。
This is inside the loop
-1
$
while循环会在var1变量等于0时执行echo语句,然后将var1变量的值减一。接下来再次执 行测试命令,用于下一次迭代。echo测试命令被执行并显示了var变量的值(现在小于0了)。直到shell执行test测试命令,whle循环才会停止。
这说明在含有多个命令的while语句中,在每次迭代中所有的测试命令都会被执行,包括测试命令失败的最后一次迭代。要留心这种用法。
until命令
until命令和while命令工作的方式完全相反。until命令要求你指定一个通常返回非零退 出状态码的测试命令。只有测试命令的退出状态码不为0,bash shell才会执行循环中列出的命令。 一旦测试命令返回了退出状态码0,循环就结束了。
和你想的一样,until命令的格式如下。
|
|
和while命令类似,你可以在until命令语句中放入多个测试命令。只有最后一个命令的退出状态码决定了bash shell是否执行已定义的other commands。
break命令
跳出内部循环
在shell执行break命令时,它会尝试跳出当前正在执行的循环。
|
|
for循环通常都会遍历列表中指定的所有值。但当满足if-then的条件时,shell会执行break 命令,停止for循环。
这种方法同样适用于while和until循环。
跳出外部循环
有时你在内部循环,但需要停止外部循环。break命令接受单个命令行参数值:
break n
其中n指定了要跳出的循环层级。默认情况下,n为1,表明跳出的是当前的循环。如果你将n设为2,break命令就会停止下一级的外部循环。
|
|
continue命令
continue命令可以提前中止某次循环中的命令,但并不会完全终止整个循环。可以在循环内部设置shell不执行命令的条件。
|
|
当if-then语句的条件被满足时(值大于5且小于10),shell会执行continue命令,跳过此 次循环中剩余的命令,但整个循环还会继续。当if-then的条件不再被满足时,一切又回到正轨。
和break命令一样,continue命令也允许通过命令行参数指定要继续执行哪一级循环:
continue n
其中n定义了要继续的循环层级。
文章作者 Forz
上次更新 2017-08-09