例:某server服务的启动脚本

    1. #!/bin/bash
    2. #Start script for Syncplay server
    3. server_start()
    4. {
    5. running=`screen -ls | grep syncplay-server`
    6. if [ "$running" == "" ]; then
    7. screen -dmS syncplay-server
    8. screen -S syncplay-server -X screen syncplay-server --password myPassword --port 4567 --salt XXXXXXXX --motd-file /opt/syncplay/motd.txt
    9. echo "Syncplay sever started"
    10. else
    11. echo "Syncplay server already running"
    12. fi
    13. }
    14. server_stop()
    15. {
    16. running=`screen -ls | grep syncplay`
    17. if [ "$running" != "" ]; then
    18. screen -ls | grep syncplay-server | cut -d. -f1 | awk '{print $1}' | xargs kill
    19. echo "Syncplay sever stopped"
    20. else
    21. echo "Syncplay server not running"
    22. fi
    23. }
    24. # $1是一个特殊变量,在执行脚本时自动取值为第一个命令行参数
    25. case "$1" in
    26. start)
    27. server_start
    28. ;;
    29. stop)
    30. server_stop
    31. ;;
    32. restart|reload)
    33. server_stop
    34. server_start
    35. ;;
    36. status)
    37. echo "Syncplay servers found (if any):"
    38. screen -ls | grep syncplay-server
    39. ;;
    40. *)
    41. echo "usage: $0 start|stop|restart|reload|status" >&2
    42. exit 1
    43. esac
    44. exit 0

    $1是一个特殊变量,在执行脚本时自动取值为第一个命令行参数

    case命令可类比C语言的switch/case语句,esac表示case语句块的结束。C语言的case只能匹配整型或字符型常量表达式,而Shell脚本的case可以匹配字符串和Wildcard,每个匹配分支可以有若干条命令,末尾必须以;;结束,执行时找到第一个匹配的分支并执行相应的命令,然后直接跳到esac之后,不需要像C语言一样用break跳出。

    例2
    image.png