Problema Script. [bash]

Iniciado por LDueñas, 23 Mayo 2011, 17:20 PM

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

LDueñas

Hola, soy nuevo en el foro. Me he registrado porque estoy intentando hacer un pequeño y simple script que consta de un menú con 3 apartados, y me está trayendo verdaderos quebraderos de cabeza. En el primero, marcando el usuario la opción 1 el equipo se debe reiniciar. Hasta ahí todo bien pero he de ponerle un mensaje de confirmación (si escribe si, se reinicia, sino vuelve al principio) que aunque se que es super sencillo no logro aplicarlo.
Con el segundo más de lo mismo, ya que se trata de reiniciar otro sistema.
Y el tercero se trata de una prueba de conectividad, pretendo hacer un submenú dentro de este apartado en el que el usuario pueda hacer ping a su propia máquina o bien a otro pc conectado a la red local, así como una opción para probar conectividad en todos los pc's de la red.
Esto es lo que he hecho:
#!bin/bash
echo "menú"
echo "1. Reiniciar pc"
echo "2. Reiniciar server"
echo "3.Prueba de conectividad"
echo "elige tu opcion"
read entrada1
case $entrada1 in
1)
aquí simplemente teníka escrito reboot, pero al necesitar incluir una orden de confirmación me pierdo totalmente.
;;
2)
igual que 1
3) echo "¿a donde"?
echo 1. "ping localhost"
echo 2. "ping server"
echo 3. "ping rangos"

Y aquí tmp se seguir..
Como veis soy muy novato en esto y mis conocimientos no van más allá de crear un simple menú. He probado para los casos 1 y 2 el utilizar if y while pero sin resultado. Ojalá podais echarme un pequeño cable. Gracias de antemano y espero haber puesto la duda en el lugar correcto del foro.
Un saludo.

LDueñas

#1
He resuelto varias cosas, ahora mismo el script estaría así.,
#!bin/bash
echo "1.reinicio pc"
echo "2. reinicio asterisk"
echo "3. prueba conectividad"
echo "elige tu opcion"
read opcion
case $opcion in
1)
while true; do
echo
read -p "estás seguro de reiniciar?" S o N" j
case $j in
s ) reboot;;
n ) exit;;
* ) echo "introduce S o N;;
esac
done
;;
2) while true; do
echo
read -p "estás seguro de reiniciar?" S o N" j
case $j in
s )reboot 192.168.x.x;;
n )exit;;
* )echo "introduce S o N";;
esac
done
;;
3) echo "¿A donde?
echo 1."ping localhost"
echo 2."ping asterisk"
echo 3. "comprobar red local"
read valor
case $valor in
1) ping localhost;;
2 ping 192.168.x.x;;
3)nmap -sP 192.168.2.1-254
esac
done
esac
El caso es que me da error en lineas 33 y 45 y por más que pruebo no doy con ello.

leogtz

Mal, mal, todo mal, vuelve a hacerlo de nuevo, borra todo y comienzalo.

Código (bash) [Seleccionar]
#!/bin/bash
# Menu de opciones con select
OPCIONES="Hola Salir Lala"
select opt in $OPCIONES; do
if [ "$opt" = "Salir" ]; then
echo done
exit
elif [ "$opt" = "Hola" ]; then
echo Hola Mundo
else
clear
echo opción errónea
fi
done
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

LDueñas

Me has ayudado mucho te lo agradezco. Solo una última cosa, ¿cómo haría para meter una confirmación si el usuario escribiera p ej. "salir"?

leogtz

¿Qué código estás usando? porque en el que dejé anteriormente ya lleva la implementación para salir.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

LDueñas

#5
Borré todo mi código y me he guiado del tuyo para la realización del menú. En lugar de su creación con echo he descubierto  que con select es más cómodo gracias a ti.

Como bien has dicho; has añadido una implementación para salir en el menú, pero mi idea era que, entrando en un menú (p. ej 1-reiniciar ordenador) el usuario al pulsar el 1 recibiera un mensaje de confirmación en el que se le preguntara si está seguro de la acción a realizar. En el caso de ser afirmativa su respuesta, se reiniciara el equipo y, si por el contrario decidiese que no era buena idea pulsando "no" volviera para atrás: de nuevo al menú.

Quizás todo esto ya está resuelto con tu código  y no me he percatado ya que estoy empezando en esto y la verdad que ando perdido. Por las pruebas quehe realizado, el menú si que se crea correctamente y me funciona, pero el tema de la confirmación (que ya tenía resuelto en mi anterior código con los comando while, read y case) no sé como implementarla en este.
Saludos y perdona las molestias.

leogtz

Código (bash) [Seleccionar]
#!/bin/bash

function menu()
{
clear;

select opcion in "Reiniciar" "Reiniciar 2"
do
# Chequeo del a opcion 1
if [ "$opcion" = "Reiniciar" ]
then

read -p "Está seguro de reiniciar? s/n : " confirmacion

if [ "$confirmacion" = "s" ]
then
echo -e "Reiniciando..."; # No necesario.
read; # No necesario
# Comando para reiniciar...
else
menu;
fi

fi

# Chequeo de la opcion 2
if [ "$opcion" = "Reiniciar 2" ]
then

read -p "Está seguro de reiniciar? s/n : " confirmacion

if [ "$confirmacion" = "s" ]
then
echo -e "Reiniciando..."; # No necesario
read; # No necesario, solo para pausar
# Comando para reiniciar...
else
menu;
fi

else
menu;
fi
done

}

menu;
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

LDueñas