结构化命令 之 while命令

本篇内容均摘自《Linux命令行与shell脚本编程大全》,个人认为需要重点学习的章节。【免费】Linux命令行与Shell脚本编程大全 第3版 PDF全本 21MB 百度网盘下载 - 今夕是何夕 - 博客园
while命令某种意义上是if-then语句和for循环的混杂体。 while命令允许定义一个要测试的命令,然后循环执行一组命令,只要定义的测试命令返回的是退出状态码0。它会在每次迭代的一开始测试test命令。在test命令返回非零退出状态码时, while命令会停止执行那组命令。
13.3.1 while 的基本格式
while命令的格式是:
while test command
do
other commands
done
while命令中定义的test command和if-then语句(参见第12章)中的格式一模一样。可以使用任何普通的bash shell命令,或者用test命令进行条件测试,比如测试变量值。while命令的关键在于所指定的test command的退出状态码必须随着循环中运行的命令而改变。如果退出状态码不发生变化, while循环就将一直不停地进行下去。最常见的test command的用法是用方括号来检查循环命令中用到的shell变量的值。

$ cat test10
#!/bin/bash
var1=10
while [ $var1 -gt 0 ] #while命令定义了每次迭代时检查的测试条件
do
  echo $var1
  var1=$[ $var1 - 1 ]
done
$ ./test10
10
9
8
7
6
5
4
3
2
1

只要测试条件成立, while命令就会不停地循环执行定义好的命令。在这些命令中,测试条件中用到的变量必须修改,否则就会陷入无限循环。在本例中,我们用shell算术来将变量值减1:
var1=var1 - 1 ]
while循环会在测试条件不再成立时停止。
13.3.2 使用多个测试命令
while命令允许你在while语句行定义多个测试命令。只有最后一个测试命令的退出状态码会被用来决定什么时候结束循环。如果你不够小心,可能会导致一些有意思的结果。下面的例子将说明这一点:

$ cat test11
#!/bin/bash
var1=10
while echo $var1 #第一个测试简单地显示了var1变量的当前值。
    [ $var1 -ge 0 ] #第二个测试用方括号来判断var1变量的值。
do
  echo "This is inside the loop"
  var1=$[ $var1 - 1 ]
done
$ ./test11
10
This is inside the loop
9
This is inside the loop
8
This is inside the loop
7
This is inside the loop
6
This is inside the loop
5
This is inside the loop
4
This is inside the loop
3
This is inside the loop
2
This is inside the loop
1
This is inside the loop
0
This is inside the loop
-1

在循环内部, echo语句会显示一条简单的消息,说明循环被执行了。注意当你运行本例时输出是如何结束的。while循环会在var1变量等于0时执行echo语句,然后将var1变量的值减一。接下来再次执行测试命令,用于下一次迭代。 echo测试命令被执行并显示了var变量的值(现在小于0了)。直到shell执行test测试命令, whle循环才会停止。这说明在含有多个命令的while语句中,在每次迭代中所有的测试命令都会被执行,包括测试命令失败的最后一次迭代。要留心这种用法。另一处要留意的是该如何指定多个测试命令。注意,每个测试命令都出现在单独的一行上。

你可能感兴趣的:(结构化命令 之 while命令)