init脚本问题:意外的,期待的}

时间:2013-01-24 09:51:02

标签: linux bash debian

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

1 个答案:

答案 0 :(得分:1)

我可以运行此脚本而不会出现语法错误,但我没有安装serviio。无论如何,我的猜测是$ RETVAL在某种程度上是空的,并且它需要在引号中:

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

虽然我认为会抱怨'['期待一元操作员。

接下来要尝试的是通过在部分中的行前加上“#”来一次注释掉部分,直到你可以缩小问题所在的范围。例如,注释掉整个“开始”部分,或注释掉“检查”功能(并确保你也注释掉它的调用)。这应该有助于缩小范围。