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

Bash-Skripting – Case-Statement

Im vorherigen Artikel haben wir gesehen, wie man mit bedingten Anweisungen in bash arbeitet, um Bedingungen auszuwerten und Entscheidungen basierend auf den Ergebnissen zu treffen. Ebenso werden wir in diesem Artikel lernen, wie man case-Anweisung verwendet in Bash-Skripten, die auch zum Auswerten von Bedingungen verwendet werden. Sie können eine Bash-Case-Anweisung verwenden, anstatt eine lange Liste von if..elif..else zu schreiben Erklärung. Wenn Sie keine Ahnung von bedingten Anweisungen haben, haben wir einen ausführlichen Artikel zum Thema. Ich schlage vor, Sie werfen einen Blick darauf, bevor Sie diesen Artikel lesen.

  • Bash-Skripting – Bedingte Anweisungen

Case-Anweisungssyntax

Die Syntax der case-Anweisung in bash ist unten angegeben:

case expression in
  pattern1) STATEMENTS ;;
  pattern2) STATEMENTS ;;
  Pattern3 | Pattern4 | pattern5) STATEMENTS ;;
  pattern-N) STATEMENTS ;;
  *) STATEMENTS ;;
esac

Erklärung:

  1. Das Schlüsselwort "case" und "esac" markiert den Beginn und das Ende der Case-Anweisung.
  2. Auf die Groß-/Kleinschreibung des Schlüsselworts sollte ein "expression" folgen . Dieser Ausdruck wird ausgewertet und die Ausgabe wird anhand der Musterliste durchsucht.
  3. Nach dem Ausdruck das "in" Schlüsselwort geschrieben werden, das auf "value in patterns" zeigt .
  4. Sie können beliebig viele Muster erstellen. Sie können sich jedes Muster als if vorstellen und elif Klausel in der Bedingungsanweisung. Wenn der aus dem Ausdruck ausgewertete Wert mit einem Muster abgeglichen wird, führt dieses Muster seinen Codeblock aus. Die verbleibenden Muster werden übersprungen.
  5. Jede Anweisung innerhalb des Musters sollte mit einem doppelten Semikolon abgeschlossen werden (;; ).
  6. Ähnlich wie bei der else-Klausel in der if-Anweisung gibt es in der case-Anweisung ein Standardmuster namens Sternchen (* ), der seinen Codeblock ausführt, wenn keines der Muster übereinstimmt.

Beispiel 1 – Rechner mit case-Anweisung

In diesem Beispiel habe ich einen einfachen Taschenrechner mit einer Case-Anweisung erstellt. Lassen Sie mich erklären, was passiert, wenn Sie diesen Code ausführen.

  1. Der Benutzer wird aufgefordert, zwei Zahlen einzugeben, und diese werden in den Variablen "X" gespeichert und "Y" .
  2. Der Benutzer wird aufgefordert, die Art der Operation (Addieren, Subtrahieren, Multiplizieren, Dividieren) einzugeben und in der Variablen "OPERATOR" zu speichern .
  3. Bei case-Anweisung die Variable "OPERATOR" ausgewertet wird und verschiedene Muster (+ ,- ,x ,/ ,% ) werden für verschiedene Operationen erstellt.
  4. Wenn ein Muster gefunden wird, führt das bestimmte Muster seine Anweisung aus und überspringt alle anderen Muster in der case-Anweisung.
  5. Wenn Sie versuchen, andere Werte als die gewünschten arithmetischen Operatoren einzugeben, dann das Standard-Muster (* ) führt seine Anweisung aus.
#!/usr/bin/env bash

read -p "Enter the first number(X)  :  " X
read -p "Enter the second number(Y) :  " Y
read -p "
Addition => +
Subtract => -
Multiply => x
Division => /
Reminder => %

Choose any one operator   :  " OPERATOR
case "$OPERATOR" in
 +)
   echo -e "\nAddition of X and Y is $(( X + Y ))" ;;
 -)
   echo -e "\nSubtraction of X and Y is $(( X - Y ))" ;;
 x)
   echo -e "\nMultiply X and Y is $(( X * Y ))" ;;
 /)
   echo -e "\nDivision of X and Y is $(( X / Y ))" ;;
 %)
   echo -e "\nReminder of X and Y is $(( X % Y ))" ;;
 *)
   echo -e "\n[ERROR] You have chosen an operator that is not in the list.
You can choose either(+, -, x, /, %) operator from the list.
Rerun the program again."
esac

Sehen Sie sich das folgende Bild an, ich sende den Code und wähle den "Additionsoperator" .

Ich führe denselben Code noch einmal aus, aber dieses Mal gebe ich einen zufälligen Wert an, der das Standardmuster (* ) seine Anweisung ausführen.

Beispiel 2 – Erstellen mehrerer Muster in einem einzigen Satz

Im vorherigen Beispiel haben wir verschiedene Muster für verschiedene arithmetische Operatoren erstellt. Es ist auch möglich, mehrere Muster in derselben Klausel zu erstellen, und wenn eines der Muster übereinstimmt, wird die jeweilige Anweisung ausgeführt. Die Syntax ist dieselbe, aber Sie fügen eine Pipe hinzu Symbol (| ) und fügen Sie verschiedene Muster in derselben Zeile wie unten hinzu.

case expression in
   Pattern1 | Pattern2 | pattern3) 
   STATEMENTS ;;
   *)
   STATEMENTS ;;
esac

Im folgenden Beispiel gibt der Benutzer das Jahr als Eingabe ein und erhält die Details der orangefarbenen Kappe aus den IPL-Daten. In den Jahren 2015, 2017 und 2019 gewann derselbe Spieler die orangefarbene Mütze, also habe ich ein anderes Jahr als das Muster in derselben Klausel erstellt.

read -p "Choose the year between 2015 - 2021 to get orange cap player name: " CAP
case "$CAP" in
 2015 | 2017 | 2019)
   echo -e "\nOrange cap winner for $YEAR is David Warner" ;;
 2016)
   echo -e "\nOrange cap winner for $YEAR is Virat Kohli" ;;
 2018)
  echo -e "\nOrange cap winner for $YEAR is Kane Williamson" ;;
 2020)
   echo -e "\nOrange cap winner for $YEAR is KL Rahul" ;;
 2021)
   echo -e "\nOrange cap winner for $YEAR is Ruturaj Gaikwad" ;;
 *)
   echo -e "\n[ERROR] Enter the year between 2015 - 2021."
esac

Beispiel 3 – Musterabgleich in case-Anweisung

Musterabgleich kann in case-Anweisungen verwendet werden. Ich verwende das gleiche Beispiel aus dem vorherigen Abschnitt, füge aber ein zusätzliches Muster (20[2-9][2-9]) hinzu Wenn der Benutzer ein Jahr über 2021 eingibt, wird eine Nachricht mit der Aufschrift "Serien noch nicht geschehen" gedruckt.

read -p "Choose the year between 2015 - 2021 to get orange cap player name: " CAP
case "$CAP" in
 2015 | 2017 | 2019)
   echo -e "\nOrange cap winner for $YEAR is David Warner" ;;
 2016)
   echo -e "\nOrange cap winner for $YEAR is Virat Kohli" ;;
 2018)
  echo -e "\nOrange cap winner for $YEAR is Kane Williamson" ;;
 2020)
   echo -e "\nOrange cap winner for $YEAR is KL Rahul" ;;
 2021)
   echo -e "\nOrange cap winner for $YEAR is Ruturaj Gaikwad" ;;
 20[2-9][2-9])
   echo -e "\nSeries is yet to happen for the year $CAP" ;;
 *)
   echo -e "\n[ERROR] Enter the year between 2015 - 2021."
esac

Beispiel 4 – Benutzerbestätigung erhalten

Manchmal müssen Sie den Benutzer bestätigen, um mit dem nächsten Schritt in Ihrem Programm fortzufahren. Die Verwendung einer case-Anweisung wäre für diesen Anwendungsfall eine gute Wahl.

Im vorherigen Beispiel wird Muster in eine Zeile und Anweisungen in eine andere Zeile geschrieben, aber Sie können auch Muster und Anweisungen in eine einzelne Zeile schreiben, wie unten gezeigt.

read -p "Input file is received in CSV format, Please confirm to load the data into production database  : " CONFIRM
case "$CONFIRM" in
 [Yy] | [Yy][Ee][Ss] ) echo "++ Running the utility to load the data to the database.." ;;
 [Nn] | [Nn][Oo] ) echo -e "++ Skipping load db step upon user confirmation..\n Exiting the script.." ;;
 *) echo -e "[ERROR] = Wrong Input, Exiting the script.."
esac

Beispiel 5 - Case-Anweisung mit Rückgabecodes

Sie können Logik schreiben, um den Rückgabecode des zuvor ausgeführten Befehls zu erfassen, und mithilfe von case-Anweisungen einige Aktionen ausführen. Ich erstelle ein GUI-Dialogfeld, um den Benutzernamen und das Passwort vom Benutzer mit zenity zu akzeptieren . Wenn der Benutzer den Benutzernamen und das Passwort erfolgreich übermittelt, gibt Zenity den Rückgabecode als Null aus und basierend darauf habe ich Logik hinzugefügt, um einen neuen Benutzer hinzuzufügen. Alles andere als Null, wird eine Fehlermeldung ausgegeben.

INFO=$(zenity --password --username)
case $? in
 0)
   USERNAME=$(echo ${INFO} | awk -F "|" '{ print $1 }')
   PASSWORD=$(echo ${INFO} | awk -F "|" '{ print $2 }')
   useradd -m -p "${PASSWORD}" "${USERNAME}"
   ;;
 *)
   echo "[ERROR] - User not added."
esac

Ich habe auf "Abbrechen" gedrückt Schaltfläche im Dialogfeld, sodass bei Verwendung des Standardmusters (*) ein Fehler ausgegeben wurde ).

Empfohlene Lektüre:

  • Erstellen von GUI-Dialogfeldern in Bash-Skripten mit Zenity unter Linux und Unix

Referenzskripte

Um sich mit Case-Anweisungen vertraut zu machen, können Sie sich vorhandene Codes ansehen, die mit Case-Anweisungen geschrieben wurden. Ein besserer Ausgangspunkt wäre das Lesen von Startskripten unter /etc/init.d Verzeichnis. Zum Beispiel habe ich Virtualbox auf meinem Computer installiert und es hat eine Startdatei unter /etc/init.d Verzeichnis. Es gibt einen Codeabschnitt, der mit einer case-Anweisung geschrieben wurde, was eine gute Vorstellung davon gibt, wie die case-Anweisung funktioniert.

$ cd /etc/init.d/
$ cat bluetooth

Schlussfolgerung

In diesem Artikel haben wir gesehen, was eine Groß-/Kleinschreibung in Bash ist, und verschiedene Möglichkeiten, sie zu verwenden. Sowohl die bedingte Anweisung als auch die case-Anweisung dienen demselben Zweck. Sie sollten besser verstehen, welche Methode zum Anwendungsfall passt. Case-Anweisungen werden auch verwendet, wenn Sie Hilfefunktionen mit getopt erstellen müssen und getopts Programme. Erstellen Sie ein Skript und üben Sie die Beispiele, die wir hier gegeben haben, um mehr über Fallaussagen zu erfahren.

Bash-Scripting-Leitfäden:

  • Bash-Skripting – Bedingte Anweisungen
  • Bash-Scripting – String-Manipulation
  • Bash-Scripting – Printf-Befehl mit Beispielen erklärt
  • Bash-Skripting – Indiziertes Array mit Beispielen erklärt
  • Bash-Skripting – Assoziatives Array mit Beispielen erklärt
  • Bash-Skripting – For-Schleife mit Beispielen erklärt
  • Bash-Skripting – While- und Until-Schleife mit Beispielen erklärt
  • Bash-Umleitung mit Beispielen erklärt
  • Bash-Scripting – Variablen mit Beispielen erklärt
  • Bash-Scripting – Funktionen mit Beispielen erklärt
  • Bash-Echo-Befehl mit Beispielen in Linux erklärt
  • Bash Heredoc-Tutorial für Anfänger

Linux
  1. Bash-Scripting(I)

  2. Anweisung blockiert Mechanismus im Shell-Scripting?

  3. 5 Beispiele für Bash-Case-Anweisungen

  4. Bash/sh 'if else'-Anweisung

  5. Gibt es eine goto-Anweisung in bash?

Bash-Skripting – Bedingte Anweisungen

Bash-Scripting – String-Manipulation

So arbeiten Sie mit Case-Anweisungen in Bash-Skripten

Bash-Skripting (II)

Bash-Scripting(III)

Bash If Else Syntax mit Beispielen