我写了一些脚本,并有意外的文件结尾
echo off
if [$JAVA_HOME = ""]; then goto no_java_home fi
if [$SRV_HOME = ""]; then goto no_srv_home fi
echo Uses JAVA_HOME=$JAVA_HOME
echo Uses SRV_HOME=$SRV_HOME
export ACP=""
export ACP=$ACP;$JAVA_HOME/lib/tools.jar
export ACP=$ACP;$SRV_HOME/ant/lib/ant.jar
export ACP=$ACP;$SRV_HOME/ant/lib/ant-launcher.jar
export ACP=$ACP;$SRV_HOME/ant/lib/ant-nodeps.jar
export ACP=$ACP;$SRV_HOME/ant/lib/optional.jar
export ACP=$ACP;$SRV_HOME/ant/lib/ant-contrib-1.0b3.jar
$JAVA_HOME/bin/java -Xmx512m -classpath $ACP org.apache.tools.ant.Main -buildfile $SRV_HOME/ant/ant_script.xml %*
goto ends
no_srv_home:
clear
echo "You should set the TMX_HOME environment variable. For example: TMX_HOME=d:\MYSERVER"
goto ends
no_java_home:
clear
echo "You should set the JAVA_HOME environment variable"
goto ends
ends: echo "OK"
我的问题在哪里?
答案 0 :(得分:4)
您的问题是您的脚本看起来像bash和cmd语法的随意混合。这是一个bash脚本。
if [ "$JAVA_HOME" = "" ]; then
echo 1>&2 "$0: You need to set the JAVA_HOME variable, e.g.: export JAVA_HOME='c:/java'"
exit 2
fi
if [ "$SRV_HOME" = "" ]; then
echo 1>&2 "$0: You need to set the SRV_HOME variable, e.g.: export SRV_HOME='d:/myserver'"
exit 2
fi
echo "$0: Uses JAVA_HOME=$JAVA_HOME"
echo "$0: Uses SRV_HOME=$SRV_HOME"
ACP="$JAVA_HOME/lib/tools.jar"
for x in ant ant-launcher ant-nodeps optional ant-contrib-1.0b3; do
ACP="$ACP;$SRV_HOME/ant/lib/$x.jar"
done
"$JAVA_HOME/bin/java" -Xmx512m -classpath "$ACP" \
org.apache.tools.ant.Main \
-buildfile "$SRV_HOME/ant/ant_script.xml" \
"$@"
以下列出了我已纠正的事项:
[ … ]
在括号的每一侧都需要空格(除了标点;
之外)。$foo
)都应该是双引号(否则如果变量的值包含某些特殊字符(如空格),shell将会执行奇怪的操作。)echo 1>&2 "this is an error message"
。 (这也适用于cmd脚本。)ACP
是内部脚本变量,因此无需将其导出到环境中。;
是一个特殊字符,因此当您想在字符串中使用它时必须引用它。%*
是bash的"$@"
。$0
。答案 1 :(得分:2)
转到,真的吗?
更改if语句以在fi
之前添加分号if [$JAVA_HOME = ""]; then goto no_java_home ; fi
例如。
你的shell无法区分no_java_home命令和fi命令,因为它们出现在同一行,没有分号分隔符或任何其他结束语句的内容。你的线路上有同样的问题,有清晰的回声;就sh
而言,回声在这里被用作清除的参数,而不是一个单独的命令。
但是请不要使用goto重写这个!
像这样:
if [$JAVA_HOME = ""] ; then
clear
echo "You should set the JAVA_HOME environment variable"
elif [$SRV_HOME = ""] ; then
clear
echo "You should set the TMX_HOME environment variable. For example: TMX_HOME=d:\MYSERVER"
else
echo Uses JAVA_HOME=$JAVA_HOME
echo Uses SRV_HOME=$SRV_HOME
export ACP=""
export ACP=$ACP;$JAVA_HOME/lib/tools.jar
export ACP=$ACP;$SRV_HOME/ant/lib/ant.jar
export ACP=$ACP;$SRV_HOME/ant/lib/ant-launcher.jar
export ACP=$ACP;$SRV_HOME/ant/lib/ant-nodeps.jar
export ACP=$ACP;$SRV_HOME/ant/lib/optional.jar
export ACP=$ACP;$SRV_HOME/ant/lib/ant-contrib-1.0b3.jar
$JAVA_HOME/bin/java -Xmx512m -classpath $ACP org.apache.tools.ant.Main -buildfile
$SRV_HOME/ant/ant_script.xml %*
fi
echo "OK"
答案 2 :(得分:0)
如果以不同方式重写以下行,则意外结束文件错误。
原帖:
if [$JAVA_HOME = ""]; then goto no_java_home fi
if [$SRV_HOME = ""]; then goto no_srv_home fi
更新:
if [$JAVA_HOME = ""]; then
goto no_java_home
fi
if [$SRV_HOME = ""]; then
goto no_srv_home
fi