Bash Select, cómo crear un menú sencillo

Una vez más aquí. En esta ocasión vamos a echar un vistazo a algunos conceptos básicos de la construcción select en Bash. El comando ‘select‘ es un comando bash muy útil para la creación de menús en bash. Los diferentes tipos de tareas de generación de menús, como la creación de una lista basada en menús, la creación de un menú a partir del contenido del archivo, etc., se pueden realizar mediante el comando bash select.

Construye con Bash Select

Como decía, la construcción select genera un menú a partir de una lista de elementos. Además esta tiene casi la misma sintaxis que el bucle for:

select ELEMENTO in [LISTA]
do
  [COMANDOS]
done

La [LISTA] puede ser una serie de cadenas separadas por espacios, un rango de números, la salida de un comando, una matriz, etc. Se puede configurar una solicitud personalizada para la construcción select usando la variable de entorno PS3.

Cuando se invoca la construcción, cada elemento de la lista se imprime en la pantalla, precedido por un número.

Si el usuario escribe un número que corresponde al número de uno de los elementos mostrados, entonces el valor de [ELEMENTO] se establece en ese elemento. El valor del elemento seleccionado se almacena en la variable RESPUESTA. De lo contrario, si la entrada del usuario está vacía, la solicitud y la lista del menú se muestran nuevamente.

El ciclo de selección continuará ejecutándose y solicitará la entrada del usuario hasta que se ejecute el comando de interrupción.

Para empezar y poder probar los ejemplos que ilustrarán este menú, vamos a crear un archivo bash llamado select1.sh. En todos estos ejemplos el comando ‘select’ va a recuperar la información de la lista, e imprimirá la información como un menú.

Ejemplos de bash select

Una lista

Para demostrar cómo funciona la construcción select, echemos un vistazo al siguiente ejemplo simple.

#!/bin/bash 
# Definimos el menú 

PS3="Seleccionar un número: "

select character in Sheldon Leonard Penny Howard Raj
do
        echo "El personaje seleccionado es: $character" 
        echo "el número seleccionado ha sido: $REPLY" 
done

Para ejecutar el script creado solo tenemos que ejecutarlo de la siguiente manera:


bash select1.sh

El script mostrará un menú que consta de elementos de la lista con un número que lo acompaña y el mensaje de PS3. Cuando el usuario escribe un número, el script imprimirá el mensaje y el número seleccionado.

Una calculadora de números enteros

Ahora echemos un vistazo a un ejemplo más práctico. Se trata de una calculadora simple que solicita al usuario que escriba los números y ella realizará las operaciones aritméticas básicas como; suma, resta, multiplicación y división.

#!/bin/bash 
# Define la lista del menú aqui

PS3="Selecciona una operación: " 

select opt in suma resta multiplicar dividir salir; 

do 
	case $opt in 
		suma) 
			read -p "Escribe el primer número: " n1 
			read -p "Escribe el segundo número: " n2 
			echo "$n1 + $n2 = $(($n1+$n2))" 
			;; 
		resta) 
			read -p "Escribe el primer número: " n1 
			read -p "Escribe el segundo número: " n2 
			echo "$n1 - $n2 = $(($n1-$n2))" 
			;; 
		multiplicar) 
			read -p "Escribe el primer número: " n1 
			read -p "Escribe el segundo númnero: " n2 
			echo "$n1 * $n2 = $(($n1*$n2))" 
			;; 
		dividir) 
			read -p "Escribe el primer número: " n1 
			read -p "Escrib el segundo número: " n2 
			echo "$n1 / $n2 = $(($n1/$n2))" 
			;; 
		salir) 
			break 
			;; 
		*) 
			echo "$REPLY no es una operación válida" 
			;; 
	esac 
done

Cuando se ejecuta el script, muestra el menú y la solicitud de PS3. Se le solicita al usuario que seleccione la operación y luego escriba dos números. Dependiendo de la entrada del usuario, el script imprimirá el resultado. Se le pedirá al usuario que realice una nueva operación después de cada selección hasta que se ejecute el comando break. En caso de seleccionar un operación inválida, se va a mostrar un mensaje de error.

Un inconveniente de este script es que solo puede funcionar con enteros.

Calculadora que admite números flotantes

Aquí hay una versión un poco más avanzada del anterior script. En ella vamos a utilizarla herramienta bc que admite números flotantes para realizar cálculos matemáticos. Además, el código repetitivo se agrupa dentro de una función llamada calcular().

#!/bin/bash 
# Definimos el menú 

calcular () { 
	read -p "Escribe el primer número: " n1 
	read -p "Escribe el segundo número: " n2 
	echo "$n1 $1 $n2 = " $(bc -l <<< "$n1$1$n2") 
} 

PS3="Selecciona una operación: " 

select opt in sumar restar multiplicar dividir salir; 

do 
	case $opt in 
		sumar) calcular "+";; 
		restar) calcular "-";; 
		multiplicar) calcular "*";; 
		dividir) calcular "/";; 
		salir) 
			break;; 
		*) echo "$REPLY es una opción inválida"
			;; 
	esac 
done

El resultado del anterior script es como el que podemos ver en la siguiente captura de pantalla:

Como espero que se haya podido ver, la construcción select permite generar menús fácilmente. Es especialmente útil al escribir scripts de shell que requieren la entrada del usuario. Todos estos ejemplos de select, buscan ser lo más sencillos posibles en cuanto a la creación del menú Bash se refiere.


Artículos relacionados

Sublime Text 4, instalación desde el repositorio oficial en Ubuntu

Kelebek 3.5, una nueva versión de este complemento disponible para Kodi

WiFi, 3 formas de verificar la contraseña en Ubuntu