En este tutorial, cubriremos los conceptos básicos de select
construir en Bash.
El select
construct te permite generar menús.
Bash select
Construir #
El select
construct genera un menú a partir de una lista de elementos. Tiene casi la misma sintaxis que for
bucle:
select ITEM in [LIST]
do
[COMMANDS]
done
El [LIST]
puede ser una serie de cadenas separadas por espacios, un rango de números, la salida de un comando, una matriz, etc. Un aviso personalizado para select
La construcción se puede configurar usando PS3
variable de entorno.
Cuando el select
se invoca la construcción, 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 que corresponde al número de uno de los elementos mostrados, entonces el valor de [ITEM]
está configurado para ese elemento. El valor del elemento seleccionado se almacena en la variable REPLY
. De lo contrario, si la entrada del usuario está vacía, el aviso y la lista del menú se muestran de nuevo.
El select
el bucle continuará ejecutándose y solicitará la entrada del usuario hasta que break
se ejecuta el comando.
Para demostrar cómo select
construir funciona, echemos un vistazo al 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 script mostrará un menú que consta de elementos de lista con un número adjunto y el PS3
oportuno. Cuando el usuario ingresa un número, el script imprimirá 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:
Bash select
Ejemplo #
Por lo general, select
se usa en combinación con case
de if
declaraciones.
Veamos un ejemplo más práctico. Es una calculadora simple que le pide al usuario que ingrese 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 PS3
oportuno. 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 break
se ejecuta el comando.
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
Un inconveniente de este script es que solo puede funcionar con números enteros.
Aquí hay una versión un poco más avanzada. Estamos usando el bc
herramienta que admite números flotantes para realizar cálculos matemáticos. Además, el código repetitivo se agrupa dentro de una función.
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 #
El select
construct le permite generar menús fácilmente. Es especialmente útil cuando se escriben scripts de shell que requieren la intervención del usuario.
Si tiene alguna pregunta o comentario, no dude en dejar un comentario.