GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash Select (Menüs erstellen)

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.


Linux
  1. Machen Sie den Bash-Verlauf mit diesen Tipps nützlicher

  2. Bash:Umschalt+Pfeiltasten Machen A,b,c,d?

  3. Build-Nummer in Bash erhöhen?

  4. Wie liest man eine Zeichenfolge als Hex-Zahl in Bash?

  5. Wie teste ich, ob eine Variable in Bash eine Zahl ist?

Bash printf - So drucken Sie eine Variable in Bash

Bash für Schleife

Bash Shebang

Bash-Sequenzausdruck (Bereich)

Shell/Bash-Skript zum Finden von Primzahlen in Linux

Wie kann man GREP dazu bringen, nur numerische Werte auszuwählen?