找回密码
 注册
搜索

11. case多选结构

已有 189 次阅读2014-2-1 16:37 |个人分类:SHELL编程| case多选结构, shell编程

下面是从openSUSE中截取的一段控制SSH服务器的脚本(/etc/init.d/sshd, case结构用于判断是要启动、停止或重新启动服务器进程。在这个例子中,如果用户运行命令“./etc/init.d/sshd start”,那么Shell将通过startproc启动守护进程。 

case “$1” in

    start)
    echo –n “Starting SSHdaemon”

    ## Start daemon withstartprog(8). If this fails
    ## the echo returnvalue is set appropriate.

    Startproc –f –p$SSHD_PIDFILE $SSHD_BIN $SSHD_OPTS –o “PidFile=$SSHD_PIDFILE” 

#Remember status and beverbose
    rc_status -v   
    ;; 

    stop)
    echo –n “Shutting downSSH daemon”

    ## Stop daemon withkillproc(8) and if this fails
    ## set echo the echoreturn value 

    killproc –p$SSHD_PIDFILE –TERM $SSHD_BIN 

#Remember status and beverbose
    rc_status -v   
    ;; 

    restart)

    ## Stop the serviceand regardless of whether it was   
    ## running or not,start it again.  

    $0 stop
    $0 start 

#Remember status and beverbose
    rc_status -v   
    ;;

    *)
    echo “Usage: $0{start|stop|restart|}”
    exit 1
    ;;

esac 

值得注意的是最后使用的“*)”,星号(*)用于匹配所有的字符串。在上面的例子中,如果用户输入的参数不是startstop、或是restart中的任何一个,那么这个参数将匹配“*)”, 脚本执行下面这条命令,提示用户正确的使用方法。

    echo “Usage: $0{start|stop|restart|}” 

由于case语句是逐条检索匹配模式,因此“*)”所在的位置很重要。如果上面这条脚本将“*)”放在case结构的开头,那么无论输入什么,脚本只会所“Usage:$0 {start|stop|restart|}”这句话。 

命令“;;”只在case结构中出现,Shell一旦遇到这条命令就跳转到case结构的最后。与此类似的是,C语言提供了break语句在switch结构中实现相同的功能,Shell只是继承了这种书写习惯。区别在于,程序员可以在C程序的switch结构中省略break语句(用于实现一种几乎不被使用的流程结构),而在shellcase结构中省略“;;”,则是不允许的。


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-24 12:01 , Processed in 0.032860 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部