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

Bash If Else und andere bedingte Anweisungen verstehen

Wenn Sie jemals ein Bourne Again Shell (Bash)-Skript geschrieben haben, wissen Sie, dass sie schnell komplex werden können, wenn Sie ihnen mehr Logik hinzufügen. Wie vermeiden Sie es, Ihre Skripte durcheinander zu bringen? Bedingte Anweisungen, wie Bash, wenn sonst, sind eine Möglichkeit, Logik hinzuzufügen, sodass Ihr Skript Entscheidungen basierend auf bestimmten Bedingungen treffen kann.

In diesem Tutorial lernen Sie, wie Sie if-else- und case-Anweisungen von Bash verwenden, um ein fehlerfreies Bash-Skript zu schreiben. All dies mit einigen Best Practices zum Schreiben von Bash-Skripten.

Bereit? Lesen Sie weiter und bringen Sie Ihr Bash-Scripting auf die nächste Stufe!

Voraussetzungen

Dieses Tutorial wird eine praktische Demonstration sein. Wenn Sie uns folgen möchten, stellen Sie sicher, dass Sie dies getan haben

  • Ein Linux- oder Windows-System mit installiertem Bash – Windows Subsystem for Linux (WSL) ist eine hervorragende Option für Windows-Benutzer.
  • Ein Code-/Texteditor.

Warum Bedingungsanweisungen verwenden?

Bedingte Anweisungen sind eines der wichtigsten Werkzeuge beim Bash-Skripting, da sie es Ihnen ermöglichen, Entscheidungen in Ihren Skripten basierend auf bestimmten Bedingungen zu treffen.

Beispielsweise könnten Sie eine bedingte Anweisung verwenden, um zu prüfen, ob eine Datei existiert, bevor Sie versuchen, sie zu löschen. Oder Sie könnten einen verwenden, um zu überprüfen, ob ein Benutzer die Berechtigung hat, auf eine bestimmte Ressource zuzugreifen.

Bedingte Anweisungen machen Ihre Skripte flexibler und leistungsfähiger. Stellen Sie sich vor, Sie schreiben ein Skript, um alle Dateien in einem Verzeichnis zu löschen. Mit einer bedingten Anweisung können Sie Dateien löschen, die älter als 30 Tage sind.

Die IF-Anweisung verstehen

Genug mit der Einführung in das Bash-Skript, und machen Sie sich die Hände schmutzig. Werfen Sie einen genaueren Blick auf eine der beliebtesten bedingten Anweisungen, den if Aussage.

Die if -Anweisung ist die einfachste Möglichkeit, Bedingungen zu Ihren Bash-Skripten hinzuzufügen, mit der folgenden Syntax:

  • Beginnend mit dem Schlüsselwort if spezifizieren Sie die zu erfüllenden [[Bedingungen]]. Der Code innerhalb der if-Anweisung wird dann ausgeführt und die Anweisung endet mit dem Schlüsselwort fi.
  • Das Schlüsselwort then trennt die Bedingung vom Code (Anweisung), der ausgeführt wird, wenn die Bedingung erfüllt ist. Dieser Code kann mehrere Zeilen lang sein, wenn Sie ein Semikolon (;) als Zeilentrenner anhängen.
if [[ condition ]]; then
	statement
fi

Angenommen, Sie erstellen ein Skript, das nach dem korrekten Benutzernamen für Ihr System fragt, bevor Sie sich anmelden:

1. Öffnen Sie Ihr Terminal und erstellen Sie eine neue bash_if_demo.sh Datei mit einem Texteditor Ihrer Wahl.

nano bash_if_demo.sh

2. Kopieren Sie den folgenden Code und fügen Sie ihn in Ihre bash_if_demo.sh ein Datei, speichern Sie die Änderungen und schließen Sie die Datei.

Der folgende Code fragt nach einem Benutzernamen, und wenn der richtige eingegeben wird, druckt der Code eine „Willkommen zurück“-Nachricht zusammen mit dem aktuellen Datum und der Uhrzeit.

Sie können das Datum und die Uhrzeit, zu der der Benutzer versucht, auf das System zuzugreifen, für weitere Analysen protokollieren.

Die erste Zeile #!/bin/bash (shebang) teilt dem System mit, welcher Interpreter verwendet werden soll, um den Rest des Codes in der Datei auszuführen. In diesem Fall verwenden Sie bash.

#!/bin/bash
# Prints a question to the screen.
echo "Whats your name?"
# Reads keyboard input and stores it in the $NAME variable
read NAME
# Starts the if statement - checks to see if the $NAME variable's value 
# is equal to ATA. If it is, the code inside runs. Otherwise, the code will not run.
if [ $NAME == "ATA" ]
then
	# Prints a message to the screen, only if the value stored in the $NAME variable 
	# is equal to ATA.
  echo "Welcome back ATA!"
fi
# Prints the current date and time to the screen. Since this line is outside 
# of the if statement, it always runs regardless of the $NAME variable's value.
date

3. Führen Sie zuletzt den folgenden Befehl aus, um das Skript bash_if_demo.sh auszuführen und zu sehen, was es tut.

bash bash_if_demo.sh

Beachten Sie, dass Sie unabhängig von der Bash-Shell, die Sie verwenden, bash vor den Namen des Skripts anhängen müssen, damit das System Bash verwendet, um Ihren Code auszuführen.

Geben Sie ATA ein und drücken Sie dann die Eingabetaste, und Sie sehen die folgende Ausgabe.

Wenn Sie etwas anderes als „ATA.“ eingeben, erhalten Sie keine Willkommensnachricht, sondern nur das aktuelle Datum und die Uhrzeit. Wieso den? Weil Ihre if-Anweisung nach dem exakten Wert sucht, der in der $NAME-Variablen gespeichert ist.

Beachten Sie, dass bei if-Anweisungen zwischen Groß- und Kleinschreibung unterschieden wird. Also sind „ata“, „aTa“, „Ata“ usw. nicht dasselbe wie „ATA“.

Das Testen Ihres Codes mit verschiedenen Eingaben ist eine bewährte Methode, um sicherzustellen, dass sich der Code wie erwartet verhält.

Verschachtelte If-Anweisungen verstehen

Sie haben gerade die Grundlagen des Schreibens von if-Anweisungen gelernt, und das ist gut genug, wenn Sie keinen komplexen Code schreiben. Versuchen Sie in diesem Fall, eine verschachtelte if-Anweisung zu schreiben, um Ihre Bedingungsanweisungen zu erweitern. Eine verschachtelte if-Anweisung ist eine if-Anweisung, die eine oder mehrere if-Anweisungen enthält.

Nachfolgend finden Sie die grundlegende Syntax für verschachtelte if-Anweisungen, wobei:

  • if [[ conditions ]] – Die äußere if Anweisung, die Code enthält, der nur ausgeführt wird, wenn die Bedingung erfüllt ist. In diesem Fall ein weiterer if Erklärung).
  • if [[ condition2 ]] – Die innere if Anweisung, die Code enthält, der nur ausgeführt wird, wenn beide Bedingungen erfüllt sind.
if [[ conditions

]]; then
	if [[ condition2 ]]; then
		statement
	fi
fi

Erhöhen Sie den vorherigen Code um eine Stufe, indem Sie einen if setzen Anweisung, die nach einem Passwort fragt:

1. Erstellen Sie eine neue Datei mit dem Namen bash_nested_if_demo.sh mit Ihrem Texteditor.

nano bash_nested_if_demo.sh

2. Füllen Sie den folgenden Code in bash_nested_if_demo.sh aus Datei, speichern Sie die Änderungen und schließen Sie die Datei.

Der folgende Code fragt nach einem Namen und einem Passwort. Wenn beide Bedingungen für den Namen und das Kennwort erfüllt sind, gibt der Code eine Meldung aus. Wenn nicht, druckt der Code außer dem aktuellen Datum und der Uhrzeit keine Nachrichten.

#!/bin/bash
# Prints a message asking for a name.
echo "Whats your name?"
# Reads input from the keyboard.
read NAME
# Check if the $NAME variable's value is equal to "ATA."
if [ $NAME == "ATA" ]
 then
 # Prints a message asking for a password.
 echo "Password"
 # Reads input from the keyboard.
 read Password
   # Nested if statement - Check if the $Password variable's value equals "pwd123."
   if [ "$Password" == "pwd123" ]; then
     # Prints a message if both conditions for name and password are met.
     echo "You logged in as ATA"
   fi
fi
# Prints the current date and time
date

3. Führen Sie zuletzt den folgenden Befehl aus, um bash_nested_if_demo.sh auszuführen Skript.

bash bash_nested_if_demo.sh

Geben Sie ATA ein für den Namen und pwd123 für das Passwort.

Wenn Sie etwas anderes als „ATA“ oder „pwd123“ eingeben, erhalten Sie nur das aktuelle Datum und die aktuelle Uhrzeit. Wieso den? Beide Bedingungen in Ihren verschachtelten if-Anweisungen müssen erfüllt sein.

IF ELSE-Anweisungen verstehen

Die if-Anweisung ist ein mächtiges und häufig verwendetes Werkzeug in der Bash-Skripterstellung. if-Anweisungen können Ihnen helfen, Entscheidungen in Ihren Skripten zu treffen. Es ist jedoch erwähnenswert, dass die Verwendung von if-Anweisungen einige Nachteile hat.

Der Hauptnachteil besteht darin, dass if-Anweisungen Ihren Code schwer lesbar und pflegbar machen können, insbesondere wenn Sie if-Anweisungen in anderen if-Anweisungen verschachtelt haben. Dieser Skriptstil kann zu einem sogenannten „Spaghetti-Code“ führen, der schwer zu lesen und zu verstehen ist.

Wie sorgen Sie also dafür, dass Ihr Code nicht kompliziert aussieht? Verwenden Sie if else-Anweisungen anstelle einer Reihe verschachtelter if-Anweisungen. Mit dem Schlüsselwort else können Sie Code angeben, der ausgeführt wird, wenn die Bedingung in der if-Anweisung nicht erfüllt ist.

Sehen Sie sich die folgende Syntax der IF ELSE-Anweisung an, wobei:

  • if [[ conditions ]] – Die if -Anweisung, die den Code (statement1 ), die ausgeführt wird, wenn die Bedingung erfüllt ist.
  • else – Die else -Anweisung enthält den Code (statement2 ), die ausgeführt wird, wenn die Bedingung in if Aussage nicht erfüllt.
if [[ conditions ]]; then
	statement1
else
	statement2
fi

Angenommen, Sie erstellen ein Zahlenspiel, das eine Zufallszahl als Eingabe des Benutzers verwendet:

1. Erstellen Sie eine neue Datei namens bash_if_else_demo.sh.

nano bash_if_else_demo.sh

2. Fügen Sie Ihrer bash_if_else_demo.sh den folgenden Code hinzu Datei, speichern Sie die Änderungen und schließen Sie die Datei.

Der folgende Code druckt eine Nachricht, die nach der Glückszahl des Benutzers fragt, und druckt die Nachricht Sie haben gewonnen, wenn die Eingabe des Benutzers eine gerade Zahl ist. Andernfalls (else) druckt der Code die Nachricht Sie haben verloren, wenn die Eingabe des Benutzers eine ungerade Zahl ist.

#!/bin/bash
# Prints a message asking for the user's lucky number
echo -n "Enter You Lucky Number:"
# Reads the keyboard input.
read var
# Checks if the value is an even number.
if [ $((var%2)) == 0 ]; then
 # Prints a message if the condition is met
 echo "You Won!"
else
 # Prints a message if the condition is not met
 echo "You Lost!"
fi

3. Führen Sie nun den folgenden Befehl aus, um das Skript bash_if_else_demo.sh auszuführen.

bash bash_if_else_demo.sh

Wenn Sie eine gerade Zahl eingeben, wird die Meldung „Sie haben gewonnen!“ angezeigt. Drucke, wie Sie unten sehen können. Wenn Sie jedoch eine ungerade Zahl eingeben, wird die Meldung „Sie haben verloren!“ angezeigt. druckt stattdessen.

Verbessern Sie Ihren Code, indem Sie eine weitere Anweisung hinzufügen, die prüft, ob der Benutzer stattdessen einen Buchstaben oder ein Sonderzeichen eingibt.

Fallaussagen verstehen

Bisher haben Sie sich zwei Möglichkeiten angesehen, Entscheidungen in Ihren Bash-Skripten zu treffen:if Anweisungen und else Aussagen. Aber es gibt eine andere Möglichkeit, Entscheidungen in Ihren Skripten zu treffen, die case Aussage.

Die case -Anweisung ähnelt der if -Anweisung, da Sie damit Code angeben können, der basierend auf einer Bedingung ausgeführt wird. Aber das Gute an der case-Anweisung ist, dass Sie eine präzisere und prägnantere Syntax haben als die verschachtelte if Aussage.

Die Syntax für die case-Anweisung lautet wie folgt, wobei:

  • case $VAR in – Die case Anweisung, die den $VAR akzeptiert Variable testet gegen die von Ihnen angegebenen Muster, bis eine Übereinstimmung gefunden wird.
  • pattern1) und pattern2) -Die zu testenden Muster, die den Code ausführen (statement1 oder statement2 ), sobald ein Muster gefunden wurde.
  • esac – Beendet die Case-Anweisung.
case $VAR in
pattern1)
    statement1
    ;;
pattern2)
    statement2
    ;;
esac

Angenommen, Sie benötigen ein Skript, das Benutzer auffordert, ihre Ländernamen einzugeben und mit einer Nachricht zu antworten, die die in diesem Land gesprochene Sprache anzeigt.

1. Erstellen Sie eine neue Datei namens bash_case_demo.sh.

nano bash_case_demo.sh

2. Füllen Sie den folgenden Code in bash_case_demo.sh aus Datei, speichern Sie die Änderungen und schließen Sie die Datei.

Der folgende Code fragt den Benutzer nach einem Ländernamen und gibt die offizielle Sprache dieses Landes basierend auf den Mustern in einer Case-Anweisung aus.

3#!/bin/bash
# Prints a message asking for the user's country name
echo -n "Enter the Country You Live In:"
# Reads keyboard input.
read var
# Prints a message showing the official language in the user's country ($var)
# based on the pattern in the case statement.
echo -n "The official language of $var is "

# Case statement - checks if the user's input ($var) matches the patterns.
case $var in
# Define patterns that print the user's country's official language.
 US)
  echo -n "English"
  ;;

 Canada)
  echo -n "English | French"
  ;;

 Algeria | Bahrain | Egypt| Jordan)
  echo -n "Arabic"
  ;;

 *)
  echo -n "unknown"
  ;;
esac

3. Führen Sie abschließend den folgenden Befehl aus, um das Skript bash_case_demo.sh auszuführen.

bash bash_case_demo.sh

Unten können Sie sehen, dass die entsprechende offizielle Sprache gedruckt wird, je nachdem, welches Land der Benutzer eingegeben hat.

Wenn das eingegebene Land mit keinem der Muster übereinstimmt, wird das Standardmuster (*) verwendet und die Meldung „Unbekannt“ gedruckt.

Schlussfolgerung

In diesem Tutorial haben Sie Ihre ersten Schritte unternommen, um zu lernen, wie Sie bedingte Anweisungen in Bash verwenden. Sie haben gelernt, komplexen Code mit Bash-Anweisungen if, if-else und case zu vereinfachen.

Sie sind jetzt sicher genug, um bedingte Anweisungen zu verwenden, um Bash-Skripte effizienter und mit weniger Fehlern zu schreiben.

Aber hören Sie hier nicht auf! Es gibt noch mehr Dinge, die bedingte Anweisungen in Bash bieten können. Vielleicht lernen Sie etwas über die Bash-Anweisung elif und &&, OR und || Betreiber? Mit etwas Übung schreiben Sie im Handumdrehen Bash-Skripte wie ein Profi!


Linux
  1. So verwenden Sie die Bedingungsanweisung if else in Bash-Skript

  2. 2>&1 und Verständnis der Redewendungen anderer Shell-Skripte

  3. Tc Qdisc und Iperf verstehen?

  4. 4 Beispiele für Awk-If-Anweisungen ( if, if else, if else if, :? )

  5. Bash/sh 'if else'-Anweisung

Bash Exit-Befehl und Exit-Codes

Bash-Skripting – Bedingte Anweisungen

Bash-Skripting – Case-Statement

So verwenden Sie bedingte Anweisungen in Bash-Skripten

Bash If Else Syntax mit Beispielen

Bash-Anfängerserie Nr. 7:Entscheidungsfindung mit If Else- und Case-Anweisungen