if, elif, else emite declaraciones en Bash

Resuelto StuStirling asked hace 11 años • 5 respuestas

Parece que no puedo entender cuál es el problema con la siguiente ifdeclaración con respecto a elify then. Tenga en cuenta que printfaún está en desarrollo. Simplemente no he podido probarlo todavía en la declaración, por lo que es muy probable que esté equivocado.

El error que recibo es:

./timezone_string.sh: line 14: syntax error near unexpected token `then'
./timezone_string.sh: line 14: `then'

Y la declaración es así.

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
StuStirling avatar Apr 16 '13 17:04 StuStirling
Aceptado

Falta un espacio entre elify [:

elif[ "$seconds" -gt 0 ]

debiera ser

elif [ "$seconds" -gt 0 ]

En conjunto, la sintaxis a seguir es:

if [ conditions ]; then
   # Things
elif [ other_conditions ]; then
   # Other things
else
   # In case none of the above occurs
fi

Como veo que esta pregunta está teniendo muchas visitas, es importante indicar que la sintaxis a seguir es:

if [ conditions ]
# ^ ^          ^

lo que significa que se necesitan espacios alrededor de los corchetes . De lo contrario, no funcionará. Esto se debe a que [en sí mismo es un comando.

La razón por la que no ves algo como elif[: command not found(o similar) es que después de ver ify then, el shell busca elif, elseo fi. Sin embargo, encuentra otro then(después del archivo mal formateado elif[). Solo después de haber analizado la declaración, se ejecutará (y elif[: command not foundse generará un mensaje de error similar).

fedorqui avatar Apr 16 '2013 10:04 fedorqui

Tienes algunos problemas de sintaxis con tu script. Aquí hay una versión arreglada:

#!/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
anubhava avatar Apr 16 '2013 10:04 anubhava