2013-07-26 46 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