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