Parece que no puedo resolver cuál es el problema con la siguiente if
declaración en relación con el elif
y then
. Tenga en cuenta printf
que todavía 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 obtengo es:
./timezone_string.sh: line 14: syntax error near unexpected token `then'
./timezone_string.sh: line 14: `then'
Y la afirmació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
bash
if-statement
StuStirling
fuente
fuente
then
declaración enif
yelif
pero no enelse
, y también en general.Respuestas:
Falta un espacio entre
elif
y[
:debiera ser
Como veo que esta pregunta está obteniendo muchas vistas, es importante indicar que la sintaxis a seguir es:
lo que significa que se necesitan espacios alrededor de los corchetes . De lo contrario, no funcionará. Esto se debe a que
[
sí mismo es un comando.La razón por la que no está viendo algo así como
elif[: command not found
(o similar) es que después de verif
ythen
, la cáscara está buscando, ya seaelif
,else
ofi
. Sin embargo, encuentra otrothen
(después del formato incorrectoelif[
). Solo después de haber analizado la declaración, se ejecutará (y se generará un mensaje de error comoelif[: command not found
).fuente
$ man [
if test "$seconds" -eq 0; then ... fi
es equivalente aif [ "$seconds" -eq 0 ];then ... fi ]
. @LeiYangman test
es lo que realmente estás buscandoTiene algunos problemas de sintaxis con su script. Aquí hay una versión fija:
fuente
bash
"si-entonces-otro" que encontré fácilmente en stackexchange ... gracias.#!/bin/sh
.#!/bin/sh
pero no tiene que hacerlo.sh
se puede usar en su lugar para una mayor compatibilidad (no todas las distribuciones * nix tienen bash como shell predeterminado (algunas tienen ksh o ash pero la mayoría de ellas dependen del estándarsh
para funcionar). Además, si bash es específico o funciones avanzadas que no se está utilizando en la secuencia de comandos a continuación, 'sh' se debe utilizar como el intérprete (una razón más por ello), ya que puede manejar el guión por sí mismo.[
es un comando (o un incorporado en algunos shells). Debe estar separado por espacios en blanco de la declaración anterior:fuente
type -a [
ver eso.Te recomendaría que eches un vistazo a los conceptos básicos de acondicionamiento en bash.
El símbolo "[" es un comando y debe tener un espacio en blanco antes. Si no asigna espacios en blanco después de su elif, el sistema interpreta elif [ como un comando particular que definitivamente no es lo que desearía en este momento.
Uso:
En resumen, edite su segmento de código para:
Estaría bien sin errores de compilación. Su segmento de código final debería verse así:
fuente
Falta espacio entre
elif
y[
descansar su programa es correcto. necesita corregirlo y verificarlo. Aquí está el programa fijo:enlace útil relacionado con esta declaración bash if else
fuente