2015-02-24 66 views
0

似乎應該從我正在閱讀的教程中找到冒號,但它告訴我將它們刪除?Debian的簡單初始化腳本的語法錯誤

/etc/init.d/uwsgi: 27: /etc/init.d/uwsgi: Syntax error: ";;" unexpected 

這裏是我的代碼:

#!/bin/sh 
### BEGIN INIT INFO 
# Provides:   uwsgi 
# Required-Start: $local_fs $remote_fs $network 
# Required-Stop:  $local_fs $remote_fs $network 
# Default-Start:  2 3 4 5 
# Default-Stop:  0 1 6 
# Description:  This script manages uWSGI. 
### END INIT INFO 

DAEMON=/var/www/app/venv/bin/uwsgi 
PIDFILE=/var/run/uwsgi.pid 
DAEMON_ARGS="--ini /var/www/app/conf/uwsgi/app.ini --pidfile /var/run/uwsgi.pid" 

. /lib/init/vars.sh 
. /lib/lsb/init-functions 

case "$1" in 
    start) 
    echo "Starting" 
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ 
    || return 1 
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ 
    $DAEMON_ARGS 1> /dev/null 2>&1 \ 
    || return 2 
    esac 
    ;; 
    stop) 
    echo "Stopping" 
    start-stop-daemon --stop --quiet --retry=QUIT/30/KILL/5 --pidfile $PIDFILE --name uwsgi 
    RETVAL="$?" 
    [ "$RETVAL" = 2 ] && return 2 
    start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON 
    [ "$?" = 2 ] && return 2 
    rm -f $PIDFILE 
    return "$RETVAL" 
    esac 
    ;; 
    status) 
    status_of_proc "$DAEMON" "uwsgi" && exit 0 || exit $? 
    ;; 
    reload) 
    echo "Reloading" 
    start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name uwsgi 
    return 0 
    ;; 
    *) 
    echo "Usage: /etc/init.d/uwsgi {start|stop|status|reload|force-reload}" >&2 
    exit 3 
    ;; 
esac 
+1

'esac'用於「case」的結尾,而不是每個條件的結尾。 – Petesh 2015-02-24 11:27:33

+0

就是這樣! Shellcheck說同樣的 – fedorqui 2015-02-24 11:27:53

+0

啊,所以我可以刪除除了最後一個,那是你說的嗎? – Jimmy 2015-02-24 11:28:03

回答

1

case語句的正確的語法是:

case expression in 
    pattern1) 
    statements 
    ;; 
    pattern2) 
    statements 
    ;; 
esac 

即只是在最後一個esac關閉。其他任何事情都會導致語法錯誤。

您可以將腳本提供到ShellCheck,該腳本執行聯機腳本檢查並指示語法錯誤的位置(您可以在此輸入中突出顯示該位置)。