if, elif, else emite declaraciones en Bash
Parece que no puedo entender cuál es el problema con la siguiente if
declaración con respecto a elif
y then
. Tenga en cuenta que printf
aú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
Falta un espacio entre elif
y [
:
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 if
y then
, el shell busca elif
, else
o 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 found
se generará un mensaje de error similar).
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