GNU/Linux >> Linux Esercitazione >  >> Linux

Bash Select (Crea menu)

In questo tutorial tratteremo le basi della select costruire in Bash.

Il select build ti consente di generare menu.

Bash select Costruisci #

Il select build genera un menu da un elenco di elementi. Ha quasi la stessa sintassi di for ciclo:

select ITEM in [LIST]
do
  [COMMANDS]
done

Il [LIST] può essere una serie di stringhe separate da spazi, un intervallo di numeri, l'output di un comando, una matrice e così via. Un prompt personalizzato per select costrutto può essere impostato usando il PS3 variabile di ambiente.

Quando il select viene invocato il costrutto, ogni elemento dell'elenco viene stampato sullo schermo (errore standard), preceduto da un numero.

Se l'utente inserisce un numero che corrisponde al numero di uno degli elementi visualizzati, allora il valore di [ITEM] è impostato su quell'elemento. Il valore dell'elemento selezionato è memorizzato nella variabile REPLY . In caso contrario, se l'input dell'utente è vuoto, vengono visualizzati nuovamente il prompt e l'elenco dei menu.

Il select il ciclo continuerà a essere eseguito e richiederà l'input dell'utente fino alla break il comando viene eseguito.

Per dimostrare come select costruire opere, diamo un'occhiata al seguente semplice esempio:

PS3="Enter a number: "

select character in Sheldon Leonard Penny Howard Raj
do
    echo "Selected character: $character"
    echo "Selected number: $REPLY"
done

Lo script visualizzerà un menu composto da voci di elenco con un numero di accompagnamento e il PS3 richiesta. Quando l'utente inserisce un numero, lo script stampa il carattere e il numero selezionati:

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 Esempio #

Di solito, select viene utilizzato in combinazione con case di if dichiarazioni.

Diamo un'occhiata a un esempio più pratico. È una semplice calcolatrice che richiede all'utente un input ed esegue operazioni aritmetiche di base come addizione, sottrazione, moltiplicazione e divisione.

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

Quando lo script viene eseguito, mostra il menu e il PS3 richiesta. All'utente viene richiesto di selezionare l'operazione e quindi di inserire due numeri. A seconda dell'input dell'utente, lo script stamperà il risultato. All'utente verrà chiesto di eseguire una nuova operazione dopo ogni selezione fino al break il comando viene eseguito.

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

Uno svantaggio di questo script è che può funzionare solo con numeri interi.

Ecco una versione un po' più avanzata. Stiamo usando il bc strumento che supporta i numeri mobili per eseguire calcoli matematici. Inoltre, il codice ripetitivo è raggruppato all'interno di una funzione.

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   

Conclusione #

Il select build ti consente di generare facilmente menu. È particolarmente utile quando si scrivono script di shell che richiedono l'input dell'utente.

Se hai domande o feedback, sentiti libero di lasciare un commento.


Linux
  1. È possibile creare e utilizzare menu in Vim (basato su terminale)?

  2. Come leggere la stringa come numero esadecimale in Bash?

  3. Arrotonda un numero diviso in Bash

  4. Ottieni il numero intero massimo dal numero in Linux (BASH)

  5. Come selezionare un numero di porta statico per un'app personalizzata?

Rendi la cronologia di Bash più utile con questi suggerimenti

Bash printf - Come stampare una variabile in Bash

Bash For Loop

Bash Shebang

Espressione sequenza Bash (intervallo)

Script Shell/Bash per trovare i numeri primi in Linux