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

См. Подсветку синтаксиса - вы случайно «избежали» второй цитаты в 'if [$ opt =" \ "-o $ opt ="/"]'. –

+0

Обратите внимание, что '-o' для логического ИЛИ устарел; вы должны использовать '[" $ opt "-ge" $ max "] || ["$ opt" -le 0] 'вместо этого - и цитируйте свои расширения! – chepner

ответ

1

Backslash \ в двойных кавычках нужно экранировать или иначе вы можете использовать одинарные кавычки так:

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

Одиночные кавычки обрабатывают завернутую строку буквально, это точная причина, по которой одиночная кавычка в оболочке не может быть экранирована.

3

Где вы пишете «\», вы начинаете строковый литерал, первым символом которого является двойная кавычка. Чтобы включить обратный слеш в строке вы должны поставить перед ним другой:

"\\" 
0
opt="\\" 

echo $opt 
\ 

if [ $opt = "/" -o $opt = "\\" ]; then echo "Hi"; else echo "bye"; fi 
Hi 
Смежные вопросы