que tal chicos
estoy haciendp un pequeño script en bash pero por alguna razon no funciona
tengo esto:
echo Hola Mundo;
echo otro Hola;
if [ "$1"=="chmod" ];
then
echo funcion;
else
echo usa --help para ver las opciones disponbles;
fi
pero no importa que llame al script sin ningun argumento imprime funcion
ya intente
if [ "$1"="chmod" ]
if [ $1=="chmod" ]
if [ $1="chmod" ]
if [ $1="chmod ]
if [ $1==chmod ]
con estas ultimas 2:
[ $1 == chmod ]
[ $1 = chmod ]
devuelve:
[: ==: se esperaba un operador unario
espero puedan Ayudarme
buena dia
Hola como estas? yo creo que tu problema esta en el espacio que dejas o no cuando tipeas. Te dejare tu codigo con los espacios que creo deberia llevar representado con ~
if ~[~ "$1"~==~"chmod"~];
then
echo funcion;
else
echo usa --help para ver las opciones disponbles;
fi
este caracter (~) representaria un espacio en blanco solo borralo reemplazandolo por un espacio vacio y tu condicion funcionara.
Quedaria asi:
if [ "$1" == "chmod" ];
then
echo funcion;
else
echo usa --help para ver las opciones disponbles;
fi
@Slenderhack
Recomiendo interpretar el script en tu mente por dos motivos: podría desarrollar cierta lógica sobre lo que hace, y también porque puede ser bueno para agilizar la depuración. También puedes usar el parámetro -x de bash/sh para que te muestre lo que se va ejecutando paso-a-paso, lo cual te ayudaría mucho más. Vamos a realizar la prueba de concepto:
echo Hola Mundo;
echo otro Hola;
if [ "$1"=="chmod" ];
then
echo funcion;
else
echo usa --help para ver las opciones disponbles;
fi
Ejecutamos el script con la opción -x:
sh -x test.sh
Y se imprime lo siguiente:
$ sh -x test.sh
+ echo Hola Mundo
Hola Mundo
+ echo otro Hola
otro Hola
+ [ '==chmod' ]
+ echo funcion
funcion
Si te fijas en + [ '==chmod' ], es raro, pero te da una idea de por qué siempre ejecuta echo funcion. El comando [ que es igual al comando test. El comando [ evaluará implícitamente con el parámetro -n. Entonces siempre la salida será 0.
test '==chmod'; echo $? # 0
test ''; echo $? # 1
Además, debes tener cuidado con los espacios, porque entonces bash/sh concatenarán las cadenas:
echo Hola Mundo;
echo otro Hola;
if [ "$1" == "chmod" ];
then
echo funcion;
else
echo usa --help para ver las opciones disponbles;
fi
sh test.sh "chmod"
Salida:
Hola Mundo
otro Hola
funcion
Pero con una cadena diferente:
sh test.sh test
Hola Mundo
otro Hola
usa --help para ver las opciones disponbles
Como recomendación, cuando le informes al usuario que ha cometido un error, podrías usar el comando integrado, exit.
~ DtxdF