2016-03-18 115 views
0

保持當我運行該腳本收到此錯誤,不知道哪裏出了問題,這是如果elif的有或條件語句bash腳本,如果elif的語句

xx線:((:WEST - 非常大=東 - BIG :在表達式語法錯誤(錯誤標記爲「WEST - 非常大」)

echo "$yn" 

if (($yn=EAST - BIG)) || (($yn=EAST - SMALL)) 
    then 
echo "---------------------------------------------------------------------------" >> /tmp/"$HOSTNAME".log 
elif (($yn=WEST - Very Big)) || (($yn=WEST - Very Small)) 
    then 
echo "---------------------------------------------------------------------------" >> /tmp/"$HOSTNAME".log 
else 
echo "---------------------------------------------------------------------------" >> /tmp/"$HOSTNAME".log 
    fi 
+0

是西方的和非常大的變量嗎?如果是,請嘗試:1.刪除空格,2. $ WEST - $ VERY_BIG?下一次發佈腳本的所有重要部分。 – Benutzer193

+0

你在哪裏設置'yn'變量? – Inian

+0

$ yn可能是東部 - 大,東 - 小,西 - 非常大,西 - 非常小 – Francis

回答

2

幾個問題裏面(())爭取平等的檢查是==(單=是分配)這是常見的許多語言。

你是不允許的espace在一個變量名裏面(假設它們是變量名)。變量名稱中允許使用的字符是ASCII字母數字或下劃線,並且第一個字符不能是數字。

使用所有大寫字母作爲自己的變量名也是一個壞主意。 shell自己設置和使用大量的大寫變量,並且可以跺腳對方的值。

這裏是你的代碼我的測試版本:

yn=42 
EAST=52 
BIG=100 
WEST=45 
Very_Big=3 
Very_Small=1 
HOSTNAME='fred' 

# Here I used a variable to avoid repeating myself 
# that makes it easier to change the filename later 
outfile="/tmp/$HOSTNAME.log" 
> "$outfile" # Zero the file 

echo "$yn" 

if (($yn == EAST - BIG)) || (($yn == EAST - SMALL)) 
then 
    echo "---------------------------------------------------------------------------" >> "$outfile" 
elif (($yn == WEST - Very_Big)) || (($yn == WEST - Very_Small)) 
then 
    echo "---------------------------------------------------------------------------" >> "$outfile" 
else 
    echo "---------------------------------------------------------------------------" >> "$outfile" 
fi 

代碼更容易當你使用一致縮進來閱讀。要跟蹤bash程序的運行方式,請使用-x,例如:

bash -x myscript 
+0

change = to ==並刪除空間後,我不再收到錯誤,但是如果$ yn值改變,但它總是匹配第一個條件,如果(($ yn == EAST - BIG))|| (($ YN == EAST - 小)) 我-x命令得到下面的輸出 +呼應WEST運行 - Very_Big WEST - Very_Big +((WEST - Very_Big == EAST - BIG)) – Francis

+0

@Francis:我不知道你在做什麼,所以我不能爲你調試邏輯問題。如果您對您正在嘗試解決的問題進行了一些描述,那麼我可能會提供幫助。 – cdarke

+0

$ yn是一個變量,它具有很多值EAST - BIG,EAST - SMALL,WEST - 非常大,WEST - 非常小等等,如果測試變量等於EAST - BIG或等於EAST - SMALL運行此elif變量相等WEST - 非常大或WEST - 非常小運行此,其餘運行最後其他條件。現在的問題是無論什麼$ yn值只能匹配第一個測試EAST - BIG或者等於EAST - SMALL – Francis