Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: socorroz en 6 Diciembre 2023, 17:49 pm



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!

Código
  1. #/bin/bash
  2. clear
  3.  
  4. echo "***************************************"
  5. echo "1.- Probar Si una ip está en línea o no"
  6. echo "2.- Abrir archivo   CSV                "
  7. echo "3.- Salir                              "
  8. echo "4.- About                              "
  9. echo "***************************************"
  10. read opcion
  11.  
  12. case $opcion in
  13. 1)
  14. echo "escriba una dirección ip: "
  15. read ip_address >> networking.csv
  16.  
  17. date >> networking.csv
  18. ping -c 1 $ip_address  >> networking.csv
  19.  
  20.  
  21. if [ $? -eq 0 ]; then
  22.    echo "La dirección IP $ip_address está en línea"
  23.    echo "La dirección IP $ip_address está en línea" >> networking.csv
  24.    echo "presione intro para continuar"
  25.    read
  26. else
  27.    echo "La dirección IP $ip_address no está en línea"
  28.    echo "La dirección IP $ip_address no está en línea" >> networking.csv
  29.    echo "presione intro para continuar"
  30.    read
  31. fi
  32. date >> networking.csv
  33. sh networking.sh
  34. ;;
  35. 2)
  36. cat networking.csv
  37. echo "presione intro para continuar"
  38. read
  39. sh networking.sh
  40. ;;
  41. 3)
  42. ;;
  43. 4)
  44. echo "Script escrito por socorroz"
  45. echo "GNU LINUX"
  46. echo "2023"
  47. echo
  48. echo "Presione intro para continuar"
  49. read
  50. sh networking.sh
  51. ;;
  52. *)
  53. echo "Opción no válida"
  54. echo "Escoja una opción 1, 2, 3 o 4"
  55. sleep 1
  56. sh networking.sh
  57. ;;
  58. esac
  59.  


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:

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

Código:
#/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.

Código
  1. #!/bin/bash
  2. while :
  3. do
  4. # "aqui tu codigo"
  5. # "Presiona [CTRL+C] para salir... o en la opcion 3 exit ();"
  6. sleep 1
  7. 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.