Verständnis von Bash If Else und anderen bedingten Anweisungen

Das Schreiben eines Bourne Again Shell (Bash) Skripts kann eine lohnende Erfahrung sein, insbesondere wenn Sie Logik hinzufügen, um seine Robustheit zu gewährleisten. Eine Möglichkeit, diese Logik zu integrieren und Ihr Skript intelligenter zu machen, besteht darin, bedingte Anweisungen zu verwenden, insbesondere „Bash if else“.

In diesem tiefen Tauchgang werden Sie die Kraft und Feinheiten der Bash if-else und case Anweisungen erfassen. Dies wird Ihnen helfen, fehlerfreie, intelligente Bash-Skripte zu erstellen. Wir werden auch einige bewährte Verfahren einstreuen, um sicherzustellen, dass Sie wie ein Profi skripten.

Bereit? Tauchen Sie ein und verbessern Sie Ihr Bash-Skripting-Können!

Die Bühne bereiten: Voraussetzungen

Um das Beste aus diesem Tutorial herauszuholen, sollten einige Grundlagen vorhanden sein:

  • A Linux or Windows system armed with Bash. For those on Windows, the Windows Subsystem for Linux (WSL) is your best bet.
  • A code/text editor to write and refine your ‘bash if else’ scripts.

Warum sollten Sie „bash if else“ Anweisungen nutzen?

Warum werden bedingte Anweisungen im Bash-Skripting so verehrt? Einfach ausgedrückt, verleihen sie Ihren Skripts Entscheidungsfähigkeiten basierend auf vordefinierten Bedingungen.

Zum Beispiel können Sie „bash if else“ verwenden, um zu überprüfen, ob eine Datei vorhanden ist, bevor Sie versuchen, sie zu löschen. Alternativ möchten Sie möglicherweise prüfen, ob ein Benutzer über die erforderlichen Berechtigungen verfügt, bevor Sie ihm den Zugriff auf eine Ressource gewähren.

Das Einbetten von Skripten mit ‚bash if else‘-Strukturen verstärkt nicht nur ihre Flexibilität, sondern auch ihre Wirksamkeit. Stellen Sie sich ein Skript vor, das darauf abzielt, alle Dateien in einem Ordner zu löschen. Mit ‚bash if else‘ können Sie gezielt nur diejenigen Dateien löschen, die älter als 30 Tage sind, während der Rest erhalten bleibt.

Einblick in die ‚bash if else‘-Anweisung

Jetzt lassen Sie uns die Einführung hinter uns und die Hände schmutzig machen. Wir werden mit einer der universell akzeptierten bedingten Anweisungen beginnen: der ‚bash if else‘-Anweisung.

Im Kern ist das ‚bash if else‘ ein Tor, um Bedingungen in Ihre Bash-Skripte einzufügen. Beachten Sie seine elegante Syntax unten:

  • Es beginnt mit dem if-Schlüsselwort, gefolgt von den Bedingungen, die innerhalb von [[ ]] eingeschlossen sind. Anschließend wird der im ‚bash if else‘-Statement enthaltene Code ausgeführt, und es endet mit dem fi-Schlüsselwort.
  • Das then-Schlüsselwort trennt die Bedingung von den Aktionen (oder Anweisungen), die ausgeführt werden, wenn die Bedingungen erfüllt sind. Dieser Aktionsblock kann mehrere Zeilen umfassen, die durch Semikolons (;) getrennt sind.
if [[ condition ]]; then
	statement
fi

Stellen Sie sich vor, Sie erstellen ein Anmeldesystem. Es fordert den richtigen Benutzernamen an, bevor der Zugriff gewährt wird:

1. Starten Sie Ihr Terminal und erstellen Sie eine neue bash_if_demo.sh Datei unter Verwendung Ihres bevorzugten Texteditors. Dies wird unser Spielplatz sein, um ‚bash if else‘-Anweisungen zu verstehen.

nano bash_if_demo.sh

2. Fügen Sie das unten stehende Beispiel für „bash if else“ in Ihre Datei bash_if_demo.sh ein. Sobald dies eingefügt ist, speichern Sie die Änderungen und beenden Sie den Editor.

Das Beispiel-Skript „bash if else“ fordert nach einem Benutzernamen. Wenn der erwartete Benutzername eingegeben wird, wird eine Begrüßungsnachricht angezeigt, ergänzt durch das aktuelle Datum und die aktuelle Uhrzeit.

Die Aufrechterhaltung einer Aufzeichnung über das Datum und die Uhrzeit von Benutzerzugriffsversuchen kann für zukünftige Analysen von unschätzbarem Wert sein.

Die einleitende Zeile #!/bin/bash (auch als Shebang bekannt) gibt dem System an, welcher Interpreter für die Verarbeitung des nachfolgenden Codes im Skript verwendet werden soll. Hier haben wir uns für „bash“ entschieden.

#!/bin/bash
# Gibt eine Frage auf dem Bildschirm aus.
echo "Whats your name?"
# Nimmt die Tastatureingabe auf und speichert sie in der Variable $NAME
read NAME
# Startet die "bash if else"-Anweisung - überprüft, ob der Wert in $NAME
# mit "ATA" übereinstimmt. Wenn dies der Fall ist, wird der eingefügte Code ausgeführt. Andernfalls wird er übersprungen.
if [ $NAME == "ATA" ]
then
  # Zeigt eine Nachricht nur an, wenn der Wert in $NAME "ATA" entspricht.
  echo "Welcome back ATA!"
fi
# Außerhalb von "bash if else" wird immer das aktuelle Datum und die aktuelle Uhrzeit angezeigt.
date

3. Nun wollen wir unser ‚bash if else‘ Skript auf die Probe stellen. Führen Sie den folgenden Befehl aus:

bash bash_if_demo.sh

Denken Sie daran, unabhängig von der verwendeten Bash-Shell-Variante Ihren Skriptnamen mit ‚bash‘ zu präfixieren. Dadurch verwendet das System Bash zur Skriptausführung.

Geben Sie „ATA“ ein und drücken Sie die Eingabetaste. Das Ergebnis sollte wie folgt aussehen:

Demonstration of the bash_if_demo.sh ‘bash if else’ Script

Wenn Sie etwas anderes als „ATA“ eingeben, wird die Begrüßungsnachricht nicht im Ausgabefenster angezeigt. Es werden nur das aktuelle Datum und die aktuelle Uhrzeit angezeigt. Dieses Verhalten ist auf die ‚bash if else‘-Anweisung zurückzuführen, die auf eine genaue Übereinstimmung mit dem Wert in der Variablen $NAME prüft.

Beachten Sie, dass ‚bash if else‘-Anweisungen Groß- und Kleinschreibung beachten. Daher sind „ata“, „aTa“, „Ata“ usw. von „ATA“ unterschiedlich.

Outcome on Entering a Non-matching Value

Testen Sie Ihre ‚bash if else‘-Skripte kontinuierlich mit verschiedenen Eingaben. Dadurch wird sichergestellt, dass die Skripte wie erwartet funktionieren.

Tiefere Einblicke: Verschachtelte ‚bash if else‘-Anweisungen

Sie haben bereits die Grundlagen des Erstellens von ‚bash if else‘-Anweisungen verstanden. Während dieses grundlegende Wissen für einfache Aufgaben ausreicht, erfordern komplexe Skripte oft fortgeschrittene Konstrukte. Hier kommen verschachtelte ‚bash if else‘-Anweisungen ins Spiel. Grundsätzlich handelt es sich um eine ‚if‘-Anweisung, die eine oder mehrere zusätzliche ‚if‘-Anweisungen enthält.

Die folgende Struktur veranschaulicht die grundlegende Syntax für verschachtelte ‚bash if else‘-Anweisungen. Hier umfasst die äußere if [[ Bedingungen ]]-Klausel ausführbaren Code nur bei Erfüllung der Bedingung. In unserem Kontext ist der verschachtelte Code eine weitere ‚if‘-Anweisung.

  • if [[ Bedingungen ]] – Dies repräsentiert die externe ‚bash if else‘-Anweisung. Der verschachtelte Code (eine weitere ‚if‘-Anweisung) wird nur ausgeführt, wenn die angegebene Bedingung wahr ist.
  • if [[ Bedingung2 ]] – Dies repräsentiert die interne ‚bash if else‘-Klausel. Hier wird Code ausgeführt, wenn und nur wenn beide Bedingungen erfüllt sind.
if [[ conditions ]]; then
	if [[ condition2 ]]; then
		statement
	fi
fi

Lassen Sie uns tiefer gehen. Wir werden unser vorheriges Beispiel für ‚bash if else‘ verbessern, indem wir eine if-Anweisung einbeziehen, die nach einem Passwort fragt:

1. Erstellen Sie zunächst eine neue Datei mit dem Titel bash_nested_if_demo.sh in Ihrem bevorzugten Texteditor.

nano bash_nested_if_demo.sh

2. Übertragen Sie den unten bereitgestellten Code für ‚bash if else‘ in die Datei bash_nested_if_demo.sh, speichern Sie Ihre Änderungen und schließen Sie den Editor.

Dieser ‚bash if else‘-Code fordert sowohl einen Namen als auch ein Passwort an. Sollten die Bedingungen für den Namen und das Passwort übereinstimmen, wird eine bestimmte Meldung angezeigt. Wenn keine Übereinstimmung vorliegt, zeigt die Ausgabe nur das aktuelle Datum und die Uhrzeit an.

#!/bin/bash
# Stellt eine Nachricht zur Eingabe eines Benutzernamens bereit.
echo "Whats your name?"
# Sammelt die Benutzereingabe.
read NAME
# Beginnt die 'bash if else'-Anweisung, um zu überprüfen, ob $NAME mit "ATA" übereinstimmt.
if [ $NAME == "ATA" ]
 then
 # Stellt eine nachfolgende Frage, diesmal für ein Passwort.
 echo "Password?"
 # Erfasst die Passworteingabe.
 read Password
   # Verschachteltes 'bash if else' - Ermittelt, ob das $Passwort mit "pwd123" übereinstimmt.
   if [ "$Password" == "pwd123" ]; then
     # Zeigt eine Nachricht an, wenn beide Bedingungen bezüglich Name und Passwort erfüllt sind.
     echo "You've successfully logged in as ATA."
   fi
fi
# Hebt das aktuelle Datum und die Uhrzeit hervor.
date

3. Jetzt wollen wir dieses ‚bash if else‘-Skript in Aktion sehen. Führen Sie den Befehl unten aus:

bash bash_nested_if_demo.sh

Für optimale Ergebnisse geben Sie ATA als Benutzernamen und pwd123 als Passwort ein.

Demonstrating the bash_nested_if_demo.sh Script in action

Wenn Ihre Eingaben von „ATA“ oder „pwd123“ abweichen, erhalten Sie lediglich Rückmeldungen zum aktuellen Datum und zur Uhrzeit. Dies liegt daran, dass die ‚bash if else‘-Struktur die Erfüllung beider Bedingungen erfordert.

Validating if entered conditions are met using ‘bash if else’

Entschlüsselung von ‚Bash If Else‘-Anweisungen

‚Bash if else‘-Anweisungen sind Eckpfeiler im Bash-Skripting und bieten entscheidende Fähigkeiten für Ihre Skripte. Es ist jedoch entscheidend zu verstehen, dass die Verwendung von ‚if‘-Anweisungen nicht ohne ihre Nachteile ist.

Die offensichtliche Herausforderung besteht darin, dass übermäßige Abhängigkeit von ‚if‘-Anweisungen Ihren Code überladen kann, was ihn mühsam und herausfordernd macht, insbesondere wenn mehrere verschachtelte ‚if‘-Anweisungen ins Spiel kommen. Solche Skripte riskieren, zu „Spaghetti-Code“ zu werden, gekennzeichnet durch reduzierte Lesbarkeit und erhöhte Komplexität.

Wie optimieren Sie also Ihr ‚Bash if else‘-Skript, um verständlich zu bleiben? Entscheiden Sie sich für ‚if else‘-Anweisungen anstelle einer Vielzahl von verschachtelten ‚if‘-Anweisungen. Das Schlüsselwort ‚else‘ bietet die Möglichkeit, einen Codeblock zu definieren, der ausgeführt wird, wenn die ‚if‘-Bedingung nicht erfüllt ist.

Um eine klarere Perspektive zu erhalten, betrachten Sie die Syntax für ‚Bash If Else‘ unten, wo:

  • if [[ Bedingungen ]] – Hier enthält die ‚Bash if else‘-Anweisung den Code (Anweisung1), der nur ausgeführt wird, wenn die angegebene Bedingung gültig ist.
  • else – Dies ist Teil der ‚Bash if else‘-Struktur. Die else-Anweisung umfasst den Code (Anweisung2), der ausgeführt wird, wenn die Bedingung in der vorherigen if-Klausel nicht erfüllt ist.
if [[ conditions ]]; then
	statement1
else
	statement2
fi

Stellen Sie sich vor, Sie erstellen ein einfaches ‚Bash if else‘-Spiel, bei dem das System eine zufällige Zahl vom Benutzer erwartet:

1. Beginnen Sie damit, eine neue Datei mit dem Namen bash_if_else_demo.sh zu erstellen.

nano bash_if_else_demo.sh

2. Integrieren Sie den folgenden ‚Bash if else‘-Code in Ihre Datei bash_if_else_demo.sh, speichern Sie die Änderungen und verlassen Sie dann das Programm.

Der zugrunde liegende ‚Bash if else‘-Code fordert den Benutzer nach seiner Glückszahl auf. Wenn die Eingabe gerade ist, wird die Nachricht „Sie haben gewonnen!“ angezeigt. Andernfalls löst eine ungerade Zahl die Ausgabe „Sie haben verloren!“ aus.

#!/bin/bash
# Sendet eine Anfrage nach der Glückszahl des Benutzers
echo -n "Input Your Lucky Number:"
# Akzeptiert die eingegebene Zahl.
read var
# 'bash if else'-Bedingung, um festzustellen, ob der Wert gerade ist.
if [ $((var%2)) == 0 ]; then
 # Verkündet einen Gewinn, wenn die Bedingung erfüllt ist
 echo "You Won with 'bash if else'!"
else
 # Verkündet einen Verlust, wenn die Bedingung nicht erfüllt ist
 echo "You Lost using 'bash if else'!"
fi

3. Um das ‚bash if else‘-Skript in Aktion zu sehen, führen Sie den folgenden Befehl aus:

bash bash_if_else_demo.sh

Bei Eingabe einer geraden Ziffer sollten Sie die Meldung „Sie haben mit ‚bash if else‘ gewonnen!“ sehen. Im Gegensatz dazu sollte die Eingabe einer ungeraden Ziffer das Feedback „Sie haben mit ‚bash if else‘ verloren!“ ergeben.

Run the ‘bash if else’ game, bash_if_else_demo.sh Script

Um das ‚bash if else‘-Skript zu bereichern, erwägen Sie die Integration eines Abschnitts, der feststellt, ob der Benutzer einen Buchstaben oder ein bestimmtes Zeichen anstelle einer Zahl eingibt.

Dekodierung von ‚Bash If Else‘ und Case-Anweisungen

Zu diesem Zeitpunkt haben Sie ein paar Methoden erkundet, um Entscheidungen in Ihren Bash-Skripten zu treffen, nämlich ‚bash if else‘-Anweisungen. Aber Bash bietet eine andere Möglichkeit zur Entscheidungsfindung – die case-Anweisung.

Ähnlich wie bei ‚bash if else‘ ist die case-Anweisung darauf spezialisiert, Code-Sequenzen basierend auf festgelegten Bedingungen auszuführen. Ein bemerkenswerter Vorteil der case-Anweisung ist ihre schiere Kürze und Klarheit, insbesondere im Vergleich zu verschachtelten ‚bash if else‘-Szenarien.

Um die Alternative von ‚bash if else‘ vollständig zu erfassen, wollen wir uns in die Syntax der Fallanweisung vertiefen:

  • case $VAR in – Dieses Segment des Fallkonstrukts bewertet die Variable $VAR gegen definierte Muster, bis eine Übereinstimmung gefunden wird.
  • Muster1) und Muster2) – Dies sind die Kriterien, gegen die getestet wird, und sobald eine Übereinstimmung erkannt wird, tritt der entsprechende Code (Anweisung1 oder Anweisung2) in Aktion.
  • esac – Beendet die Fallstruktur.
case $VAR in
pattern1)
    statement1
    ;;
pattern2)
    statement2
    ;;
esac

Stellen Sie sich vor, Sie entwerfen ein ‚bash if else‘ Skript, in dem Benutzer ihre Ländernamen eingeben, und als Antwort darauf zeigt das Skript die vorherrschende Sprache dieses Landes an.

1. Beginnen Sie damit, eine Datei namens bash_case_demo.sh zu erstellen.

nano bash_case_demo.sh

2. Integrieren Sie den unten bereitgestellten ‚bash if else‘ Code in Ihre Datei bash_case_demo.sh, speichern Sie sie und beenden Sie sie dann.

Das resultierende ‚bash if else‘ Skript wird den Benutzer nach dem Namen seines Landes fragen und basierend auf den ‚case‘-Mustern die primäre Sprache drucken, die in dem genannten Land gesprochen wird.

3#!/bin/bash
# Fragt den Benutzer nach seinem Wohnsitzland
echo -n "In which country do you reside?"
# Erfasst die Antwort des Benutzers.
read var
# Offenbart die Standardsprache im ausgewählten Land des Benutzers ($var),
# basierend auf den Mustern innerhalb des 'case'-Frameworks.
echo -n "The official language of $var is "

# Die 'bash if else' case-Anweisung bewertet, ob die Eingabe des Benutzers ($var) mit den Mustern übereinstimmt.
case $var in
# Etabliert Muster, die die Hauptsprache des vom Benutzer gewählten Landes enthüllen.
 US)
  echo -n "English"
  ;;

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

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

 *)
  echo -n "unknown"
  ;;
esac

3. Um dieses ‚bash if else‘ Skript aus erster Hand zu erleben, verwenden Sie den folgenden Befehl:

bash bash_case_demo.sh

Sie werden feststellen, dass das Skript die Sprache gemäß dem vom Benutzer gewählten Land genau hervorhebt.

Wenn das angegebene Land nicht mit den festgelegten Mustern übereinstimmt, wird das Standard (*) Muster ausgelöst, was zur Ausgabe „unknown“ führt.

Illustrating the functionality of the bash_case_demo.sh Script

Zusammenfassung von Bash-Bedingungsanweisungen

In diesem Leitfaden haben Sie die Reise angetreten, ‚bash if else‘ und andere bedingte Anweisungen in Bash zu verstehen. Vom einfachen ‚if‘-Statement bis hin zu den komplexen ‚if-else‘ und ‚case‘-Anweisungen sind Sie nun mit den wesentlichen Werkzeugen für effektives Bash-Skripting ausgestattet.

Mit diesen Grundlagen von ‚bash if else‘ können Sie Bash-Skripte effizienter erstellen und damit die Fehlermarge reduzieren.

Aber denke daran, dies ist nur die Spitze des Eisbergs. Bash bietet eine Vielzahl von bedingten Anweisungen. Vielleicht solltest du dich mit der Bash elif-Anweisung und den &&, OR und || Operatoren näher befassen, um tiefere Einblicke zu erhalten. Mit Hingabe wird das Meistern des Bash-Scriptings bald in greifbarer Nähe sein!

Source:
https://adamtheautomator.com/bash-if-else/