您的位置:首页 > 运维架构 > Shell

Shell教程(四):条件语句、循环语句、break/continue

2015-12-10 13:50 411 查看
在编写shell脚本,有可能是一种情况,当你需要采取一个路径两条路径。所以,需要利用条件语句,让程序作出正确的决策和执行正确的动作。

UNIX Shell支持条件语句,从而根据不同的条件下执行不同的操作。在这里,我们将解释以下两个决策语句:

·        if...else 语句

·        case...esac 条件语句

if...else 语句:

if else语句是有用的决策语句,可以用来从一个给定的选项中选择一个选项。

UNIX Shell支持以下形式的if.. else语句:

·        if...fi 语句

·        if...else...fi 语句

·        if...elif...else...fi 语句

大部分的 if 语句检查前面的章节中讨论的关系运算符的关系。

case...esac 语句:

if...elif 可以使用多个 elif  语句执行多分支。然而,这并不总是最佳的解决方案,尤其是当所有的分支依赖于一个单一的变量的值。

UNIX Shell支持 case...esac 语句处理正是由于这个情况,它这样做更有效地比 if...elif 语句。

目前只有一种形式的情况下,这里详细case...esac 语句:

·        case...esacstatement

UNIX shell 的 case...esac 语句,比较像其他编程语言里的 switch...case ,如C或C+ +和Perl等非常相似。

 

 

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

·        while 循环

·        for 循环

·        until 循环

·        select 循环

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

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

嵌套循环:

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

嵌套的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

done

例如:

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

#!/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 循环:

1.  break 语句

2.  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语句退出循环:

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:

#!/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

这将产生以下结果。内循环有一个 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

from: http://www.yiibai.com/shell/what_is_shell.html#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息