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

Syntax und Beispiele für Bash-Case-Anweisungen

Einführung

Der bash case -Anweisung ist die einfachste Form der Bedingung if elif else. Der case -Anweisung vereinfacht komplexe Bedingungen mit mehreren verschiedenen Auswahlmöglichkeiten. Diese Anweisung ist einfacher zu pflegen und besser lesbar als verschachteltes if Aussagen.

Der case -Anweisung testet den Eingabewert, bis sie das entsprechende Muster findet, und führt den mit diesem Eingabewert verknüpften Befehl aus. Daher ist es eine ausgezeichnete Wahl zum Erstellen von Menüs, in denen Benutzer eine Option auswählen, die eine entsprechende Aktion auslöst.

In diesem Tutorial lernen Sie den Bash-case kennen Aussage Grundlagen und wie man es in Shell-Skripten verwendet.

Voraussetzungen

  • Eine Maschine, auf der Linux ausgeführt wird.
  • Zugriff auf die Befehlszeile.
  • Ein Texteditor wie vi/vim.

Syntax der Bash-Case-Anweisung

Der bash case -Anweisung hat die folgende Syntax:

case $variable in
pattern-1)
  commands;;
pattern-2)
  commands;;
pattern-3)
  commands;;
pattern-N)
  commands;;
*)
  commands;;
esac

Der case Anweisung beginnt mit dem case Schlüsselwort gefolgt von $variable und der in Stichwort. Die Anweisung endet mit dem case Schlüsselwort rückwärts - esac .

$variable

  • Das Skript vergleicht die Eingabe $variable gegen die Muster in jeder Klausel, bis eine Übereinstimmung gefunden wird.

Muster

  • Ein Muster und seine Befehle bilden eine Klausel , die mit ;; endet .
  • Muster unterstützen Sonderzeichen.
  • Der ) Operator beendet eine Musterliste.
  • Der | Operator trennt mehrere Muster.
  • Das Skript führt die Befehle aus, die dem ersten Muster entsprechen, das mit der Eingabe $variable übereinstimmt .
  • Das Sternchen * Das Symbol definiert den Standardfall, normalerweise im endgültigen Muster.

Exit-Status

Das Skript hat zwei Exit-Status:

  • 0 . Der Rückgabestatus, wenn die Eingabe keinem Muster entspricht.
  • Ausgeführter Befehlsstatus . Wenn der Befehl die Eingabevariable mit einem Muster abgleicht, wird der Exit-Status des ausgeführten Befehls zurückgegeben.

Beispiele für Bash-Case-Anweisungen

Dieser Abschnitt zeigt praktische Beispiele für die Verwendung des bash case Aussage.

Beispiel 1:Eine Beschreibung für jede Option ausgeben

Das folgende Beispiel ist ein Skript, das den Benutzer eine Farbe auswählen lässt und einen Kommentar anzeigt, der der Eingabe mit dem echo-Befehl entspricht.

Befolgen Sie die nachstehenden Anweisungen:

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

vi color.sh

2. Fügen Sie dem Skript die folgenden Zeilen hinzu:

#!/bin/bash
echo "Which color do you like best?"
echo "1 - Blue"
echo "2 - Red"
echo "3 - Yellow"
echo "4 - Green"
echo "5 - Orange"
read color;
case $color in
  1) echo "Blue is a primary color.";;
  2) echo "Red is a primary color.";;
  3) echo "Yellow is a primary color.";;
  4) echo "Green is a secondary color.";;
  5) echo "Orange is a secondary color.";;
  *) echo "This color is not available. Please choose a different one.";; 
esac

Jede der Zeilen hat die folgende Rolle:

  • Die erste Zeile in jedem Skript ist normalerweise der Shebang (#! ), die dem Betriebssystem mitteilt, welcher Interpreter zum Analysieren der Datei verwendet werden soll.
  • Zeilen 2-7 sind das Optionsmenü, das dem Benutzer zur Auswahl angezeigt wird.
  • Die read color; Variable fordert den Benutzer zu einer Antwort auf und speichert diese.
  • Der case -Anweisung enthält die möglichen Antworten, die der Eingabe des Benutzers entsprechen. In diesem Beispiel ist die Ausgabe das echo Befehlsausgabe.
  • Die letzte Zeile, esac , beendet den case Erklärung.

3. Speichern Sie das Skript und beenden Sie vi mit dem folgenden Befehl:

:wq

4. Stellen Sie vor dem Ausführen jedes Skripts sicher, dass Sie es mit chmod ausführbar machen:

chmod +x color.sh

5. Führen Sie das Skript aus:

./color.sh

Das Skript bietet das Optionsmenü an und gibt je nach gewählter Option eine andere Meldung aus.

Beispiel 2:Verwenden mehrerer Muster

Der case -Anweisung ermöglicht die Verwendung mehrerer Muster in jeder Klausel. Wenn der Ausdruck mit den angegebenen Mustern übereinstimmt, führt das Skript die Befehle in dieser Klausel aus.

Dieses Beispielskript fordert den Benutzer auf, einen Monat einzugeben, und gibt die Anzahl der Tage aus. Es gibt drei mögliche Antworten:

  • 30 Tage.
  • 31 Tage.
  • 28 oder 29 Tage für Februar.

Führen Sie die folgenden Schritte aus, um das Skript zu erstellen:

1. Erstellen Sie das Skript month.sh durch Ausführen von:

vi month.sh

2. Geben Sie die folgenden Zeilen ein und speichern Sie das Skript:

#!/bin/bash
shopt -s nocasematch
echo "Enter the name of a month."
read month
case $month in
  February)
 
echo "There are 28/29 days in $month.";;
  April | June | September | November)
echo "There are 30 days in $month.";;
  January | March | May | July | August | October | December)
echo "There are 31 days in $month.";;
  *)
echo "Unknown month. Please check if you entered the correct month name: $month";;
esac

Im obigen Beispiel:

  • Der shopt Befehl mit dem -s nocasematch Die Option reduziert die Fehlerwahrscheinlichkeit, da die Groß- und Kleinschreibung beim Musterabgleich nicht berücksichtigt wird.
  • Das Pipe-Symbol | trennt die Muster in jeder der Klauseln.

3. Machen Sie das Skript ausführbar:

chmod +x month.sh

4. Führen Sie das Skript aus:

./month.sh

Das Skript ignoriert Groß- und Kleinschreibung und gibt die korrekte Anzahl der Tage im ausgewählten Monat aus.

Beispiel 3:for-Schleifen

Verwenden Sie einen for Schleife in case Anweisungen, wenn viele Ausdrücke verarbeitet werden müssen. Das folgende Skript gibt alle Dateitypen aus einem Verzeichnis zurück.

Führen Sie die folgenden Schritte aus:

1. Erstellen Sie das Shell-Skript:

vi filelist.sh

2. Geben Sie die folgenden Zeilen ein und speichern Sie dann das Skript:

#!/bin/bash
for file in $(ls)
do
Extension=${file##*.}
case "$Extension" in
  sh) echo "Shell script: $file";;
  md) echo "A markdown file: $file";;
  png) echo "PNG image file: $file";;
  txt) echo "A text file: $file";;
  zip) echo "An archive: $file";;
  conf) echo "A configuration file: $file";;
  py) echo "A Python script: $file";;
  *) echo "Unknown file type: $file";;
esac
done

Im obigen Beispiel:

  • Die ls Befehl zieht eine Dateiliste aus dem Verzeichnis.
  • Der for Schleife wendet Dateiglobbing an, um die Erweiterung jeder Datei zu extrahieren.

3. Machen Sie das Skript ausführbar:

chmod +x filelist.sh

4. Führen Sie das Skript aus:

./filelist.sh

Das Skript identifiziert jeden Dateityp, der im aktuellen Verzeichnis vorhanden ist.

Beispiel 4:Adressbuch erstellen

Verwenden Sie den case Anweisung zum Erstellen einer einfachen Datenbank und zum schnellen Generieren der angeforderten Informationen. Das folgende Beispiel gibt den Namen, die E-Mail-Adresse und die Adresse der ausgewählten Person aus:

1. Erstellen Sie das Skript:

vi phonebook.sh

2. Fügen Sie die folgenden Zeilen hinzu und speichern Sie das Skript:

#!/bin/bash
echo "Choose a contact to display information:"
echo "[C]hris Ramsey"
echo "[J]ames Gardner"
echo "[S]arah Snyder"
echo "[R]ose Armstrong"
read person
case "$person" in
  "C" | "c" ) echo "Chris Ramsey"
echo "[email protected]"
echo "27 Railroad Dr. Bayside, NY";;
  "J" | "j" ) echo "James Gardner"
echo "[email protected]"
echo "31 Green Street, Green Cove Springs, FL";;
  "S" | "s") echo "Sarah Snyder"
echo "[email protected]"
echo "8059 N. Hartford Court, Syosset, NY";;
  "R" | "r") echo "Rose Armstrong"
echo "[email protected]"
echo "49 Woodside St., Oak Forest, IL";;
  *) echo "Contact doesn't exist.";;
esac

3. Ändern Sie das Skript:

chmod +x phonebook.sh

3. Führen Sie das Skript aus:

./phonebook.sh

Das Skript gibt die Kontaktdaten der ausgewählten Person aus. Wenn Sie eine nicht aufgeführte Option auswählen, wird der Benutzer benachrichtigt, dass der Kontakt nicht existiert.

Beispiel 5:Zeichentyp prüfen

Das folgende Beispiel zeigt, wie der case verwendet wird Anweisung, um zu prüfen, welchen Zeichentyp der Benutzer eingegeben hat.

Führen Sie die folgenden Schritte aus:

1. Erstellen Sie das Skript:

vi character.sh

2. Fügen Sie die folgenden Zeilen hinzu und speichern Sie das Skript:

#!/bin/bash
echo "Enter a character:"
read var
case $var in
  [[:lower:]) echo "You entered a lowercase character.";;
  [[:upper:]]) echo "You entered an uppercase character.";;
  [0-9]) echo "You entered a digit.";;
  ?) echo "You entered a special character.";;
  *) echo "You entered multiple characters.";;
esac

Im obigen Beispiel:

  • Die $var Steuervariable speichert die Eingabe.
  • Anstatt alle möglichen Kombinationen für den Vergleich einzugeben, verwenden Sie die eckigen Klammern [] um einen Zeichenbereich zu bezeichnen. Verwenden Sie doppelte eckige Klammern [[]] für POSIX-Bereiche. if-else erfordert die Eingabe jeder Zeichenbedingung einzeln.
  • Der ? character deckt Zeichen ab, die keine Kleinbuchstaben, Großbuchstaben oder Ziffern sind. Es ersetzt nur ein Zeichen, im Gegensatz zu * die alles andere ersetzt, was nicht durch die obigen Bedingungen abgedeckt ist.

3. Ändern Sie die Berechtigungen, um das Skript ausführbar zu machen:

chmod +x character.sh

4. Führen Sie das Skript aus:

./character.sh

Die Ausgabe gibt den Typ des eingegebenen Zeichens an, nachdem es mit den angegebenen Bedingungen abgeglichen wurde.


Linux
  1. Programmieren mit Bash:Syntax und Tools

  2. Bash For Loop Guide und Beispiele

  3. Der Linux-AWK-Befehl – ​​Syntaxbeispiele für Linux und Unix

  4. Bash-If-Else-Anweisung mit Beispielen

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

Bash-Skripting – Case-Statement

So arbeiten Sie mit Case-Anweisungen in Bash-Skripten

Bash If Else Syntax mit Beispielen

Bash If Else und andere bedingte Anweisungen verstehen

Bash-Variablen-Tutorial – 6 praktische Bash-Beispiele für globale und lokale Variablen

Beispiele und Verwendung von Grep mit Berücksichtigung der Groß- und Kleinschreibung