我使用过的Linux命令之case - Bash的多分支判断语句
我使用过的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 Mshow_baby 女show_baby Fshow_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/functionstest -x /usr/sbin/atd || exit 0RETVAL=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" instart) 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 1esacexit $?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 - 编程中国
?
返回 我使用过的Linux命令系列总目录
?