全部博文(471)
分类: LINUX
2013-02-21 21:03:12
---大头针
三、控制结构:
C的程序结构与Shell的程序结构大同小异。
3.1选择结构:
1.If结构
if [ conditon1 ]
then
statments1
elif [ condition2 ]
then
statments2
else
statments3
fi
如果then和if放在同一行上,就必须要用一个分号把test语句和then分隔开。
if [ -f fred.c ];then
...
fi
#!/bin/sh
echo "Is it morning? Please answer yes or no." read YES_OR_NO if [ "$YES_OR_NO" = "yes" ]; then echo "Good morning!" elif [ "$YES_OR_NO" = "no" ]; then echo "Good afternoon!" else echo "Sorry, $YES_OR_NO not recognized. Enter yes or no." exit 1 fi exit 0
上例中的read命令的作用是等待用户输入一行字符串,将该字符串存到一个Shell变量中。
。exit它使整个脚本中止运行。最常使用于来自用户输入的不正确请求,比如一条语句没有成功运行或者某些其他错误发生。 exit 语句可以带一个可选参数。参数是一个整数退出状态码,储存在 $? 中的返回给父进程的退出状态码。 0参数意味着脚本成功运行完毕。程序员会用其他值来给父进程传递不同的消息,所以根据子进程的成功或者失败,父进程采取不同的动作。如果没有参数给 exit 语句,父shell使用 $? 变量的现存值。
2.case结构
case variable in
value) command1
exit 0
;;
value) command 2
exit 0
;;
esac
case语句 :它能够把变量的内容与多个模板进行匹配,再根据成功匹配的模板去决定应该执行哪部分代码。
使用格式:
case 匹配母板 in
模板1 [ | 模板2 ] … ) 语句组 ;;
模板3 [ | 模板4 ] … ) 语句组 ;;
esac
case语句的匹配是从上往下地匹配顺序。因此,case语句编写的原则是从上往下,模板从特殊到普通。在C语言里,case语句中有default模板,而在shell程序设计中,可能将模板写成*,就可以完成相同的功能。
case语句的模板支持匹配
匹配以n开头的所有情况: n*
匹配yes的所有字母大小不同的情况: [yY][eE][sS]
但不支持{}匹配,因为模板可以使用 | 就可以达到目的。
#!/bin/sh
echo "please iput \"yes\" or\"no\""
read var
case "$var" in
[yY][eE][sS]) echo "your input is yes" ;;
[nN][oO]) echo "your input is no" ;;
*) echo "input error" ;;
esac
exit 0
3.2.循环结构:
1.for结构
for name [in list]
do
statements using $name
done
1.list应该是一系列由空格分隔的字符序列(单词),省略in list 时默认为
$@(命令行的参数列表)
2.for循环执行的次数取决于列表list中单词的个数
3.在for循环体中一般要出现变量$name,但也可以不出现。
2.循环结构:until
until [ condition ]
do
statments
done
condition 条件成立退出循环
3.循环结构:while循环
while [ condition ]
do
statments
done
条件不成立退出循环
备注:
还有一些经常与循环结合的命令:比如break [n]、continue [n]。和C中break Continue功能基本一致。只不过break可以选择跳出几层循环、continue可以选择跳过几个回合。