case "$1" in
start)
start
;;
stop)
stop
;;
status)
rhstatus
;;
restart|reload)
restart
;;
condrestart)
[ -f /var/lock/subsys/syslog ] && restart || :
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart}"
exit 1
esac
(若你对positional parameter的印像已经模糊了,请重看第9章吧。)okay,十三问还剩一问而已,过几天再来搞定之….^_^
for what?while与until差在哪?
最后要介绍的是shell script设计中常见的“循环”(loop)。所谓的loop就是script中的一段在一定条件下反复执行的代码。bash shell中常用的loop有如下三种:for while until
for loop是从一个清单列表中读进变量值,并“依次”的循环执行do到done之间的命令行。例:
for var in one two three four five do echo ----------- echo '$var is '$var echo done
上例的执行结果将会是:
for会定义一个叫var的变量,其值依次是one two three four five。
因为有5个变量值,因此do与done之间的命令行会被循环执行5次。
每次循环均用echo产生三行句子。而第二行中不在hard quote之内的$var会依次被替换为one two three four five。
当最后一个变量值处理完毕,循环结束。
我们不难看出,在for loop中,变量值的多寡,决定循环的次数。然而,变量在循环中是否使用则不一定,得视设计需求而定。倘若for loop没有使用in这个keyword来指定变量值清单的话,其值将从$@(或$*)中继承:
for var; do … done
(若你忘记了positional parameter,请温习第9章…)
for loop用于处理“清单”(list)项目非常方便,其清单除了可明确指定或从positional parameter取得之外,也可从变量替换或命令替换取得…(再一次提醒:别忘了命令行的“重组”特性!)
然而,对于一些“累计变化”的项目(如整数加减),for亦能处理:
for ((i=1;i<=10;i++)) do echo "num is $i" done
除了for loop,上面的例子我们也可改用while loop来做到:
num=1 while [ "$num" -le 10 ]; do echo "num is $num" num=$(($num + 1)) done
while loop的原理与for loop稍有不同:它不是逐次处理清单中的变量值,而是取决于while后面的命令行之return value:
若为ture,则执行do与done之间的命令,然后重新判断while后的return value。
若为false,则不再执行do与done之间的命令而结束循环。
分析上例:










