2015-05-23 33 views
0

我想移除某些使用基於用戶輸入的bash/sh的,這裏是我的代碼:猛砸如果......那麼......語法錯誤

echo "remove ? [Y/n]" 
read REMOVE 
if [ $REMOVE != "n" ] || [ $REMOVE !="N" ];then 
    # ... do something ... 
    echo "done" 
fi 

我得到的錯誤是一樣的東西:

./run.sh:8號線:線路8:近意想不到的符號«那麼»

./run.sh語法錯誤`如果[$ REMOVE = 「N」!] || [$ REMOVE!=「N」];然後'

我試着多次添加/刪除空格,但我仍然不明白會發生什麼。我也不完全瞭解[[ statement ]][statement]((statement))之間的所有差異。 如果有人能幫助...

+0

相關:http://stackoverflow.com/questions/19691082/why-am-i-getting-a-unary-operator-expected-error – fvu

+0

@fvu'$ SHELL'是zsh,但腳本實際上運行在bash – n00dl3

回答

1

請試試這個:

echo "remove ? [Y/n]" 
read REMOVE 
if [ $REMOVE != "n" ] && [ $REMOVE != "N" ] 
then 
    # ... do something ... 
    echo "done" 
fi 
+0

'./run.sh:line 8:[:n:expected unary operator' (也許這不是英文輸出,我自己翻譯) – n00dl3

+0

至於你試圖達到的邏輯,我覺得你應該使用'&&'而不是'||' – shruti1810

+0

更好的是:'if [x「$ REMOVE」!= xn -ax「$ REMOVE」!= xN];那麼...'。 – lcd047

1

報價的 「$ REMOVE」 和周圍的插入空間 - 這樣, 「=!」

if [ "$REMOVE" != "n" ] || [ "$REMOVE" != "N" ];then 
    # ... do something ... 
    echo "done" 
fi 

的問題是,是REMOVE沒有設置或者將其設置爲空字符串(例如,如果你只按在「讀」的回報),您將得到$ REMOVE取代不了了之,你的表現會看起來像[ != "N" ]這將產生unary operator expected錯誤。

2

在你原來的問題,你需要在這裏

$REMOVE != "N" 

的空間在您的評論迴應shruti1810,這聽起來像你$REMOVE變量不包含你認爲它包含的內容。

嘗試增加

echo $REMOVE 

到腳本。

我通常使用此結構

if [ "x$REMOVE" != "xn" ] || [ "x$REMOVE" != "xN" ] 
then 
    # ... do something ... 
    echo "done" 
fi 

,以確保我的論點都是有效的。