Назад | Перейти на главную страницу

Синтаксическая ошибка возле неожиданного токена 'fi'

Я создал очень простой сценарий (см. Ниже), но не могу заставить его работать должным образом. Я всегда получаю сообщения, в которых говорится

line 5: syntax error near unexpected token 'fi'
line 5: 'fi'

когда я пытаюсь выполнить этот скрипт.

#!/bin/sh
rm /opt/file_name
if $? -ne 0 then
    echo 'error'
fi
exit

Я использую это в Red Hat Linux, если это имеет значение.

Если кто-нибудь может помочь определить, что не так с оператором if, я был бы очень признателен.

Билл

Вам не хватает точки с запятой (и я не уверен, что она работает без квадратных скобок).

Альтернативы:

если [[$? -ne 0]]; затем

или

если ! test $? = 0; затем

или

если [$? -ne 0]; затем

или

test $? = 0 || эхо 'ошибка';

или даже лучше:

rm / bla / bla || эхо 'ошибка';

(последний - это весь ваш сценарий)

Вот очень удобная альтернатива. Команда "test" сама по себе является командой типа "rm". Он отправляет код возврата в «если»: 0 в случае успеха и 1 или больше в случае неудачи. Так что вместо проверки кода возврата в специальном $? переменная, вы можете просто сделать это:

if rm foo; then
    echo "It worked"
else
    echo "It failed"
fi

Вы также можете отменить if, сделав следующее:

if ! rm foo; then
     echo "It failed"
fi

Вам нужна точка с запятой в конце этого оператора if, а также скобки:

#!/bin/sh

rm /opt/file_name

if [ $? -ne 0 ]; then

     echo 'error'

fi

exit

Вам нужна точка с запятой или разрыв строки между if и then, т.е.

if $? -ne 0; then
...
fi

или

if $? -ne 0
then
...
fi
#!/bin/sh

rm somefile

if [ $? -ne 0 ]
then
     echo 'error'
fi

exit