2010-08-03 115 views
4

我正在使用当前正在服务器(RHEL4)上运行的bash脚本。我正在使用Ubuntu 10.04在笔记本电脑上开发,但我认为该平台不会导致问题。Bash语法错误:“[[:not found”

发生了什么: 我有一个框架脚本,调用另一个脚本,执行大部分工作。但是,它会调用getConfig.sh很多。 getConfig.sh基本上只是解析一些命令行参数(使用getopts)并调用Java程序来解析一些XML文件。无论如何,getConfig.sh正在抛出很多错误(但似乎仍然有效)。

下面是我得到

getconfig.sh: 89: [[: not found
getconfig.sh: 89: [[: not found
getconfig.sh: 94: [[: not found

消息我得到每次运行时的三个错误然而,脚本完成并且Java代码运行。

这里的relavent代码段

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是 “网络连接”

感谢您的答案。

+0

顺便说一句,'$ *'是越野车 - 它会改变两个参数'“的说法一”“的说法二”'分成四个agruments,'“的说法”“一”“说法” “两节”'。相反,使用'“$ @”'。 – 2018-02-14 19:20:50

回答

26

如果你的脚本是可执行文件,您正在执行它,如./getconfig.sh,脚本的第一行必须是:

#!/bin/bash 

如果没有那个shebang行,您的脚本将被sh解释,它不会理解if语句中的[[

否则,您应该运行您的脚本,如bash getconfig.sh,而不是sh getconfig.sh。即使您的默认shell是bash,运行sh的脚本也会使用一组缩减的bash功能,以便更符合POSIX标准。 [[是禁用的功能之一。

+1

谢谢丹尼斯。最初编写此代码的dufus在所有脚本上使用#!/ bin/sh。我错过了改变这一个。 – Justin 2010-08-03 23:17:33

+0

我看到了同样的问题,但我在脚本的顶部有'#!/ bin/bash'。 – prolink007 2012-10-19 16:40:25

+6

我想出了这个问题。如果您从另一个脚本调用脚本,请确保您使用'bash nameofscript.sh'而不是'sh nameofscript.sh'。 – prolink007 2012-10-19 16:49:28

0

如果你正在检查平等,不应该是?

if [[ "${debugMode}" = "true" ]]; then .... fi

+0

在Bash中,在这种情况下,'=='和'='是可以互换的。 – 2010-08-03 22:40:54

相关问题