2015-06-22 72 views
0

試圖調試我的bash腳本。我的語法有什麼問題?我試圖評估用戶輸入的參數,並基於我的IF-THEN報表中的一個運行。但是,我收到了一條未找到的命令。bash腳本 - 無法正確評估變量字符串

這裏是我的腳本迄今:

if [[ $# != 4 ]]; then 
    echo "Usage: ./test.sh <ABC|XYZ> <owner> <db> <TARGETHOST>" 2>&1 
    exit 1 
fi 

case $1 in 
    ABC|XYZ) 
     filename="get-$1.sql" 
     ;; 
    *)echo "Must enter ABC or XYZ" 
     exit 1 
     ;; 
esac 

export OWNER=$2 
export DB=$3 
export HOST_NM=$4 
export PORT=5432 
export LOG="test-$1.log" 
PSQL=`which psql` 


if [[$1=="ABC"]]; then 
     RUNCLI=$("$PSQL" -h $HOST_NM -p $PORT -U $OWNER $DB -F $'\t' --no-align -f get-$1.sql | tee >> $LOG) 
     exit 1 
    else 
     echo "Error running report ..." 
fi 

if [[$1=="XYZ"]]; then 
     RUNCLI2=$("$PSQL" -h $HOST_NM -p $PORT -U $OWNER $DB -a -f get-$1.sql | tee >> $LOG) 
     exit 1 
    else 
     echo "Error running report ..." 
fi 

錯誤:

./test.sh: line 41: [[XYZ==ABC]]: command not found 
Error running report ... 
./test.sh: line 51: [[XYZ==XYZ]]: command not found 
Error running report ... 
+3

請看看:http://www.shellcheck.net/ – Cyrus

+0

@Cyrus - 這是最酷的工具!謝謝 – noober

+2

''[''之前']]'應該有一個空格,可能在操作員的周圍。 – ShellFish

回答

1

這並不明顯。雖然這個問題在註釋部分我想給一個答案,並分享一些知識已回答(至少它不適合我)。

在bash的if只檢查下面的命令,這意味着,而不是if [ condition ]...if [[ condition ]]...你也可以寫if ./configure && make...的返回碼。 [[[也分別是命令或shell內置函數,而不是if語法的一部分。 which [例如返回/bin/[。 在這一點上,顯然你需要括號和條件之間的空格,因爲它只是傳遞給一個命令的一組參數。

如果你有這個想法,你將永遠不會忘記空間。