Unix / Linux - Shell 循环控制


在本章中,我们将讨论 Unix 中的 shell 循环控制。到目前为止,您已经了解了创建循环以及使用循环来完成不同的任务。有时您需要停止循环或跳过循环的迭代。

在本章中,我们将学习以下两个用于控制 shell 循环的语句:

  • 中断语句_

  • 继续语句_

无限循环

所有循环的寿命都是有限的,一旦条件为假或为真,它们就会出现,具体取决于循环。

如果不满足所需的条件,循环可能会永远继续下去。永远执行而不终止的循环会执行无限次。因此,此类循环称为无限循环。

例子

这是一个简单的示例,使用while循环显示数字 0 到 9 -

#!/bin/sh

a=10

until [ $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done

这个循环会永远持续下去,因为a总是大于等于 10并且永远不会小于 10。

中断语句

Break语句用于在执行完 Break 语句之前所有代码行后终止整个循环的执行。然后它会向下执行循环结束后的代码。

句法

以下break语句用于跳出循环 -

break

使用这种格式,break 命令还可以用于退出嵌套循环 -

break n

这里n指定要退出的第n个封闭循环。

例子

这是一个简单的示例,表明一旦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 循环的一个简单示例。如果var1 等于 2并且var2 等于 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语句与break命令类似,只不过它导致循环的当前迭代退出,而不是整个循环。

当发生错误但您想尝试执行循环的下一次迭代时,此语句很有用。

句法

continue

与break语句一样,可以为 continue 命令提供整数参数以跳过嵌套循环中的命令。

continue n

这里n指定要继续的第n个封闭循环。

例子

以下循环使用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