2013-07-26 78 views
0

我寫了下面的代碼:Unix的 - 如果其他EOF錯誤

if [ $opt -ge $max -o $opt -le 0 ] 
then 
    echo "Bad"; 
else 
    echo "Good"; 
    if [ $opt = "\" -o $opt = "/" ] 
    then 
     echo "Good"; 
    else 
     echo "Invlaid"; //Line number 21 
    fi 
fi //Line number 23 no Line number 24. 

這顯示了一個錯誤:

./file.sh: line 21: unexpected EOF while looking for matching `"' 
./file.sh: line 24: syntax error: unexpected end of file 

如果我把這個代碼:

if [ $opt -ge $max -o $opt -le 0 ] 
then 
    echo "Bad"; 
else 
    echo "Good"; 
fi //Line number 23 no Line number 24. 

再就是是沒有錯誤。我無法弄清楚問題所在。

+1

請參閱語法突出顯示 - 如果[$ opt =「\」-o $ opt =「/」]''''''''' –

+0

請注意,邏輯OR的'-o'已被取消;你應該使用'[「$ opt」-ge「$ max」] || [「$ opt」-le 0]'而不是 - 引用你的擴展! – chepner

回答

1

反斜槓\雙引號進行轉義,否則您可以使用單引號這樣的:

if [ $opt = '\' -o $opt = '/' ]; then 
    echo "Good" 
fi 

單引號對字符串包裝的字符串進行處理,這是shell中的單引號無法轉義的確切原因。

3

在你寫「\」的地方你開始一個字符串,其第一個字符是雙引號。要在字符串中的反斜槓必須與其他它前面:

"\\" 
需要
0
opt="\\" 

echo $opt 
\ 

if [ $opt = "/" -o $opt = "\\" ]; then echo "Hi"; else echo "bye"; fi 
Hi