0

我有一个初始化脚本(我正在运行 Debian)来启动 serviio 一个 DLNA 服务器。当我去启动服务时,我收到以下错误。任何帮助,将不胜感激。请注意:我对 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 回答