2015-09-04 47 views
0

我正試圖在需要兩個條件的命令行上編寫一個if/then語句。我似乎無法得到正確的語法。我試過了:如何在命令行中聲明包含「或」的條件?

if [ "$var1" == "value1" || "$var2" == "value2"]; 
if [ "$var1" == "value1"] || ["$var2" == "value2"]; 
if [[ "$var1" == "value1" || "$var2" == "value2"]]; 

所有返回錯誤。我知道這是一個基本問題,但對於命令行腳本來說,我還是比較新的。歡迎任何幫助。

+1

'如果[[ 「$ VAR1」 ==「VALUE1 「|| 「$ var2」==「value2」]];然後:fi;'應該可以工作 – anubhava

+0

我仍然收到錯誤。 「那麼:fi」;必須在同一條線上或什麼東西?這是錯誤:「附近的語法錯誤;」,然後它指定了代碼行。 – jalyper

+0

從@chepner看到下面的答案 – anubhava

回答

1
if [ "$var1" == "value1" || "$var2" == "value2"]; 

[不支持||操作。

if [ "$var1" == "value1"] || ["$var2" == "value2"]; 

差不多。使用=而不是==[,因爲POSIX沒有定義==。儘管如此,一些shell可能會支持它。該錯誤不包括在關閉]之前的空格。

if [[ "$var1" == "value1" || "$var2" == "value2"]]; 

是的,但是與上面相同的錯誤。您在結束]]之前需要一個空格。正確的線是

if [ "$var1" = "value1" ] || [ "$var2" = "value2" ]; 
if [[ "$var1" == "value1" || "$var2" == "value2" ]]; 
+0

感謝你的解釋徹底! – jalyper

0

test命令([ ... ]語法)一個支持-o操作者來評估邏輯或病症:

if [ "$var1" = "value1" -o "$var2" = "value2" ] ; then 
    echo match 
else 
    echo fail 
fi