在 Shell Scripts中条件分支除了使用 if 以外,还有一个非常常用的就是case了。我们都经常会通过命令
service rsyslog restart
来重启日志服务,实际上就是在调用 /etc/init.d/rsyslog这个脚本,并给脚本传入了restart方法。我们可以来看看这个脚本的实现,在/etc/init.d/下面的脚本就是学习case最好的例子,文件内容比较多,摘下一部分,如下:
case "$1" in # 注意这里的$1 表示的是取 给脚本传入的第一个参数。实际上是第二个,第一个是执行的脚本名字。$0 就表示的是rsyslog
start) # 当第一个参数为 start 时,执行下面的语句,注意后面的")"是必须的。这里的start是一个字符串,可以加上"start"也是可以的
start # 这是定义的一个start 函数,走到这一行时,会调用预先定义的start函数
;; # 这个类似于java中的 break。结束这个分支,这行代码是必须的,不能省略
stop) # 同start
stop
;;
restart)
restart
;;
reload)
exit 3
;;
force-reload)
restart
;;
status)
rhstatus
;;
condrestart|try-restart)
rhstatus >/dev/null 2>&1 || exit 0
restart
;;
*) # 当以上所有的条件都不满足时,执行下面的语句,类似于java中的default
echo $"Usage: $0 {start|stop|restart|condrestart|try-restart|reload|force-reload|status}"
exit 3
esac # 当case结束的时候,一定要使用反case,也就是 esac来结束
通过这个例子,可以看到case的语法,以及case的应用场景