任何编程语言都有控制结构,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循环也称为直到型循环,while和until循环的区别在于,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 continue和exit
在流程控制语句中,break和continue是两个比较重要的语句,可以控制程序走向。
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
转载于:https://blog.51cto.com/xiaosu/531246