我正在使用当前正在服务器上运行的bash脚本(RHEL4)。我正在使用Ubuntu 10.04在笔记本电脑上进行开发,但我不认为该平台会导致问题。
以下是发生的事情: 我有一个骨架脚本调用另一个执行大部分工作的脚本。但是,它会调用getConfig.sh。 getConfig.sh基本上只是解析一些命令行参数(使用getopts)并调用Java程序来解析一些XML文件。无论如何,getConfig.sh抛出了很多错误(但似乎仍然有效)。
以下是我收到的消息
每次运行时我都会收到这三个错误;但是,脚本完成并运行Java代码。getconfig.sh:89:[[:not found
getconfig.sh:89:[[:未找到
getconfig.sh:94:[[:not found
这是相关代码部分
parseOptions $* if [[ "${debugMode}" == "true" ]] ; then DEBUG="-DDEBUG=true" echo "${JAVA_HOME}/bin/java ${DEBUG} -Djava.endorsed.dirs=${JAXP_HOME} -jar $(dirname $0)/GetXPath.jar ${XML_File} ${XPath_Query}" fi
第89行是“parseOptions $ *而第94行是”fi“
感谢您的回答。
答案 0 :(得分:29)
如果您的脚本是可执行的并且您正在执行它./getconfig.sh
,则脚本的第一行必须是:
#!/bin/bash
如果没有该shebang行,您的脚本将被sh
解释,该[[
无法理解if
语句中的bash getconfig.sh
。
否则,您应该像sh getconfig.sh
,不是 sh
那样运行您的脚本。即使您的默认shell是bash,使用[[
运行的脚本也会使用一组简化的bash功能,以便更符合POSIX标准。 {{1}}是已禁用的功能之一。
答案 1 :(得分:0)
如果你要检查是否相等,那不应该是吗?
if [[ "${debugMode}" = "true" ]]; then
....
fi
答案 2 :(得分:0)
使用:
bash scriptname.sh
代替:
sh scriptname.sh