Je n'arrive pas à comprendre quel est le problème avec la if
déclaration suivante en ce qui concerne laelif
et then
. Gardez à l'esprit que le projet printf
est toujours en cours de développement, mais je n'ai pas encore pu le tester dans la déclaration, il est donc très probablement faux.
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
bash
if-statement
StuStirling
la source
la source
then
déclaration dansif
etelif
mais pas danselse
, et aussi en général.Réponses:
Il manque un espace entre
elif
et[
:devrait être
Comme je vois que cette question reçoit beaucoup de vues, il est important d'indiquer que la syntaxe à suivre est:
ce qui signifie que des espaces sont nécessaires autour des crochets . Sinon, cela ne fonctionnera pas. C'est parce 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 que , après avoir vuif
etthen
, la coquille est soit à la rechercheelif
,else
oufi
. Cependant, il en trouve un autrethen
(après le formatage incorrectelif[
). Ce n'est qu'après avoir analysé l'instruction qu'elle sera exécutée (et un message d'erreur comme celui-elif[: command not found
ci sera émis).la source
$ man [
if test "$seconds" -eq 0; then ... fi
est équivalent àif [ "$seconds" -eq 0 ];then ... fi ]
. @LeiYangman test
est ce que vous cherchez réellementVous avez des problèmes de syntaxe avec votre script. Voici une version fixe:
la source
bash
"si-alors-autre" que j'ai facilement trouvée sur stackexchange ... merci.#!/bin/sh
.#!/bin/sh
mais n'a pas à le faire.sh
peut être utilisé à la place pour une meilleure compatibilité (toutes les distributions * nix n'ont pas bash comme shell par défaut (certains ont ksh ou ash mais la plupart dépendent du standardsh
pour fonctionner). ou les fonctionnalités avancées ne sont pas utilisées dans le script, alors 'sh' doit être utilisé comme interprète (une raison de plus pour cela) car il peut gérer le script lui-même.[
est une commande (ou intégrée dans certains shells). Il doit être séparé par des espaces de l'instruction précédente:la source
type -a [
pour voir cela.Je vous recommanderais de jeter un œil aux bases du conditionnement en bash.
Le symbole "[" est une commande et doit être précédé d'un espace. Si vous ne donnez pas d'espace après votre elif, le système interprète elif [ comme une commande particulière qui n'est certainement pas ce que vous voudriez en ce moment.
Usage:
En bref, modifiez votre segment de code pour:
Vous iriez bien sans erreurs de compilation. Votre segment de code final devrait ressembler à ceci:
la source
L'espace manquant entre
elif
et[
reste votre programme est correct. vous devez le corriger et le vérifier. voici le programme fixe:lien utile lié à cette instruction bash if else
la source