Não consigo entender qual é o problema da if
declaração a seguir em relação ao elif
e then
. Lembre- printf
se de que ainda está em desenvolvimento. Eu ainda não pude testá-lo na declaração, portanto é mais do que provável que esteja errado.
O erro que estou recebendo é:
./timezone_string.sh: line 14: syntax error near unexpected token `then'
./timezone_string.sh: line 14: `then'
E a afirmação é assim.
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
fonte
fonte
then
declaração emif
eelif
não emelse
, e também em geral.Respostas:
Falta um espaço entre
elif
e[
:deveria estar
Como vejo que esta pergunta está obtendo muitas visualizações, é importante indicar que a sintaxe a seguir é:
o que significa que são necessários espaços entre os colchetes . Caso contrário, não funcionará. Isso ocorre porque em
[
si é um comando.A razão pela qual você não está vendo algo como
elif[: command not found
(ou similar) é que depois de verif
ethen
, a casca está à procura de um ou outroelif
,else
oufi
. No entanto, encontra outrothen
(após o formato incorretoelif[
). Somente depois de analisar a instrução, ela seria executada (e uma mensagem de erro comoelif[: command not found
seria exibida).fonte
$ man [
if test "$seconds" -eq 0; then ... fi
é equivalente aif [ "$seconds" -eq 0 ];then ... fi ]
. @LeiYangman test
é o que você realmente procurandoVocê tem alguns problemas de sintaxe com seu script. Aqui está uma versão fixa:
fonte
bash
"se-então-mais" que encontrei facilmente na stackexchange ... obrigado.#!/bin/sh
.#!/bin/sh
mas não precisa.sh
pode ser usado para uma compatibilidade mais alta (nem todas as distros * nix têm o bash como shell padrão (alguns têm ksh ou ash, mas a maioria deles depende do padrãosh
para funcionar). ou recursos avançados não está sendo usado no script, em seguida, 'sh' deve ser usado como o intérprete (mais uma razão para isso), pois ele pode lidar com o script por si só.[
é um comando (ou embutido em algumas conchas). Ele deve ser separado por espaço em branco da instrução anterior:fonte
type -a [
para ver isso.Eu recomendaria que você desse uma olhada nos conceitos básicos de condicionamento no bash.
O símbolo "[" é um comando e deve ter um espaço em branco antes dele. Se você não fornecer um espaço em branco após o elif, o sistema interpretará o elif [ como um comando específico que definitivamente não é o que você deseja no momento.
Uso:
Em resumo, edite seu segmento de código para:
Você ficaria bem sem erros de compilação. Seu segmento de código final deve ficar assim:
fonte
Faltar espaço entre
elif
e[
descansar seu programa está correto. você precisa corrigi-lo e dar uma olhada. aqui é programa fixo:link útil relacionado a esta declaração bash if else
fonte