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