Test Foro de elhacker.net SMF 2.1

Programación => Scripting => Mensaje iniciado por: Straufen en 6 Abril 2013, 05:25 AM

Título: Error en script en Linux
Publicado por: Straufen en 6 Abril 2013, 05:25 AM
Hola, tengo una pequeña duda, cuando ejecuto el siguiente script shell en Linux me da error y sinceramente no encuentro el porqué:


Código (bash) [Seleccionar]
#!/bin/bas
echo "SI para ejecutar, no para salir
read $variable
if ["$variable" == "SI"] then
echo "SI funciona"
else
echo "No, salir"
fi


Cuando lee el teclado e ingreso SI o no cualquier cosa, tira el siguiente error:
línea 6 error: error sintáctico cerca del elemento inesperado ○`else'
línea 6: else

No encuentro el erro sinceramente no veo nada malo.
Título: Re: Error en script en Linux
Publicado por: xustyx en 6 Abril 2013, 06:16 AM
Código (bash) [Seleccionar]

#!/bin/bash
echo "SI para ejecutar, no para salir"
read $variable
if ["$variable" == "SI"]; then
echo "SI funciona"
else
echo "No, salir"
fi


Te dejaste la h del bash.
Cerrar las comillas del segundo echo.
Y el punto y coma despues de la condicion de la variable.

No lo he probado pero creo que ahora te funcionara...

Echale un vistazo antes de postear por que son fallos gordos que con el nano creo que ya te sale en colorines y tal para evitar estos errores.
Título: Re: Error en script en Linux
Publicado por: -Myx- en 6 Abril 2013, 08:43 AM
Los espacios en los corchetes.

"[" es lo mismo que "test" para bash, es decir es como otro comando mas...por lo que necesita espacio despues de "["

Y necesita que su ultimo argumento sea "]", por lo que necesita espacio antes de este.

Código (bash) [Seleccionar]
if [ "$variable" == "SI" ]; then
Título: Re: Error en script en Linux
Publicado por: Straufen en 7 Abril 2013, 02:54 AM
Cita de: -Myx- en  6 Abril 2013, 08:43 AM
Los espacios en los corchetes.

"[" es lo mismo que "test" para bash, es decir es como otro comando mas...por lo que necesita espacio despues de "["

Y necesita que su ultimo argumento sea "]", por lo que necesita espacio antes de este.

Código (bash) [Seleccionar]
if [ "$variable" == "SI" ]; then

En efecto, eso era el error. Por cierto lo de bash si está bien en el script cuando lo pasé aquí al foro me lo comí

De cualquier forma, tengo ahora otro problema. Resulta que ejecuto el script y a la hora de leer la entrada de datos, escribo SI para probar que sirve el echo "Funciona el SI" pero ejecuta el echo del else, no importa si pongo SI, Si, si, sI igual me toma como falsa la comparación de $variable con SI y me tira el echo del else. ¿Cómo corrijo?
Título: Re: Error en script en Linux
Publicado por: -Myx- en 7 Abril 2013, 07:06 AM
Probablemente sea por el error que se nos paso a todos antes...

Asi no se usa read.
Código (bash) [Seleccionar]
read $variable

Con read no tenes que anteponer el "$" en la variable
Código (bash) [Seleccionar]
read variable

--

Como regla general (creo). Nunca se usa "$" en una variable cuando esta se esta creando/inicializando.
Título: Re: Error en script en Linux
Publicado por: dato000 en 7 Abril 2013, 14:43 PM
a mi me funciono de esta manera

Código (bash) [Seleccionar]

#!/bin/bash

echo "SI para ejecutar, no para salir"

read variable

if [ "$variable" = 'SI' ]; then

   echo "SI funciona"

else

    echo "No, salir"

fi


Pensaba que al ser un script "bash" no funcionaria si lo guardaba con extension ".sh" pero funciono sin problemas.