En este tutorial, cubriremos los conceptos básicos de la select
construcción en Bash.
La
select
construcción le permite generar menús.select
Construir golpe
La select
construcción genera un menú a partir de una lista de elementos. Tiene casi la misma sintaxis que el for
bucle:
select ITEM in [LIST]
do
[COMMANDS]
done
Puede ser una serie de cadenas separadas por espacios, un rango de números, la [LIST]
salida de un comando, una matriz, etc. Se puede configurar un indicador personalizado para la select
construcción mediante la PS3
variable de entorno .
Cuando 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]
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á vacía, el aviso y la lista del menú se muestran de nuevo.
El select
ciclo continuará ejecutándose y solicitará la entrada del usuario hasta break
que se ejecute el comando.
Para demostrar cómo funciona la select
construcción, 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
La secuencia de comandos mostrará un menú que consta de elementos de la lista con un número que los acompaña y el PS3
aviso. 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:
select
Ejemplo de bash
Por lo general, select
se usa en combinación con declaraciones case
of if
.
Veamos un ejemplo más práctico. Es una calculadora simple que solicita 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
aviso. 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 break
que se ejecute 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 utilizando la 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
La select
construcción 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.
0 Comentarios