2010-08-03 100 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

相關問題