Introducción
En este tutorial, cubriremos los conceptos básicos de la select
en Bash.
La select
permite generar menús.
La construcción Select en Bash
La select
genera un menú a partir de una lista de elementos. Tiene casi la misma sintaxis que el bucle for
select ITEM in [LIST]
do
[COMMANDS]
done
El [LIST]
puede ser una serie de cadenas separadas por espacios, un rango de números, salida de comando, una matriz, etc. Puede establecer un mensaje personalizado para la construcción de select
utilizando la variable de entorno de PS3
.
select
se invoca la construcción select, cada elemento de la lista se imprime en la pantalla (error estándar), precedido por un número.
Si el usuario ingresa un número correspondiente al número de uno de los elementos mostrados, el valor de [ITEM]
se establece en ese elemento. El valor del elemento seleccionado se almacena en la variable REPLY
De lo contrario, si la entrada del usuario está en blanco, volverán a aparecer el indicador y la lista del menú.
El select
continuará ejecutándose y solicitará la entrada del usuario hasta que se ejecute el comando break
Para demostrar cómo funciona la select
, veamos el siguiente ejemplo simple:
PS3="Enter a number: "
select character in Sheldon Leonard Penny Howard Raj
do
echo "Selected character: $character"
echo "Selected number: $REPLY"
done
El guión mostrará un menú que consta de elementos de la lista con un número adjunto y el mensaje de PS3
Cuando el usuario ingresa un número, el guión imprime el carácter y el número seleccionados:
1) Sheldon
2) Leonard
3) Penny
4) Howard
5) Raj
Enter a number: 3
Selected character: Penny
Selected number: 3
Enter a number:
Seleccionar en el ejemplo de Bash
Por lo general, select
se utiliza junto con las case
o if
.
Echemos un vistazo a un ejemplo más práctico. Es una calculadora simple que solicita al usuario la entrada y realiza operaciones aritméticas básicas como suma, resta, multiplicación y división.
PS3="Select the operation: "
select opt in add subtract multiply divide quit; do
case $opt in
add)
read -p "Enter the first number: " n1
read -p "Enter the second number: " n2
echo "$n1 + $n2 = $(($n1+$n2))"
;;
subtract)
read -p "Enter the first number: " n1
read -p "Enter the second number: " n2
echo "$n1 - $n2 = $(($n1-$n2))"
;;
multiply)
read -p "Enter the first number: " n1
read -p "Enter the second number: " n2
echo "$n1 * $n2 = $(($n1*$n2))"
;;
divide)
read -p "Enter the first number: " n1
read -p "Enter the second number: " n2
echo "$n1 /$n2 = $(($n1/$n2))"
;;
quit)
break
;;
*)
echo "Invalid option $REPLY"
;;
esac
done
Cuando se ejecuta el script, muestra el menú y el mensaje de PS3
Se solicita al usuario que seleccione la operación y luego que ingrese 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 de break
1) add
2) subtract
3) multiply
4) divide
5) quit
Select the operation: 1
Enter the first number: 4
Enter the second number: 5
4 + 5 = 9
Select the operation: 2
Enter the first number: 4
Enter the second number: 5
4 - 5 = -1
Select the operation: 9
Invalid option 9
Select the operation: 5
Una desventaja de este script es que solo puede funcionar con números enteros.
Aquí hay una versión un poco más avanzada. Estamos utilizando la 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.
Instale la herramienta bc
en Debian, Ubuntu, Linux Mint y derivados:
sudo apt install bc
Instale la herramienta bc
en CentOS, Red Hat y Fedora:
sudo yum install bc
Intente ejecutar el siguiente código:
calculate () {
read -p "Enter the first number: " n1
read -p "Enter the second number: " n2
echo "$n1 $1 $n2 = " $(bc -l <<< "$n1$1$n2")
}
PS3="Select the operation: "
select opt in add subtract multiply divide quit; do
case $opt in
add)
calculate "+";;
subtract)
calculate "-";;
multiply)
calculate "*";;
divide)
calculate "/";;
quit)
break;;
*)
echo "Invalid option $REPLY";;
esac
done
1) add
2) subtract
3) multiply
4) divide
5) quit
Select the operation: 4
Enter the first number: 8
Enter the second number: 9
8 /9 =.88888888888888888888
Select the operation: 5
Conclusión
La select
permite generar fácilmente un menú. Es especialmente útil cuando se escriben scripts de shell que requieren la intervención del usuario.