我使用过的Linux命令之case - Bash的多分支判断语句
本文链接:http://codingstandards.iteye.com/blog/781017 (转载请注明出处)
用途说明
case结构用于多种情况的条件判断。类似于其他编程语言中的switch/case语句,但从语法形式上讲,有很大的不同。
常用格式
case 字符串 in
模式)
语句
;;
模式2 | 模式3)
语句
;;
*)
默认执行的 语句
;;
esac
提示:esac就是case反过来写。
使用示例
示例一
show_baby() { case $1 in 男 | M) echo "是位小少爷" ;; 女 | F) echo "是位小千金" ;; *) echo "有没有搞错" ;; esac } show_baby 男 show_baby M show_baby 女 show_baby F show_baby 0
[root@jfht ~]# show_baby() {
> case $1 in
> 男 | M)
> echo "是位小少爷"
> ;;
> 女 | F)
> echo "是位小千金"
> ;;
> *)
> echo "有没有搞错"
> ;;
> esac
> }
[root@jfht ~]#
[root@jfht ~]# show_baby 男
是位小少爷
[root@jfht ~]# show_baby M
是位小少爷
[root@jfht ~]# show_baby 女
是位小千金
[root@jfht ~]# show_baby F
是位小千金
[root@jfht ~]# show_baby 0
有没有搞错
[root@jfht ~]#
示例二 init脚本
#!/bin/bash # # /etc/rc.d/init.d/atd # # Starts the at daemon # # chkconfig: 345 95 5 # description: Runs commands scheduled by the at command at the time \ # specified when at was run, and runs batch commands when the load \ # average is low enough. # processname: atd # Source function library. . /etc/init.d/functions test -x /usr/sbin/atd || exit 0 RETVAL=0 # # See how we were called. # prog="atd" start() { # Check if atd is already running if [ ! -f /var/lock/subsys/atd ]; then echo -n $"Starting $prog: " daemon /usr/sbin/atd RETVAL=$? [ $RETVAL -eq 0 ] && touch /var/lock/subsys/atd echo fi return $RETVAL } stop() { echo -n $"Stopping $prog: " killproc /usr/sbin/atd RETVAL=$? [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/atd echo return $RETVAL } restart() { stop start } reload() { restart } status_at() { status /usr/sbin/atd } case "$1" in start) start ;; stop) stop ;; reload|restart) restart ;; condrestart) if [ -f /var/lock/subsys/atd ]; then restart fi ;; status) status_at ;; *) echo $"Usage: $0 {start|stop|restart|condrestart|status}" exit 1 esac exit $? exit $RETVAL
[root@smsgw root]# ls -l /etc/init.d/atd
-rwxr-xr-x 1 root root 1176 2004-10-06 /etc/init.d/atd
[root@smsgw root]# service atd
Usage: /etc/init.d/atd {start|stop|restart|condrestart|status}
[root@smsgw root]# service atd status
atd (pid 1899) is running...
[root@smsgw root]# service atd restart
Stopping atd: [ OK ]
Starting atd: [ OK ]
[root@smsgw root]#
问题思考
1. case命令中的模式可以有哪些?
2. 总结一下init脚本的写法。
相关资料
【1】Bash Guide for Beginners 7.3. Using case statements 7.3. 使用case语句
【2】鸟哥的私房菜 利用 case ..... esac 判斷
【3】Unix/Linux shell程序设计-<控制结构>-case语句 - 日志 - neverTheSame - 编程中国