In diesem Tutorial behandeln wir die Grundlagen von select
in Bash konstruieren.
Die select
Konstrukt ermöglicht es Ihnen, Menüs zu erstellen.
Bash select
Konstruieren Sie #
Die select
Konstrukt generiert ein Menü aus einer Liste von Elementen. Es hat fast dieselbe Syntax wie for
Schleife:
select ITEM in [LIST]
do
[COMMANDS]
done
Die [LIST]
kann eine Reihe von Zeichenfolgen sein, die durch Leerzeichen getrennt sind, ein Zahlenbereich, die Ausgabe eines Befehls, ein Array usw. Eine benutzerdefinierte Eingabeaufforderung für die select
Konstrukt kann mit PS3
gesetzt werden Umgebungsvariable.
Beim select
Konstrukt aufgerufen wird, wird jedes Element aus der Liste auf dem Bildschirm ausgegeben (Standardfehler), wobei eine Zahl vorangestellt wird.
Wenn der Benutzer eine Nummer eingibt, die der Nummer eines der angezeigten Elemente entspricht, dann der Wert von [ITEM]
auf dieses Element eingestellt ist. Der Wert des ausgewählten Elements wird in der Variablen REPLY
gespeichert . Andernfalls, wenn die Benutzereingabe leer ist, werden die Eingabeaufforderung und die Menüliste erneut angezeigt.
Die select
Die Schleife wird bis zum break
weiter ausgeführt und zur Benutzereingabe aufgefordert Befehl wird ausgeführt.
Um zu demonstrieren, wie die select
construct funktioniert, sehen wir uns das folgende einfache Beispiel an:
PS3="Enter a number: "
select character in Sheldon Leonard Penny Howard Raj
do
echo "Selected character: $character"
echo "Selected number: $REPLY"
done
Das Skript zeigt ein Menü an, das aus Listenelementen mit einer zugehörigen Nummer und dem PS3
besteht prompt. Wenn der Benutzer eine Zahl eingibt, druckt das Skript das ausgewählte Zeichen und die Zahl:
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
Beispiel #
Normalerweise select
wird in Kombination mit case
verwendet von if
Aussagen.
Schauen wir uns ein praktischeres Beispiel an. Es ist ein einfacher Taschenrechner, der den Benutzer zur Eingabe auffordert und grundlegende arithmetische Operationen wie Addition, Subtraktion, Multiplikation und Division durchführt.
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
Wenn das Skript ausgeführt wird, zeigt es das Menü und die PS3
an prompt. Der Benutzer wird aufgefordert, die Operation auszuwählen und dann zwei Zahlen einzugeben. Abhängig von der Eingabe des Benutzers druckt das Skript das Ergebnis. Der Benutzer wird aufgefordert, nach jeder Auswahl bis zum break
eine neue Operation durchzuführen Befehl wird ausgeführt.
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
Ein Nachteil dieses Skripts ist, dass es nur mit ganzen Zahlen arbeiten kann.
Hier ist eine etwas fortgeschrittenere Version. Wir verwenden den bc
Tool, das Gleitkommazahlen unterstützt, um mathematische Berechnungen durchzuführen. Außerdem ist der sich wiederholende Code innerhalb einer Funktion gruppiert.
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
Schlussfolgerung #
Die select
Mit construct können Sie ganz einfach Menüs erstellen. Es ist besonders nützlich beim Schreiben von Shell-Skripten, die Benutzereingaben erfordern.
Wenn Sie Fragen oder Feedback haben, können Sie gerne einen Kommentar hinterlassen.