Cómo usar Select en Bash en Linux

1 mar 2021 3 min di lettura
Cómo usar Select en Bash en Linux
Indice dei contenuti

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.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.