[SOLUCIONADO] Evaluar 2 strings en un IF en Bash

Iniciado por Slenderhack, Noviembre 16, 2021, 10:24:17 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Noviembre 16, 2021, 10:24:17 PM Ultima modificación: Noviembre 17, 2021, 11:16:06 PM por DtxdF
que tal chicos
estoy haciendp un pequeño script en bash pero por alguna razon no funciona
tengo esto:

Código: bash
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  ~


Código: php

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:

Código: php

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:

Código: bash
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:

Código: bash
sh -x test.sh


Y se imprime lo siguiente:

Código: bash
$ 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.

Código: bash
test '==chmod'; echo $? # 0
test ''; echo $? # 1


Además, debes tener cuidado con los espacios, porque entonces bash/sh concatenarán las cadenas:

Código: bash
echo Hola Mundo;
echo otro Hola;


if [ "$1" == "chmod" ];
then
        echo funcion;
else
        echo usa --help para ver las opciones disponbles;

fi


Código: bash
sh test.sh "chmod"


Salida:

Código: bash
Hola Mundo
otro Hola
funcion


Pero con una cadena diferente:

Código: bash
sh test.sh test


Código: bash
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
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF