Я не могу понять, в чем проблема со следующим 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
bash
if-statement
StuStirling
источник
источник
then
заявлении ,if
и ,elif
но не вelse
, а также в целом.Ответы:
Между
elif
и[
: отсутствует пробелдолжно быть
Поскольку я вижу, что этот вопрос получает много просмотров, важно указать, что следующий синтаксис:
Это означает, что в скобках нужно пространство . Иначе это не сработает. Это происходит потому , что
[
само по себе является команда.Причина , почему вы не видите что - то вроде
elif[: command not found
(или аналогичный) , является то , что после просмотраif
иthen
, оболочка ищет либоelif
,else
илиfi
. Однако он находит другоеthen
(после неверного форматированияelif[
). Только после анализа оператора он будет выполнен (и будет выведено сообщение об ошибке вродеelif[: command not found
).источник
$ man [
if test "$seconds" -eq 0; then ... fi
эквивалентноif [ "$seconds" -eq 0 ];then ... fi ]
. @LeiYangman test
является то , что вы на самом деле ищетУ вас есть некоторые проблемы с синтаксисом в вашем скрипте. Вот исправленная версия:
источник
bash
"если-то-еще", которую я легко нашел в stackexchange ... спасибо.#!/bin/sh
.#!/bin/sh
но не обязан.sh
ее можно использовать для более высокой совместимости (не все дистрибутивы * nix имеют bash в качестве оболочки по умолчанию (в некоторых есть ksh или ash, но большинство из них зависят от стандартаsh
для работы). Более того, если bash специфичен или в скрипте не используются расширенные функции, тогда в качестве интерпретатора следует использовать 'sh' (это еще одна причина), так как он может обрабатывать скрипт самостоятельно[
это команда (или встроенная в некоторые оболочки). Он должен быть отделен пробелом от предыдущего оператора:источник
type -a [
чтобы увидеть это.Я бы порекомендовал вам взглянуть на основы кондиционирования в Bash.
Символ «[» является командой и должен иметь пробел перед ней. Если после вашего elif вы не ставите пробелы, система интерпретирует elif [ как особую команду, которая определенно не соответствует вашим ожиданиям.
Применение:
Короче говоря, отредактируйте свой сегмент кода так:
Вы бы хорошо без ошибок компиляции. Ваш окончательный сегмент кода должен выглядеть следующим образом:
источник
Недостающее пространство между вашей программой
elif
и[
покоем является правильным. Вы должны исправить это, проверить это. Вот фиксированная программа:полезная ссылка, связанная с этим bash, если еще заявление
источник