En este tutorial, cubriremos los conceptos básicos de la selectconstrucción en Bash.

La selectconstrucción le permite generar menús.

selectConstruir golpe

La selectconstrucció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 selectconstrucción mediante la PS3 variable de entorno .

Cuando selectse 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 REPLYDe lo contrario, si la entrada del usuario está vacía, el aviso y la lista del menú se muestran de nuevo.

El selectciclo continuará ejecutándose y solicitará la entrada del usuario hasta break que se ejecute el comando.

Para demostrar cómo funciona la selectconstrucció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 PS3aviso. 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:

selectEjemplo de bash

Por lo general, selectse 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 PS3aviso. 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 breakque 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 bcherramienta 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 selectconstrucció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.