Bash Scripting – Case Statement

Bash Scripting – Case Statement

Eine Falldarstellung in Bash-Skripten wird verwendet, wenn eine Entscheidung gegen mehrere Auswahlmöglichkeiten getroffen werden muss. Mit anderen Worten: Es ist nützlich, wenn ein Ausdruck die Möglichkeit hat, mehrere Werte anzunehmen. Diese Methodik kann als Ersatz für mehrere if-Anweisungen in einem Skript angesehen werden. Case-Anweisungen haben gegenüber if-Anweisungen einen Vorteil, da sie die Lesbarkeit unseres Codes verbessern und einfacher zu warten sind. Case-Anweisungen in einem Bash-Skript ähneln Case-Anweisungen in der C-Sprache. Aber im Gegensatz zu C stoppt die Bash-Case-Anweisung die Fortsetzung der Suche, sobald die Übereinstimmung auftritt. Mit einfachen Worten: Sie erfordern keine obligatorische Break-Anweisung in C, um die weitere Suche nach einem Muster zu stoppen.

Die grundlegende Syntax einer case-Anweisung ist unten angegeben:

Syntax:

case EXPRESSION in Pattern_Case_1) STATEMENTS ;; Pattern_Case_1) STATEMENTS ;; Pattern_Case_N) STATEMENTS ;; *) STATEMENTS ;; esac 

So funktioniert die Case-Anweisung:

  • EXPRESSION> ist die Variable oder der Wert, die anhand verschiedener Muster (Fälle) ausgewertet wird, um eine Übereinstimmung zu finden.
  • Die case-Anweisung beginnt mit dem Schlüsselwort case> gefolgt von der EXPRESSION> ausgewertet werden.
  • Jeder Fall ist durch a definiert Pattern_Case> das einen bestimmten Wert oder ein bestimmtes Muster darstellt, mit dem verglichen werden soll EXPRESSION> .
  • Nach jedem Pattern_Case> , gibt es Anweisungen, die ausgeführt werden müssen, wenn die EXPRESSION> entspricht dem Spezifischen Pattern_Case> . Diese Aussagen werden mit bezeichnet STATEMENTS> .
  • Der ;;> jeweils am Ende STATEMENTS> Block gibt das Ende eines Case-Blocks an.
  • Der *)> ist ein Sonderfall, der als Standardfall bezeichnet wird. Wenn keines der vorherigen Muster mit dem übereinstimmt EXPRESSION> , Die STATEMENTS> unter dem *)> Block wird ausgeführt.
  • Der esac> Das Schlüsselwort markiert das Ende der case-Anweisung.
  • Falls kein Muster gefunden wird, ist der Rückgabestatus Null. Andernfalls ist der Rückgabestatus der Exit-Status des ausgeführten Körpers des übereinstimmenden Musterfalls.
  • So wie C das Standardschlüsselwort für die Standardanweisung bereitstellt, können wir auch in der Bash-Case-Anweisung das Platzhalter-Sternchen (*) verwenden und einen endgültigen Musterfall definieren, um den Standardfall zu definieren.

Beispiel 1: Geben Sie eine Beschreibung für jede Option aus

In diesem Beispiel ermöglicht ein Skript dem Benutzer die Auswahl einer Abteilung und zeigt mit Hilfe eines Echo-Befehls eine der Eingabe entsprechende Beschreibung an. In diesem Skript haben wir die Variable DEPARTMENT als Informatik zugewiesen. Somit wird der Hauptteil des ersten Musterfalls ausgeführt.

Sie können den unten aufgeführten Anweisungen folgen:

1. Öffnen Sie das Terminal (Strg + Alt + T) und erstellen Sie das Skript:

department.sh 

2. Fügen Sie diese Anweisungen zum Skript hinzu:

#!/bin/bash DEPARTMENT='Computer Science' echo -n 'Your DEPARTMENT is ' case $DEPARTMENT in 'Computer Science') echo -n 'Computer Science' ;; 'Electrical and Electronics Engineering' | 'Electrical Engineering') echo -n 'Electrical and Electronics Engineering or Electrical Engineering' ;; 'Information Technology' | 'Electronics and Communication') echo -n 'Information Technology or Electronics and Communication' ;; *) echo -n 'Invalid' ;; esac 

3. Jede der Zeilen wird im Folgenden beschrieben:

  • Die erste Zeile im Skript beginnt mit dem Shebang (#!).
  • Es weist das Betriebssystem an, einen bestimmten Interpreter zum Parsen des Skripts zu verwenden.
  • Wir haben eine DEPARTMENT-Variable als Informatik initialisiert.
  • Jetzt verwenden wir eine Case-Anweisung.
  • Jeder Ausdruck wurde durch die case-Anweisung behandelt.
  • Die letzte Zeile, esac, wurde zum Beenden der case-Anweisung verwendet.

4. Speichern Sie das Skript und machen Sie es ausführbar.

chmod +x department.sh 

5. Führen Sie das Skript aus.

./department.sh 

Ausgabe:

406

Beispiel 2: Verwendung mehrerer Musterfälle

In jeder Klausel können wir mehrere Musterfälle verwenden. Wenn der Ausdruck mit mindestens einem Musterfall übereinstimmt, wird der Hauptteil der Klausel ausgeführt. In diesem Skript haben wir die Variable DEPARTMENT als Elektronik und Kommunikation zugewiesen. Der dritte Musterfall hat zwei Werte, die durch den Pipe-Operator ( | ) getrennt sind. Somit wird der Hauptteil des dritten Musterfalls ausgeführt.

Sie können den unten aufgeführten Anweisungen folgen:

1. Öffnen Sie das Terminal (Strg + Alt + T) und erstellen Sie das Skript:

department.sh 

2. Fügen Sie diese Anweisungen zum Skript hinzu:

#!/bin/bash DEPARTMENT='Electronics and Communication' echo -n 'Your DEPARTMENT is ' case $DEPARTMENT in 'Computer Science') echo -n 'Computer Science' ;; 'Electrical and Electronics Engineering' | 'Electrical Engineering') echo -n 'Electrical and Electronics Engineering or Electrical Engineering' ;; 'Information Technology' | 'Electronics and Communication') echo -n 'Information Technology or Electronics and Communication' ;; *) echo -n 'Invalid' ;; esac 

3. Jede der Zeilen wurde unten besprochen:

  • Die erste Zeile im Skript beginnt mit dem Shebang (#!).
  • Es weist das Betriebssystem an, einen bestimmten Interpreter zum Parsen des Skripts zu verwenden.
  • Wir haben eine DEPARTMENT-Variable als Elektronik und Kommunikation initialisiert.
  • Jetzt verwenden wir eine Case-Anweisung.
  • Jeder Ausdruck wurde durch die case-Anweisung behandelt.
  • Die letzte Zeile, esac, wurde zum Beenden der case-Anweisung verwendet.

4. Speichern Sie das Skript und machen Sie es ausführbar.

chmod +x department.sh 

5. Führen Sie das Skript aus.

./department.sh 

Ausgabe:

407 Beispiel 3: for-Schleifen

In diesem Skript haben wir die Abteilung von drei Schülern einer Klasse in einem Array DEPARTMENT zugewiesen. Mit anderen Worten: Wir werden mehr als einen Ausdruck verarbeiten, der in der Variablen DEPARTMENT beschrieben ist. Um über mehrere Ausdrücke zu iterieren, können wir eine for-Schleife verwenden.

Sie können den unten aufgeführten Anweisungen folgen:

1. Öffnen Sie das Terminal (Strg + Alt + T) und erstellen Sie das Skript:

department.sh 

2. Fügen Sie diese Anweisungen zum Skript hinzu:

#!/bin/bash DEPARTMENT=('Electronics and Communication' 'Computer Science' 'Information Technology') for value in '${DEPARTMENT[@]}' do case $value in 'Computer Science') echo -n 'Computer Science ' ;; 'Electrical and Electronics Engineering' | 'Electrical Engineering') echo -n 'Electrical and Electronics Engineering or Electrical Engineering ' ;; 'Information Technology' | 'Electronics and Communication') echo -n 'Information Technology or Electronics and Communication ' ;; *) echo -n 'Invalid ' ;; esac done 

3. Jede der Zeilen wird im Folgenden beschrieben:

  • Die erste Zeile im Skript beginnt mit dem Shebang (#!).
  • Es weist das Betriebssystem an, einen bestimmten Interpreter zum Parsen des Skripts zu verwenden.
  • Wir haben ein Array DEPARTMENT mit drei String-Literalen initialisiert.
  • Jetzt iterieren wir mit Hilfe einer for-Schleife über das Array von Elementen.
  • Jeder Ausdruck wurde durch die case-Anweisung behandelt.
  • Die letzte Zeile, esac, wurde zum Beenden der case-Anweisung verwendet.

4. Speichern Sie das Skript und machen Sie es ausführbar.

chmod +x department.sh 

5. Führen Sie das Skript aus.

./department.sh 

Ausgabe:

408

Beispiel 4: Benutzer mit Ja oder Nein auffordern

Sie können den unten aufgeführten Anweisungen folgen:

1. Öffnen Sie das Terminal (Strg + Alt + T) und erstellen Sie das Skript:

department.sh 

2. Fügen Sie diese Anweisungen zum Skript hinzu:

#!/bin/bash echo -n 'Are you a student? [yes or no]: ' read response case $response in 'Y' | 'y' | 'YES' | 'Yes' | 'yes') echo -n 'Yes, I am a student.' ;; 'N' | 'n' | 'No' | 'NO' | 'no' | 'nO') echo -n 'No, I am not a student.'; ;; *) echo -n 'Invalid input' ;; esac 

3. Jede der Zeilen wird im Folgenden erklärt:

  • Die erste Zeile im Skript beginnt mit dem Shebang (#!).
    • Es weist das Betriebssystem an, einen bestimmten Interpreter zum Parsen des Skripts zu verwenden.
  • Der Benutzer wird gefragt: Sind Sie Student? [ja oder nein].
  • Nun erfolgt eine Antwort durch den Benutzer über die Tastatur.
  • Die Ausgabe der Antwort wurde über eine Case-Anweisung abgewickelt.
  • Die letzte Zeile, esac, wurde zum Beenden der case-Anweisung verwendet.

4. Speichern Sie das Skript und machen Sie es ausführbar.

chmod +x department.sh 

5. Führen Sie das Skript mit dem folgenden Befehl aus.

./department.sh 

Ausgabe:

409

Beispiel 5: Senden eines Signals an einen Prozess

Sie können den unten aufgeführten Anweisungen folgen:

1. Öffnen Sie das Terminal (Strg + Alt + T) und erstellen Sie das Skript:

signals.sh 

2. Fügen Sie diese Anweisungen zum Skript hinzu:

#!/bin/bash if [ $# -lt 2 ] then echo 'Usage : $0 Signalnumber PID' exit fi # Case statement # Signal number (expression) case '$1' in 1) echo 'Sending SIGHUP signal.....' kill -SIGHUP $2 ;; 2) echo 'Sending SIGINT signal.....' kill -SIGINT $2 ;; 3) echo 'Sending SIGQUIT signal.....' kill -SIGQUIT $2 ;; 4) echo 'Sending SIGKILL signals.....' kill -SIGKILL $2 ;; *) echo 'Signal number $1 has not been processed' ;; esac 

3. Jede der Zeilen wird im Folgenden erklärt:

  • $1 ist die Signalnummer und $2 ist die Prozess-ID.
  • Um ein Signal an die angegebene Prozess-ID zu übergeben oder zu senden, verwenden wir den Kill-Befehl.
  • Dadurch wird der Sleep-Befehl einige Sekunden lang ausgeführt.
  • Im Standardfall wird der Hauptteil des optionalen letzten Vergleichs *) ausgeführt.

4. Speichern Sie das Skript.

5. Führen Sie das Skript mit dem folgenden Befehl aus.

./signals.sh 

Ausgabe:

$ sleep 10000 $ ps -a | grep sleep 23277 pts/2 00:00:00 sleep $ ./signals.sh 9 31231 Sending SIGKILL signal $ sleep 10000 Killed