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.