我有一个初始化脚本(我运行的是 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/