• Linux Shell 之 while 循环语句


    一、while 命令

      while命令某种意义上是if-then语句和for循环的混杂体。while命令允许定义一个要测试的命令,然后循环执行一组命令,只要定义的测试命令返回的是退出状态码0。它会在每次迭代的一开始测试test命令。在test命令返回非零退出状态码时,while命令会停止执行那组命令。

    1.1、while 的基本格式

      while命令的格式是:

    1 while test command
    2 do
    3     other commands
    4 done

      while命令中定义的test command和if-then语句(参见第12章)中的格式一模一样。可以使用任何普通的bash shell命令,或者用test命令进行条件测试,比如测试变量值。
      while命令的关键在于所指定的test command的退出状态码必须随着循环中运行的命令而改变。如果退出状态码不发生变化, while循环就将一直不停地进行下去。
      最常见的test command的用法是用方括号来检查循环命令中用到的shell变量的值。

     1 $ cat test10
     2 #!/bin/bash
     3 # while command test
     4 var1=10
     5 while [ $var1 -gt 0 ]
     6 do
     7 echo $var1
     8 var1=$[ $var1 - 1 ]
     9 done
    10 $ ./test10
    11 10
    12 9
    13 8
    14 7
    15 6
    16 5
    17 4
    18 3
    19 2
    20 1
    21 $

      while命令定义了每次迭代时检查的测试条件:

    1 while [ $var1 -gt 0 ]

      只要测试条件成立,while命令就会不停地循环执行定义好的命令。在这些命令中,测试条件中用到的变量必须修改,否则就会陷入无限循环。在本例中,我们用shell算术来将变量值减一:

    1 var1=$[ $var1 - 1 ]

      while循环会在测试条件不再成立时停止。

    1.2、使用多个测试命令

      while命令允许你在while语句行定义多个测试命令。只有最后一个测试命令的退出状态码会被用来决定什么时候结束循环。如果你不够小心,可能会导致一些有意思的结果。下面的例子将说明这一点。

     1 $ cat test11
     2 #!/bin/bash
     3 # testing a multicommand while loop
     4 var1=10
     5 while echo $var1
     6 [ $var1 -ge 0 ]
     7 do
     8 echo "This is inside the loop"
     9 var1=$[ $var1 - 1 ]
    10 done
    11 $ ./test11
    12 10
    13 This is inside the loop
    14 9
    15 This is inside the loop
    16 8
    17 This is inside the loop
    18 7
    19 This is inside the loop
    20 6
    21 This is inside the loop
    22 5
    23 This is inside the loop
    24 4
    25 This is inside the loop
    26 3
    27 This is inside the loop
    28 2
    29 This is inside the loop
    30 1
    31 This is inside the loop
    32 0
    33 This is inside the loop
    34 -1
    35 $

      请仔细观察本例中做了什么。while语句中定义了两个测试命令。

    1 while echo $var1
    2     [ $var1 -ge 0 ]

      第一个测试简单地显示了var1变量的当前值。第二个测试用方括号来判断var1变量的值。在循环内部,echo语句会显示一条简单的消息,说明循环被执行了。注意当你运行本例时输出是如何结束的。

    1 This is inside the loop
    2 -1
    3 $

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

  • 相关阅读:
    ASP.NET 自制时间控件
    ORACLE 函数汇总之单记录函数
    Servers IIS 重启命令
    ASP.NET 两个Dropdownlist控件联动
    ASP.NET datagridview控件表头定义
    python Image 安装
    ssh 不需要密码的链接
    [Redis] redis 相关的博客
    [emacs] python代码折叠
    linux python 链接 oracle
  • 原文地址:https://www.cnblogs.com/Reverse-xiaoyu/p/13269902.html
Copyright © 2020-2023  润新知