Shell 循环

简介: Shell 循环

Shell 循环

循环是一个强大的编程工具,使您能够重复执行一组命令。在本教程中,您将学习以下类型的循环Shell程序:


你会根据不同情况使用不同的循环。例如用 while 循环执行命令,直到给定的条件下是 ture ,循环直到执行到一个给定的条件为 false。

有良好的编程习惯,将开始使用情况的基础上适当的循环。这里while和for循环类似在大多数其他的编程语言,如C,C++ 和 等。


嵌套循环:


所有支持嵌套循环的概念,这意味着可以把一个循环内其他类似或不同的循环。这种嵌套可以去高达无限数量的时间根据需要。


嵌套的while循环和类似的方式,可以嵌套其他循环的基础上的编程要求下面是一个例子:


嵌套while循环:

作为另一个while循环的身体的一部分,这是可以使用一个while循环。语法:

while command1 ; # this is loop1, the outer loop
do
   Statement(s) to be executed if command1 is true
   while command2 ; # this is loop2, the inner loop
   do
      Statement(s) to be executed if command2 is true
   done
   Statement(s) to be executed if command1 is true


例如:

这里是循环嵌套一个简单的例子,让我们添加另一个倒计时循环内的循环,数到九:

#!/bin/sh
a=0
while [ "$a" -lt 10 ]    # this is loop1
do
   b="$a"
   while [ "$b" -ge 0 ]  # this is loop2
   do
      echo -n "$b "
      b=`expr $b - 1`
   done
   echo
   a=`expr $a + 1`
done


这将产生以下结果。重要的是要注意 echo -n 是如何工作。在这里,-n选项echo ,以避免打印一个新行字符。

0
1 0
2 1 0
3 2 1 0
4 3 2 1 0
5 4 3 2 1 0
6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0
9 8 7 6 5 4 3 2 1 0


Shell while 循环

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

语法

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

这里Shell命令进行计算。如果结果值是 true,给定语句被执行。如果命令为 false,那么没有语句将不执行,程序将跳转到done语句后的下一行。

例子:

下面是一个简单的例子,使用while循环显示数字0到9:

#!/bin/sh
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。在这种情况下,当前值的将显示,然后按1递增。

Shell for循环

循环操作项目清单。重复一组命令列表中的每个项目。


语法

for var in word1 word2 … wordN

do

Statement(s) to be executed for every word.

done

var是一个变量,word1 到 wordN 是由空格分隔的字符(字)序列的名称。每次for 循环的执行,变量var的值被设置为下一个单词的列表中的字,word1 到 wordN 。例子:

下面是一个简单的例子,它使用for循环跨越通过给定的数字列表:

#!/bin/sh
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在home目录。执行这个脚本:

#!/bin/sh
for FILE in $HOME/.bash*
do
   echo $FILE
done


这将产生以下结果:

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

Shell until 循环

完美的情况下,你需要执行的一组命令某个条件为真时,while循环执行。有时候,你需要执行一组命令,直到某个条件为真。

语法

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

这里Shell命令进行评估计算。如果结果值是false,给定语句(s)被执行。如果命令没有语句为true,那么将不执行,程序会跳转到下一行done语句后。

例子:

下面是一个简单的例子,它使用直到循环显示数字0到9:

#!/bin/sh
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 select 循环

select 循环提供了一个简单的方法来创建一个编号的菜单,用户可从中选择。它是有用的,当你需要从列表中选择,要求用户选择一个或多个项目。

语法

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

var是一个变量,word1 到 wordN是由空格分隔的字符(字)序列的名称。每次for循环的执行,变量var的值被设置为下一个单词的列表中的字,由 word1 到wordN。


对于每一个选择的一组命令将被执行,在循环中。这个循环在ksh,并已被改编成的bash。这不是在sh。


例子:下面是一个简单的例子,让用户选择的首选饮品:

#!/bin/ksh
select DRINK in tea cofee water juice appe all none
do
   case $DRINK in
      tea|cofee|water|all) 
         echo "Go to canteen"
         ;;
      juice|appe)
         echo "Available at home"
      ;;
      none) 
         break 
      ;;
      *) echo "ERROR: Invalid selection" 
      ;;
   esac
done

select 循环的菜单看起来像下面这样:

$./test.sh
1) tea
2) cofee
3) water
4) juice
5) appe
6) all
7) none
#? juice
Available at home
#? none
$

您可以更改显示的提示选择循环通过改变变量PS3如下:

$PS3="Please make a selection => " ; export PS3
$./test.sh
1) tea
2) cofee
3) water
4) juice
5) appe
6) all
7) none
Please make a selection => juice
Available at home
Please make a selection => none
$

Shell 循环控制break/continue


到目前为止,我们已经看到了,创建循环和使用循环来完成不同的任务。有时候,你需要停止循环或跳过循环迭代。


在本教程中,您将了解以下两个语句用于控制 Shell 循环:


break 语句


continue 语句


无限循环:

循环有限的生命,他们跳出来,一旦条件是 false 还是 false 取决于循环。


由于所需的条件是不符合一个循环可能永远持续下去。永远不会终止执行一个循环执行无限次数。出于这个原因,这样的循环被称为无限循环。例子:

下面是一个简单的例子,使用while循环显示数字0到9:

#!/bin/sh
a=10
while [ $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done


这个循环将永远持续下去,因为常是大于10,它永远不会成为小于10。所以这是无限循环真实的例子。


break语句

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


语法


break

将用于以下break语句退出循环:


break n

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

例子:

下面是一个简单的例子展示了循环将终止只要一变为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


下面是一个简单的嵌套循环的例子。这个脚本打破两个循环,如果的 var1 等于2 和 var2 等于0:

下面是一个简单的嵌套循环的例子。这个脚本打破两个循环,如果的 var1 等于2 和 var2 等于0:
#!/bin/sh


这将产生以下结果。内循环有一个 break 命令与参数2。这表明,如果条件得到满足应该跳出外循环,并最终从内循环跳出。

1 0

1 5

continue 语句

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
相关文章
|
1月前
|
存储 运维 Shell
shell中for while until 三种循环的用法
shell编程中,有几种常见的循环结构,包括for循环、while循环和until循环,总的来说,循环shell编程中扮演着至关重要的角色,它们使得自动化任务变得更加容易,提高了效率,并且可以处理各种各样的编程需求。
254 13
shell中for while until 三种循环的用法
|
5月前
|
Shell
在Shell脚本中,`for`循环
在Shell脚本中,`for`循环
31 2
|
7月前
|
Shell
shell里的for循环详解
shell里的for循环详解
102 0
|
7月前
|
Shell
shell里的while循环详解
shell里的while循环详解
87 0
|
7月前
|
Shell
shell脚本里的循环
shell脚本里的循环
62 0
|
1月前
|
监控 Shell
shell学习(五) 【循环控制continue,break、while 语法】
shell学习(五) 【循环控制continue,break、while 语法】
12 0
|
3月前
|
Shell
shell脚本for循环复杂用法
shell脚本for循环复杂用法
51 5
|
3月前
|
算法 Shell Linux
Linux的shell命令——判断与循环
Linux的shell命令——判断与循环
39 1
|
5月前
|
Shell
在Shell(如Bash)中,`while`循环
在Shell(如Bash)中,`while`循环
48 2
|
5月前
|
Shell
shell的for循环使用
shell的for循环使用
24 0