0

DLNAサーバーを起動するためのinitスクリプト(Debianを実行中)があります。サービスを開始しようとすると、次のエラーが発生します。どんな助けでも大歓迎です。注意: 私は linux/bash/debian の初心者です。

次のエラーが表示されます: 無効な構文: 予想外の 43 行目、予期された }

このコードで:

                    #! /bin/sh
            #
            # /etc/init.d/serviio
            #
            #
            ### BEGIN INIT INFO
            # Provides: serviio
            # Required-Start: $network
            # Required-Stop: $network
            # Default-Start: 3 5
            # Default-Stop: 0 1 2 6
            # Description: Start the serviio DLNA server in headless mode
            ### END INIT INFO

            SERVIIO_HOME="/opt/serviio"
            SERVIIO_DAEMON="serviio.sh"
            SERVIIO_BIN="$SERVIIO_HOME/bin/$SERVIIO_DAEMON"
            SERVIIO_USER="serviio"

            # Source function library.
            . /lib/lsb/init-functions

            RETVAL=0

            check() {
                    # Check that we're a privileged user
                    [ $(id -u) = 0 ] || exit 4

                    # Check if SERVIIO_HOME exists
                    test -d "$SERVIIO_HOME" || exit 5

                    # Check if SERVIIO_BIN is executable
                    test -x "$SERVIIO_BIN" || exit 5
            }

            start() {
                    check

                    echo -n "Starting Serviio DLNA server: "
                    /usr/bin/sudo -u $SERVIIO_USER -H $SERVIIO_BIN -headless &

                    RETVAL=$?
                    if [ $RETVAL -eq 0 ]; then
                        touch /var/lock/serviio
                        log_end_msg 0
                    else
                        log_end_msg 1
                    fi
                    echo
                    return $RETVAL
            }

            stop() {
                    check

                    echo -n "Shutting down Serviio DLNA daemon: "
                    killproc "$SERVIIO_BIN"
                    RETVAL=$?
                    [ $RETVAL -eq 0 ] && rm -f /var/lock/serviio
                    echo
                    return $RETVAL
            }

            restart() {
                    stop
                    start
            }


            case "$1" in
            start)
                    start
                    ;;
            stop)
                    stop
                    ;;
            force-reload)
                    restart
                    ;;
            restart)
                    restart
                    ;;
            condrestart)
                    if [ -f /var/lock/serviio ]; then
                        restart
                    fi
                    ;;
            status)
                    status serviio.sh
                    ;;
            *)
                    echo $"Usage: $0 {start|stop|status|restart|condrestart|force-reload}"
                    RETVAL=2
            esac

            exit $RETVAL
4

1 に答える 1

1

構文エラーなしでこのスクリプトを実行できますが、serviioがインストールされていません。とにかく、私の推測では、$ RETVALはどういうわけか空であり、引用符で囲む必要があります。

if [ "$RETVAL" -eq 0 ]; then

単項演算子を期待する'['について文句を言うと思いますが。

次に試すことは、問題のある場所を絞り込むことができるまで、セクションの行の前に「#」を付けて、一度にセクションをコメントアウトすることです。たとえば、「開始」セクション全体をコメントアウトするか、「チェック」機能をコメントアウトします(また、その呼び出しも必ずコメントアウトしてください)。それはそれを絞り込むのに役立つはずです。

于 2013-01-25T05:17:02.033 に答える