Linux/Unix Shell Scripting - while do no funciona como esperaba

 
Vista:
sin imagen de perfil

while do no funciona como esperaba

Publicado por kk003 (21 intervenciones) el 25/06/2014 04:55:37
Hola, buenas.

Por favor, si alguien me puede ayudar a aclarar que estoy hacien mal en este script que pregunta s / n.
Si la respuesta es si sale y si es no regresa al principio y sigue preguntando.
El caso es que despues de responder "n" varias veces aun que le digas "s" no sale hasta pasados varios intentos, es como si llevara la cuenta vamos.
Entonces, funciona bien si se le dice si a la primera, pero al decirle no una vez hay que decirle si 2 veces.
En fin, aqui va. Gracias por adelantado con este tema que para mi es un misterio.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash
confwifi ()
{
while :
do
echo "** Configuracion wifi **"
echo "          *****         "
echo "Presione Control+C para salir "
echo -n "Introduzca el SSID de la red: "
read WPASSID
echo -n "Introduzca la contraseña WPA de la red: "
read WPAPSK
# Preguntamos si la config es correcta
echo -n "Confirme que la configuracion wifi introducida es correcta [ s / n ] "
read CONFIRMA
case $CONFIRMA in
 
# Si es correcto salimos del bucle y continuamos
s)
break;;
# Si no es correcto preguntamos de nuevo llamando al menu
n)
confwifi;;
# Ponemos la opcion no valida en rojo
*) echo -e " \e[1;31m$CONFIRMA\e[m\e[1;37\e[m es una opcion invalida.";;
esac
done
}
# Llamamos al menu
confwifi
echo "Salimos por aqui"
 
exit
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

while do no funciona como esperaba

Publicado por Tom (361 intervenciones) el 25/06/2014 11:03:53
¿¿ "es como si llevara la cuenta" ?? ¿ Y qué otra cosa esperabas, si vas encadenando llamadas ... ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

while do no funciona como esperaba

Publicado por kk003 (21 intervenciones) el 25/06/2014 13:48:37
Entiendo tu frustacion ante lo que parece obvio, pero sigo sin entender el procedimiento:
si comento el ultimo confwifi sale directamente sin preguntarme los datos que necesito, si lo descomento al menos me pregunta.
Entonces deduzco que en algun sitio mas falta/sobra algo.
Tampoco veo la forma de de evitar la llamada al menu al elegir n (lo que ahora llamo en la linea confwifi;;)
Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

while do no funciona como esperaba

Publicado por kk003 (21 intervenciones) el 25/06/2014 13:57:34
Na, creo que ya he visto que pasa. Habia que quitar los parentesis, llaves y ultima llamada al menu, si estoy en lo correcto para evitar la declaracion como funcion. Asi parece funcionar bien. Estaba obcecado con que tenia que ir como funcion pero no era necesario. Pego el correcto por si a alguien le es util.
Muchas gracias.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash
confwifi
#{
while :
do
echo "** Configuracion wifi **"
echo "          *****         "
echo "Presione Control+C para salir "
echo -n "Introduzca el SSID de la red: "
read WPASSID
echo -n "Introduzca la contraseña WPA de la red: "
read WPAPSK
# Preguntamos si la config es correcta
echo -n "Confirme que la configuracion wifi introducida es correcta [ s / n ] "
read CONFIRMA
case $CONFIRMA in
 
# Si es correcto salimos del bucle y continuamos
s)
break;;
# Si no es correcto preguntamos de nuevo llamando al menu
n)
confwifi;;
# Ponemos la opcion no valida en rojo
*) echo -e " \e[1;31m$CONFIRMA\e[m\e[1;37\e[m es una opcion invalida.";;
esac
done
#}
# Llamamos al menu
#confwifi
echo "Salimos por aqui"
 
exit
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

while do no funciona como esperaba

Publicado por Tom (361 intervenciones) el 25/06/2014 18:24:10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CONFIRMA=n
 
while [ "$CONFIRMA" != "s" ]
do
	echo "** Configuracion wifi **"
	echo " ***** "
	echo "Presione Control+C para salir "
	echo -n "Introduzca el SSID de la red: "
	read WPASSID
	echo -n "Introduzca la contraseña WPA de la red: "
	read WPAPSK
	# Preguntamos si la config es correcta
	read -p "Confirme que la configuracion wifi introducida es correcta [ s / n ] " CONFIRMA
	case "$CONFIRMA" in
	s|n) ;;
	*) echo -e " \e[1;31m$CONFIRMA\e[m\e[1;37\e[m es una opcion invalida.";;
	esac
done
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

while do no funciona como esperaba

Publicado por kk003 (21 intervenciones) el 26/06/2014 01:15:51
Hola,
el que sabe sabe.
Mi solucion funcionaba individualmente, pero una vez integrada en el script principal se comportaba igual de mal que lo pegado en mi primer post.

La tuya va perfecta.
Muchas gracias, me has sacado de otra :-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar