¿Cuál es el formato correcto para si entonces?
Probé muchas variedades.
¿Debería funcionar el formato en la línea de comando cuando no está en un programa?
$ if [1==2] then echo "y" fi;
> ;
-bash: syntax error near unexpected token `;'
Respuesta1
Nadie explicó el error todavía.
Entraste:
if [1==2] then echo "y" fi;
;
La primera línea tenía una sintaxis perfectamente válida en lo que respecta al shell. Es de la forma:
if cmd args
En este caso, cmd
se deriva de la expansión del [1==2]
globo. [1==2]
es un patrón global que se expande a la lista de archivos en el directorio actual cuyo nombre consta de un carácter 1
o =
un 2
carácter.
Por ejemplo, si hay un archivo llamado 2
en el directorio actual, se convierte en:
si 2 entonces repite fi;
Es decir, ejecute el comando 2
con 4 argumentos: 2
, y , como primer comando en la parte de una declaración.then
echo
fi
if
if/then/elif/else/fi
El error proviene de ese segundo ;
en la segunda línea. Habría recibido el mismo mensaje de error al ingresarlo ;
solo en la línea de comando. ;
debe usarse para separar comandos, no se puede usar solo de esa manera.
Respuesta2
La forma correcta de la if
construcción bash es
if something; then command; fi
La forma correcta de lo que parece estar intentando hacer es
if [ 2 -eq 2 ]; then echo "y"; fi;
Los espacios son importantes en bash.
Respuesta3
Prueba este:
if [ 1 == 2 ]; then echo "y" ; fi
Y mejor uso -eq
, a menos que quieras comparar 1 y 2 como cadenas.
Enlace útil:http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html
Respuesta4
El ==
operador no existe en Bash. Es -eq
al comparar números o =
al comparar cadenas.
if [ 1 -eq 2 ]; then echo 'y'; fi