任何编程语言都有控制结构,Shell也不例外,这些也是需要牢记的。

1.  if 结构

最简单的判断形式就是if结构。语法为:

if 表达式

then 命令行

{else  命令行}

fi

当然,if也可以嵌套使用,如下所示

if 表达式

then 命令行

else

if 表达式

then 命令行

else 命令行

fi

     fi

2.  case结构

分支结构case是一个多路分支判断结构,可以测试一个表达式的值,并根据值的结果选择相应的分支程序。也就是可以替代if..then..elif..结构,语法为:

case 表达式 in

模式1  命令1;;   //模式里可有多个选项,可用|表示或关系,但必须以)结束

模式2  命令2;;   //每个命令分支必须以;;结束

…………

esac                 //esac表示case结构结束

 

另外:模式中可以使用Shell通配符。可以用*)表示都不满足的情况,相当于PHP中的switch中的default

实例:

#!/bin/bash

WEEK=`date +%u`

case $WEEK in

6) echo “today is Saturday”;;

7) echo “today is Sunday”;;

1|2|3|4|5) echo “today is not weekend”;;

esac

当然,倒数第二行也可以换做 *) echo “today is not weekend”

实例:case的嵌套

#!/bin/bash

case $1 in

student)

case $2 in

Jim) echo”hello Jim , your number is 34”;;

Tom) echo “hello Tom, your number is 23”;;

*)echo “sorry ,I can’t find your information”;;

esac

;;

     teacher)

        case $2 in

        Lucy) echo ”Mrs Lucy, your number is 4”;;

        Mary) echo “Mrs Mary, your number is 6”;;

        esac

        ;;

      *)echo “输入不正确

     esac

3.  select结构

select循环结构通常用于生成菜单,生成的菜单前面具有编号,用户敲一下编号,就执行相应的代码,可以达到交互的效果。

select的结构:

select 变量 in列表

do

命令表

done

    其中,列表是一个由字符串组成的序列,在程序执行select时,该列表将以菜单的形式进行显示并等待用户输入,用户输入的选项将传递给“变量”并执行select结构体中的命令,do….done之间是select的循环体,do表示循环开始,done表示循环结束。

    select总是与case结构一起使用。

    可以使用break命令或者exit命令结束脚本。

   select结构实例:

     #!/bin/bash

     echo “------查询一周计划--------”

     select N in 周一 周二 周三 周四 周五 周六 周日 退出

     do

     case $N in

     周一) echo “新的一周,又该上班了”;;

     周二) echo “终于过去一天了”;;

     周三) echo “这周过去一半了,不错,哈哈”;;

     周四) echo “下午休息一下”;;

     周五) echo “明天可以过周末了,不错”;;

     周六) echo “今天可以出去玩了”;;

     周日) echo “好好睡一觉”;;

     退出) echo “谢谢使用!” ;  break ;;

     esac

     done

     需要注意的是,echo和输出内容之间需要有空格。

     运行效果为:

     

4.  while循环

循环用于反复执行一系列的语句,正是循环语句,提高了我们的效率。最简单的循环就是while循环,也叫当型循环。

while语句的语法格式:

while 表达式

do

命令表

done

其中,“表达式”为循环控制条件,每次循环开始前都会检查,如果“表达式”的值为真,就执行do done之间的代码,执行完毕之后,会重新对表达式进行检测,如果为真,则继续进入循环体,如果为假,则跳出循环。

实例:输出1~N的平方值,N由用户输入

#!/bin/bash

echo “Please enter a number:”

read N

i =1

while [ $i –le $N ]     //这里的中括号相当于test,并且需要注意的是中括号前后有空格

do

RESULT=`expr $i \* $i`

echo “$i------------$RESULT”

i=$(($i+1))

done

下面说一下while的嵌套,举个乘法表的例子:

#!/bin/bash

i=1

while [ $i –le 9 ]

do

j=1

while [ $j –le $i ]

do

RESULT=`expr $j \* $i`

echo –n “$j * $i =$RESULT ”

j=$(($j+1))

done

echo “”

i=$(($i+1))

done

注意:为了避免死循环,while语句中的循环体中必须有一条修改循环控制条件的代码。

5.  for循环

Shell中的for循环和其他语言的for循环有些不同,是通过一个列表来控制循环的次数

语法结构:

for 变量 in 列表

do

命令表

done

列表通常由一系列由空格作为分隔符的字符串组成

列表中的字符串依次赋值给变量,每次赋值后执行命令表中的指令

循环结束之后,继续执行done后面的语句

例子:新建四个账号

#!/bin/bash

for name in TOM LILY JIM LUCY

do

useradd $name

done

6.  until循环

until循环也称为直到型循环,whileuntil循环的区别在于,while循环在条件为真时继续执行循环,而until则是在条件为假时继续执行循环。

语法结构:

until 条件测试语句

do

命令表

done

实例:

#!/bin/bash

echo “enter your type”

read type

until [ $type = “quit” ]

do

echo “your type is $type”

echo “enter your type”

read type

done

7.  break continueexit

在流程控制语句中,breakcontinue是两个比较重要的语句,可以控制程序走向。

break语句可以直接跳出循环,continue语句可以跳过本次循环的其余代码而进行下一次的循环,而exit可以直接跳出正在执行的脚本

break的实例:

#!/bin/bash

echo “Please enter the number”

read N

for i in 1 2 3 4 5 6 7 8 9

do

if [ $i –eq $N ];then

echo “exit the for loop”

break

else

echo “this is the $i time”

fi

done