Título: Bashscript sobre hacer ping
Publicado por: socorroz en 6 Diciembre 2023, 17:49 pm
Hola foreros la cosa es que he hecho un bash script con la intención de que registre la fecha antes y después de un ping y guarde toda la información en un archivo .csv Lo he hecho y pues no me funciona el menú, a veces imprime si la ip está en línea y a veces no, estaré usando mal los condicionales? Les dejo el script para que lo prueben y me retroalimenten con sus opiniones, se les agradece la ayuda! #/bin/bash clear echo "***************************************" echo "1.- Probar Si una ip está en línea o no" echo "2.- Abrir archivo CSV " echo "3.- Salir " echo "4.- About " echo "***************************************" read opcion case $opcion in 1) echo "escriba una dirección ip: " read ip_address >> networking.csv date >> networking.csv ping -c 1 $ip_address >> networking.csv if [ $? -eq 0 ]; then echo "La dirección IP $ip_address está en línea" echo "La dirección IP $ip_address está en línea" >> networking.csv echo "presione intro para continuar" read else echo "La dirección IP $ip_address no está en línea" echo "La dirección IP $ip_address no está en línea" >> networking.csv echo "presione intro para continuar" read fi date >> networking.csv sh networking.sh ;; 2) cat networking.csv echo "presione intro para continuar" read sh networking.sh ;; 3) ;; 4) echo "Script escrito por socorroz" echo "GNU LINUX" echo "2023" echo echo "Presione intro para continuar" read sh networking.sh ;; *) echo "Opción no válida" echo "Escoja una opción 1, 2, 3 o 4" sleep 1 sh networking.sh ;; esac
Título: Re: Bashscript sobre hacer ping
Publicado por: socorroz en 9 Diciembre 2023, 20:25 pm
Bueno ya logré solucionar el problema y les comparto el remedio para el script. La cosa es que después de cada opción del CASE IN yo utilicé una llamada al mismo bash o sea sh networking.sh para que no finalizara el programa y en cambio me devolviera al menú principal así por ejemplo: 2) cat networking.csv echo "presione intro para continuar" read sh networking.sh ;;
Resulta y pasa que cuando el "sh networking.sh" se ejecuta el programa principal no ha finalizado y esto provoca que el script entre en un bucle peligroso que consume recursos. La Solución...La solución es simple, quitar todos los "sh networking.sh" y ponerlo fuera de la estructura CASE IN. El nuevo código sería de la siguiente forma: #/bin/bash clear echo "***************************************" echo "1.- Probar Si una ip está en línea o no" echo "2.- Abrir archivo CSV " echo "3.- Salir " echo "4.- About " echo "***************************************" read opcion case $opcion in 1) echo "escriba una dirección ip: " read ip_address >> networking.csv date >> networking.csv ping -c 1 $ip_address >> networking.csv if [ $? -eq 0 ]; then echo "La dirección IP $ip_address está en línea" echo "La dirección IP $ip_address está en línea" >> networking.csv echo "presione intro para continuar" read else echo "La dirección IP $ip_address no está en línea" echo "La dirección IP $ip_address no está en línea" >> networking.csv echo "presione intro para continuar" read fi date >> networking.csv ;; 2) cat networking.csv echo "presione intro para continuar" read ;; 3) ;; 4) echo "Script escrito por socorroz" echo "GNU LINUX" echo "2023" echo echo "Presione intro para continuar" read ;; *) echo "Opción no válida" echo "Escoja una opción 1, 2, 3 o 4" sleep 1 ;; esac ./networking.sh
Título: Re: Bashscript sobre hacer ping
Publicado por: .xAk. en 9 Diciembre 2023, 21:17 pm
bn pero no llames a sí mismo, enciérralo en un bucle infinito y con la opción 3 finaliza el programa. #!/bin/bash while : do # "aqui tu codigo" # "Presiona [CTRL+C] para salir... o en la opcion 3 exit ();" sleep 1 done
SaludOS
Título: Re: Bashscript sobre hacer ping
Publicado por: socorroz en 10 Diciembre 2023, 02:36 am
Sí esa es otra opción. 🙂 También aprendí que utilizar el intérprete sh en un script bash no es lo mas aconsejable de modo que "sh script.sh" y "./script.sh" no es lo mismo.
Título: Re: Bashscript sobre hacer ping
Publicado por: .xAk. en 10 Diciembre 2023, 02:55 am
:-) pues te gustará `./script.sh`
sh es nativo, mejor sh. Confia en sh, disponible en quaquier *nix, y lo que haces con sh funciona en los demás.
y olvida eso de llamar al script. Creas procesos nuevos, uno detrás de otro igualmente. Cada proceso es una nueva sesión de shell.
|