linux - 初始化脚本问题 : unexpected then, 期待 }

标签 linux bash debian

我有一个初始化脚本(我运行的是 Debian)来启动一个 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

最佳答案

我可以运行这个脚本而不会出现语法错误,但是我没有安装 serviio。无论如何,我的猜测是 $RETVAL 不知何故是空的,它需要用引号引起来:

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

尽管我认为这会提示“[”期待一元运算符。

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

关于linux - 初始化脚本问题 : unexpected then, 期待 },我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14498306/

相关文章:

bash - 将多个文件移动到新目录保留路径

linux - ld : error in (. eh_frame);不会创建 .eh_frame_hdr 表

linux - Debian:dist-upgrade 删除了 gnome 和许多其他东西

redis - Redis 用于复制的临时文件的位置?

c - 关于在C中使用forkpty创建伪终端到ssh的问题

Linux脚本cp改变文件名

regex - "sed"命令删除与第一个单词上的精确字符串匹配的行

Linux tr 命令没有按预期工作

python - python 是否自动并行化 IO 和 CPU 或内存绑定(bind)部分?

bash - 为什么 shell 变量在给命令加上前缀时会变成环境变量?