0

我有一个脚本:

#!/bin/bash
if [ "$JAR_FILE" = "NewTekkit.jar" ]; then
cd "$SERVER_DIR"
unzip -nu "$JAR_DIR/NewTekkit.zip"
else
if [ "$JAR_FILE" = "TekkitLite.jar" ]; then
cd "$SERVER_DIR"
unzip -nu "$JAR_DIR/TekkitLite.zip"
fi
exit 0

我得到了错误:2013-05-31 18:00:44,817 DEBUG server 120: Server Prepare: Error: /home/minecraft/multicraft/scripts/startup.sh: line 11: syntax error: unexpected end of file

请帮忙。

谢谢。

4

2 回答 2

4

你错过了一个fi

#!/bin/bash
if [ "$JAR_FILE" = "NewTekkit.jar" ]; then
  cd "$SERVER_DIR"
  unzip -nu "$JAR_DIR/NewTekkit.zip"
else
  if [ "$JAR_FILE" = "TekkitLite.jar" ]; then
    cd "$SERVER_DIR"
    unzip -nu "$JAR_DIR/TekkitLite.zip"
  fi
fi
exit 0

在 shell 中正确缩进代码有助于避免此类问题。

于 2013-05-31T17:24:13.907 回答
3

您的if/else/fi语法不完整(缺少fi)。

要在运行脚本之前检测此类错误,您应该始终使用

 bash -n scriptname

这将执行语法检查来检测此类问题,而无需实际运行脚本。您也可以使用以下组合来解决此elif问题else if

#!/bin/bash
cd "$SERVER_DIR"
if [ "$JAR_FILE" = "NewTekkit.jar" ]; then
  unzip -nu "$JAR_DIR/NewTekkit.zip"
elif [ "$JAR_FILE" = "TekkitLite.jar" ]; then
  unzip -nu "$JAR_DIR/TekkitLite.zip"
fi
exit 0

使用 shells 字符串操作语法甚至可以将整个脚本折叠成

cd "$SERVER_DIR"
unzip -nu "$JAR_DIR/${JAR_FILE%jar}zip"

贝壳不是很酷的野兽吗?

于 2013-05-31T17:43:44.763 回答