Je n'arrive pas à comprendre le problème avec l'instruction suivante if
en ce qui concerne la Elif
et then
. Gardez à l'esprit que la printf
est toujours en cours de développement. Je n'ai pas encore réussi à la tester dans la déclaration.
L'erreur que je reçois est:
./timezone_string.sh: line 14: syntax error near unexpected token `then'
./timezone_string.sh: line 14: `then'
Et la déclaration est comme ça.
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
Il manque un espace entre Elif
et [
:
Elif[ "$seconds" -gt 0 ]
devrait être
Elif [ "$seconds" -gt 0 ]
Comme je vois cette question suscite beaucoup d'opinions, il est important d'indiquer que la syntaxe à suivre est la suivante:
if [ conditions ]
# ^ ^ ^
ce qui signifie que des espaces sont nécessaires autour des crochets. Sinon, ça ne marchera pas. Cela est dû au fait que [
lui-même est une commande.
La raison pour laquelle vous ne voyez pas quelque chose comme Elif[: command not found
(ou similaire) est qu'après avoir vu if
et then
, le shell recherche soit Elif
, else
ou fi
. Cependant, il trouve une autre then
(après le Elif[
mal formaté _). Seulement après après avoir analysé l'instruction, celle-ci sera exécutée (et un message d'erreur comme Elif[: command not found
sera émis).
Vous avez des problèmes de syntaxe avec votre script. Voici une version corrigée:
#!/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
[
est une commande. Il doit être séparé par une espace de la déclaration précédente:
Elif [
Je vous recommanderais de jeter un coup d’œil sur les bases du conditionnement à bash.
Le symbole "[" est une commande et doit précéder d’un espace. Si vous ne donnez pas d'espaces après votre Elif, le système interprète Elif [ comme une commande particulière qui n'est certainement pas ce que vous voudriez à ce moment-là.
tilisation:
Elif(A COMPULSORY WHITESPACE WITHOUT PARENTHESIS)[(A WHITE SPACE WITHOUT PARENTHESIS)conditions(A WHITESPACE WITHOUT PARENTHESIS)]
En bref, éditez votre segment de code pour:
Elif [ "$seconds" -gt 0 ]
ça irait sans erreur de compilation. Votre segment de code final devrait ressembler à ceci:
#!/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