¿cuanta gente a visto el blog?

Creando un menú interactivo en Bash


En este tutorial, te mostraré cómo crear un menú de múltiples opciones en Bash para que tus usuarios puedan elegir qué acción debe ejecutarse. Reutilizaremos parte del código del capítulo anterior, así que si aún no lo has leído, asegúrate de hacerlo.

Planificando la funcionalidad

Comencemos revisando la funcionalidad principal del script:

  • Verifica el uso actual del disco
  • Verifica el uso actual de la CPU
  • Verifica el uso actual de la RAM
  • Verifica la versión exacta del núcleo

En caso de que no lo tengas a mano, aquí está el script en sí:

#!/bin/bash ## # Script de menú en BASH que verifica: # - Uso de memoria # - Carga de CPU # - Número de conexiones TCP # - Versión del núcleo ## server_name=$(hostname) function memory_check() { echo "" echo "El uso de memoria en ${server_name} es: " free -h echo "" } function cpu_check() { echo "" echo "La carga de CPU en ${server_name} es: " echo "" uptime echo "" } function tcp_check() { echo "" echo "Conexiones TCP en ${server_name}: " echo "" cat /proc/net/tcp | wc -l echo "" } function kernel_check() { echo "" echo "La versión del núcleo en ${server_name} es: " echo "" uname -r echo "" } function all_checks() { memory_check cpu_check tcp_check kernel_check }

Luego construiremos un menú que permita al usuario elegir qué función ejecutar. Por supuesto, puedes ajustar las funciones o agregar nuevas según tus necesidades.

Agregando algunos colores

Para hacer el menú un poco más "legible" y fácil de entender a simple vista, añadiremos algunas funciones de color. Al principio de tu script, agrega las siguientes funciones de color:

## # Variables de Color ## green='\e[32m' blue='\e[34m' clear='\e[0m' ## # Funciones de Color ## ColorGreen(){ echo -ne $green$1$clear } ColorBlue(){ echo -ne $blue$1$clear }

Puedes usar las funciones de color de la siguiente manera:

echo -ne $(ColorBlue 'Algún texto aquí')

Lo anterior mostrará la cadena "Algún texto aquí" y será de color azul.

Agregando el menú

Finalmente, para añadir nuestro menú, crearemos una función separada con un switch case para nuestras opciones de menú:

menu(){ echo -ne " Mi Primer Menú $(ColorGreen '1)') Uso de memoria $(ColorGreen '2)') Carga de CPU $(ColorGreen '3)') Número de conexiones TCP $(ColorGreen '4)') Versión del núcleo $(ColorGreen '5)') Ver Todo $(ColorGreen '0)') Salir $(ColorBlue 'Elige una opción:') " read a case $a in 1) memory_check ; menu ;; 2) cpu_check ; menu ;; 3) tcp_check ; menu ;; 4) kernel_check ; menu ;; 5) all_checks ; menu ;; 0) exit 0 ;; *) echo -e $red"Opción incorrecta."$clear; WrongCommand ;; esac }

Un resumen rápido del código

Primero, simplemente imprimimos las opciones del menú con un poco de color:

echo -ne " Mi Primer Menú $(ColorGreen '1)') Uso de memoria $(ColorGreen '2)') Carga de CPU $(ColorGreen '3)') Número de conexiones TCP $(ColorGreen '4)') Versión del núcleo $(ColorGreen '5)') Ver Todo $(ColorGreen '0)') Salir $(ColorBlue 'Elige una opción:') "

Luego leemos la respuesta del usuario y la almacenamos en una variable llamada $a:

read a

Finalmente, tenemos un switch case que activa una función diferente dependiendo del valor de $a:

case $a in 1) memory_check ; menu ;; 2) cpu_check ; menu ;; 3) tcp_check ; menu ;; 4) kernel_check ; menu ;; 5) all_checks ; menu ;; 0) exit 0 ;; *) echo -e $red"Opción incorrecta."$clear; WrongCommand ;; esac

Al final, necesitamos llamar a la función del menú para realmente imprimirlo:

# Llamar a la función del menú menu

Probando el script

Al final, tu script se verá así:

#!/bin/bash ## # Script de menú en BASH que verifica: # - Uso de memoria # - Carga de CPU # - Número de conexiones TCP # - Versión del núcleo ## server_name=$(hostname) function memory_check() { echo "" echo "El uso de memoria en ${server_name} es: " free -h echo "" } function cpu_check() { echo "" echo "La carga de CPU en ${server_name} es: " echo "" uptime echo "" } function tcp_check() { echo "" echo "Conexiones TCP en ${server_name}: " echo "" cat /proc/net/tcp | wc -l echo "" } function kernel_check() { echo "" echo "La versión del núcleo en ${server_name} es: " echo "" uname -r echo "" } function all_checks() { memory_check cpu_check tcp_check kernel_check } ## # Variables de Color ## green='\e[32m' blue='\e[34m' clear='\e[0m' ## # Funciones de Color ## ColorGreen(){ echo -ne $green$1$clear } ColorBlue(){ echo -ne $blue$1$clear } menu(){ echo -ne " Mi Primer Menú $(ColorGreen '1)') Uso de memoria $(ColorGreen '2)') Carga de CPU $(ColorGreen '3)') Número de conexiones TCP $(ColorGreen '4)') Versión del núcleo $(ColorGreen '5)') Ver Todo $(ColorGreen '0)') Salir $(ColorBlue 'Elige una opción:') " read a case $a in 1) memory_check ; menu ;; 2) cpu_check ; menu ;; 3) tcp_check ; menu ;; 4) kernel_check ; menu ;; 5) all_checks ; menu ;; 0) exit 0 ;; *) echo -e $red"Opción incorrecta."$clear; WrongCommand ;; esac } # Llamar a la función del menú menu

Para probar el script, crea un nuevo archivo con una extensión .sh, por ejemplo: menu.sh y luego ejecútalo:

bash menu.sh

La salida que obtendrás se verá así:

Mi Primer Menú 1) Uso de memoria 2) Carga de CPU 3) Número de conexiones TCP 4) Versión del núcleo 5) Ver Todo 0) Salir Elige una opción:

Podrás elegir una opción diferente de la lista y cada número llamará a una función diferente del script.

Conclusión

¡Ahora sabes cómo crear un menú en Bash e implementarlo en tus scripts para que los usuarios puedan seleccionar diferentes valores!

Nota: Este contenido fue publicado inicialmente en DevDojo.com.



No hay comentarios.:

Publicar un comentario