例:某server服务的启动脚本
#!/bin/bash#Start script for Syncplay serverserver_start(){running=`screen -ls | grep syncplay-server`if [ "$running" == "" ]; thenscreen -dmS syncplay-serverscreen -S syncplay-server -X screen syncplay-server --password myPassword --port 4567 --salt XXXXXXXX --motd-file /opt/syncplay/motd.txtecho "Syncplay sever started"elseecho "Syncplay server already running"fi}server_stop(){running=`screen -ls | grep syncplay`if [ "$running" != "" ]; thenscreen -ls | grep syncplay-server | cut -d. -f1 | awk '{print $1}' | xargs killecho "Syncplay sever stopped"elseecho "Syncplay server not running"fi}# $1是一个特殊变量,在执行脚本时自动取值为第一个命令行参数case "$1" instart)server_start;;stop)server_stop;;restart|reload)server_stopserver_start;;status)echo "Syncplay servers found (if any):"screen -ls | grep syncplay-server;;*)echo "usage: $0 start|stop|restart|reload|status" >&2exit 1esacexit 0
$1是一个特殊变量,在执行脚本时自动取值为第一个命令行参数
case命令可类比C语言的switch/case语句,esac表示case语句块的结束。C语言的case只能匹配整型或字符型常量表达式,而Shell脚本的case可以匹配字符串和Wildcard,每个匹配分支可以有若干条命令,末尾必须以;;结束,执行时找到第一个匹配的分支并执行相应的命令,然后直接跳到esac之后,不需要像C语言一样用break跳出。
例2
