Unix / Linux - Shell 循环控制

  • 简述

    本章,我们将讨论 Unix 中的 shell 循环控制。到目前为止,您已经了解了创建循环和使用循环来完成不同的任务。有时您需要停止循环或跳过循环的迭代。
    在本章中,我们将学习以下两个用于控制 shell 循环的语句:
    • break 语句
    • continue 语句
  • 无限循环

    所有循环的生命周期都是有限的,一旦条件为假或真,取决于循环,它们就会出现。
    如果不满足所需条件,循环可能会一直持续下去。永远执行而不终止的循环执行无限次。因此,这种循环称为无限循环。

    例子

    这是一个简单的例子,它使用 while 循环显示数字零到九 -
    
    #!/bin/sh
    a=10
    until [ $a -lt 10 ]
    do
       echo $a
       a=`expr $a + 1`
    done
    
    这个循环永远持续下去,因为 a 总是 greater than 或者 equal to 10 并且它永远不会少于 10。
  • break 声明

    break语句用于在完成执行到 break 语句的所有代码行之后终止整个循环的执行。然后它会逐步执行循环结束后的代码。

    句法

    以下 break 语句用于跳出循环 -
    
    break
    
    break 命令也可用于退出使用此格式的嵌套循环 -
    
    break n
    
    这里 n 指定 nth 封闭循环到退出。

    例子

    这是一个简单的例子,它显示循环一旦终止 a 变成 5 -
    
    #!/bin/sh
    a=0
    while [ $a -lt 10 ]
    do
       echo $a
       if [ $a -eq 5 ]
       then
          break
       fi
       a=`expr $a + 1`
    done
    
    执行后,您将收到以下结果 -
    
    0
    1
    2
    3
    4
    5
    
    这是嵌套 for 循环的简单示例。如果出现以下情况,此脚本将break两个循环var1 equals 2var2 equals 0
    
    #!/bin/sh
    for var1 in 1 2 3
    do
       for var2 in 0 5
       do
          if [ $var1 -eq 2 -a $var2 -eq 0 ]
          then
             break 2
          else
             echo "$var1 $var2"
          fi
       done
    done
    
    执行后,您将收到以下结果。在内部循环中,您有一个带参数 2 的 break 命令。这表明如果满足条件,您应该退出外部循环并最终退出内部循环。
    
    1 0
    1 5
    
  • continue 声明

    continue 声明类似于 break 命令,除了它会导致循环的当前迭代退出,而不是整个循环。
    当发生错误但您想尝试执行循环的下一次迭代时,此语句很有用。

    句法

    
    continue
    
    与 break 语句一样,可以给 continue 命令一个整数参数以跳过嵌套循环中的命令。
    
    continue n
    
    这里 n 指定 nth 封闭循环 continue 。

    例子

    以下循环使用 continue 从 continue 语句返回并开始处理下一条语句的语句 -
    
    #!/bin/sh
    NUMS="1 2 3 4 5 6 7"
    for NUM in $NUMS
    do
       Q=`expr $NUM % 2`
       if [ $Q -eq 0 ]
       then
          echo "Number is an even number!!"
          continue
       fi
       echo "Found odd number"
    done
    
    执行后,您将收到以下结果 -
    
    Found odd number
    Number is an even number!!
    Found odd number
    Number is an even number!!
    Found odd number
    Number is an even number!!
    Found odd number