在Linux Shell中使用循环语句——for语句、while语句、until语句

在本章中,我们将讨论Linux中的Shell循环语句。循环是一种强大的编程工具,可让您重复执行一组命令。在本章中,我们将检查以下可供Shell程序员使用的循环类型

  • for循环
  • while循环
  • until循环

for循环

for循环对项目列表进行操作。它为列表中的每个项目重复执行一组命令。

语法

for var in word1 word2 ... wordN
do
   Statement(s) to be executed for every word.
done

这里var是变量的名称,word1wordN是由空格分隔的字符(单词)序列。 每次for循环执行时,变量var的值都会设置为单词列表中的下一个单词,即 word1wordN

示例

for var in 0 1 2 3 4 5 6 7 8 9
do
   echo $var
done

执行后,您将收到以下结果:

0
1
2
3
4
5
6
7
8
9

以下是显示所有以.bash开头并在您家目录中的可用文件的示例。 我们将在我的根目录执行这个脚本。

#!/bin/bash

for FILE in $HOME/.bash*
do
   echo $FILE
done

执行后,您将收到以下结果:

/root/.bash_history
/root/.bash_logout
/root/..bash_profile
/root/.bashrc

while循环

while循环使你能够重复执行的某个命令集直到某些条件发生时。当您需要重复操纵某些变量的值时,通常会使用它。

语法

while command
do
   Statement(s) to be executed if command is true
done

此处评估Shell命令。 如果结果值为真,则执行给定的语句。 如果commandfalse,则不会执行任何语句,程序将跳转到done语句之后的下一行。

示例

#!/bin/bash

a=0

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

执行后,您将收到以下结果:

0
1
2
3
4
5
6
7
8
9

每次执行此循环时,都会检查变量a的值是否小于10。如果a的值小于10,则此测试条件的退出状态为0。在这种情况下,当前 显示a的值,然后a增加1

until循环

until循环非常适合需要在某些条件为真时执行一组命令。有时您需要执行一组命令,直到条件为真。

语法

until command
do
   Statement(s) to be executed until command is true
done

此处评估Shell命令。如果结果值为假,则执行给定的语句。如果命令为真,则不会执行任何语句,程序将跳转到done语句之后的下一行。

例子

这是一个简单的例子,它使用until循环来显示数字09

#!/bin/bash

a=0

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

执行后,您将收到以下结果:

0
1
2
3
4
5
6
7
8
9

循环控制

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

  • break语句
  • continue语句

无限循环

所有循环的生命周期都是有限的,一旦条件为假或真,取决于循环,它们就会结束。

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

示例

这是一个前面章节见过的使用的while循环显示数字09的简单示例

#!/bin/bash

a=10

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

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

break语句

break语句用于跳过break语句之后的代码终止整个循环的执行。 然后它会逐步执行循环结束后的代码。

语法

以下break语句用于跳出循环

break

break命令也可用使用以下格式的语句退出嵌套循环

break n

这里n指定退出从break算起的第n个封闭循环

示例

这是一个简单的例子,它表明循环在a变为5时立即终止

#!/bin/bash

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等于2var2等于0,此脚本将中断两个循环

#!/bin/bash

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

执行后,您将收到以下结果。 在内部循环中,您有一个带参数2break指令。这表示如果满足条件,您应该退出外部循环并最终退出内部循环。

1 0
1 5

continue语句

continue语句类似于break命令,除了它导致循环的当前迭代退出,而不是整个循环。

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

语法

continue

break语句一样,可以给continue命令一个整数参数以跳过嵌套循环中的命令。

continue n

这里n指从continue数的第n个封闭循环。

示例

#!/bin/bash

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