если, элиф, другие операторы проблемы в Bash
Я не могу понять, что проблема со следующим выражением if
относится к elif
и then
. Имейте в виду, что printf
все еще находится в разработке. Я просто не смог его проверить в заявлении, поэтому более чем вероятно неверно.
Ошибка, которую я получаю:
./timezone_string.sh: line 14: syntax error near unexpected token `then'
./timezone_string.sh: line 14: `then'
И это утверждение выглядит так.
if [ "$seconds" -eq 0 ];then
$timezone_string="Z"
elif[ "$seconds" -gt 0 ]
then
$timezone_string=`printf "%02d:%02d" $seconds/3600 ($seconds/60)%60`
else
echo "Unknown parameter"
fi
Ответы
Ответ 1
Между elif
и [
отсутствует пробел:
elif[ "$seconds" -gt 0 ]
должно быть
elif [ "$seconds" -gt 0 ]
Поскольку я вижу, что этот вопрос получает много просмотров, важно указать, что следующий синтаксис:
if [ conditions ]
# ^ ^ ^
это означает, что необходимо указывать в скобках. Иначе это не сработает. Это потому, что [
сам по себе является командой.
Причина, по которой вы не видите что-то вроде elif[: command not found
(или аналогичного), заключается в том, что после просмотра if
и then
оболочка ищет elif
, else
или fi
. Однако он находит другой then
(после неправильно отформатированного elif[
). Только после анализа оператора он будет выполнен (и будет выведено сообщение об ошибке, подобное elif[: command not found
).
Ответ 2
У вас есть некоторые проблемы с синтаксисом в вашем скрипте. Вот исправленная версия:
#!/bin/bash
if [ "$seconds" -eq 0 ]; then
timezone_string="Z"
elif [ "$seconds" -gt 0 ]; then
timezone_string=$(printf "%02d:%02d" $((seconds/3600)) $(((seconds / 60) % 60)))
else
echo "Unknown parameter"
fi
Ответ 3
[
- это команда (или встроенная в некоторые оболочки). Он должен быть отделен пробелом от предыдущего оператора:
elif [
Ответ 4
Я бы порекомендовал вам взглянуть на основы кондиционирования в Bash.
Символ "[" является командой и должен иметь пробел перед ней. Если вы не ставите пробел после своего elif, система интерпретирует elif [ как особую команду, которая определенно не является тем, что вы хотели бы в данный момент.
Использование:
elif(A COMPULSORY WHITESPACE WITHOUT PARENTHESIS)[(A WHITE SPACE WITHOUT PARENTHESIS)conditions(A WHITESPACE WITHOUT PARENTHESIS)]
Короче говоря, отредактируйте свой сегмент кода, чтобы:
elif [ "$seconds" -gt 0 ]
Вы бы хорошо без ошибок компиляции. Ваш окончательный сегмент кода должен выглядеть следующим образом:
#!/bin/sh
if [ "$seconds" -eq 0 ];then
$timezone_string="Z"
elif [ "$seconds" -gt 0 ]
then
$timezone_string='printf "%02d:%02d" $seconds/3600 ($seconds/60)%60'
else
echo "Unknown parameter"
fi