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.