三. shell 中的控制结构
任何编程语言都需要判断和循环两种控制结构,那么这两种结构在shell script中是什么样子的呢,让我们来看一下。
1.判断结构
判断结构分为两种 if 和 switch
1)if
if
then
elif
then
else
fi
既然提到了if, 那么就必须提到AND(&&) 与 OR(||),与C语言一样,这两运算符仍然是短路的,用一个例子说明一下
cmd1 && cmd2:cmd1成功后再去运行cmd2,如果都成功,则为真, 否则,如果cmd1失败了,就直接退出了,cmd2不会运行;
cmd1 || cmd2 :如果cmd1成功了那么cmd2就不用运行了,直接为真,反之,如果cmd1失败了,则运行cmd2,如果都失败了则返回假;
除了AND和OR之外,与if配合使用的还有test命令。
test:
test命令会返回状态值,现在有一个符号[ ]与test具有相同的功能,使用模式为
test [expression] [ [expression] ]
值得强调的是[ ]中expression两侧必须有空格才行
test命令主要用来测试文件属性,字符串比较,数字比较,测试文件属性有一个比较长的list,可以参照书本,字符串比较直接使用 = !=即可,而数字的比较则需要用 - 加上字母来表示 -eq -gt -le等。 不管怎么用在使用[]代替test时,一定不要忘记空格。
另外,在test []中,也有AND和OR哦,分别用-a -o来表示,这与[] && []是一样的。
test命令使用时需要注意的情况:
test需要参数,所有通常都会把参数用“”引起来, if [ -f“$var” ] right but if [ -f $var ] wrong
test只能用于整数的比较
2)case
基本模式:
case $1 in
state1)
...
;;
state2 | state3)
...
;;
*)
...
exit
esac
case中也允许多个模式匹配只需要将多个匹配用 | 隔开即可。
2.循环
循环有三种
1)for
for的模式如下:
for var in list
do
。。。
done
2)while
while condition
do
。。。
done
3)until
until condition
do
。。。
done
此时,我们讲一下until与while的区别,while中,condition为false时退出,而until则是在condition为true时才退出。
3. break and continue
这两个关键词与C语言中的相同,都是用于控制循环体,但是shell中他们却可以接受参数,用于指定作用到的循环体。
OK,说了这么多,是时候show some samples了。
Example1:
for var in $*
do
echo $var
done
Example2:
while test "$var" !-_ "quit"
do
echo $var
read var
done