GNU/Linux >> Tutoriales Linux >  >> Linux

Bash Select (hacer menús)

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.


Linux
  1. Bash:Mayús+teclas de flecha ¿Hacer A,b,c,d?

  2. ¿Incrementar el número de compilación en Bash?

  3. ¿Cómo leer una cadena como número hexadecimal en Bash?

  4. ¿Cómo pruebo si una variable es un número en Bash?

  5. Redondear un número dividido en Bash

Bash printf - Cómo imprimir una variable en Bash

Golpe para bucle

Bash Shebang

Expresión de secuencia Bash (rango)

Shell/Bash Script para encontrar números primos en Linux

Cómo agregar un ícono al indicador de bash