Einführung
In diesem Lab lernen Sie, wie Sie bedingte Anweisungen in der Shell-Programmierung einsetzen, um logische Entscheidungen innerhalb Ihrer Skripte zu treffen. Wir behandeln die grundlegende Syntax von if-else-Anweisungen sowie die Verwendung von numerischen Vergleichen und String-Vergleichen zur Auswertung von Bedingungen. Am Ende dieses Labs werden Sie in der Lage sein, Shell-Skripte zu schreiben, die flexibel auf unterschiedliche Situationen reagieren können.
Erstellen Sie Ihre erste If-Anweisung
Beginnen wir mit einer einfachen if-Anweisung, die prüft, ob eine Variable namens NAME den Wert "John" hat.
Öffnen Sie zunächst ein Terminal in der WebIDE. Standardmäßig sollten Sie sich im Verzeichnis /home/labex/project befinden. Wenn Sie unsicher sind, können Sie Ihr aktuelles Verzeichnis jederzeit mit dem Befehl pwd überprüfen.
Erstellen Sie eine neue Datei namens if.sh mit dem folgenden Befehl:
touch if.sh
Dieser Befehl erzeugt eine leere Datei mit dem Namen if.sh in Ihrem aktuellen Verzeichnis.
Öffnen Sie nun die Datei if.sh in der WebIDE. Klicken Sie dazu einfach auf die Datei im Datei-Explorer auf der linken Seite.
Fügen Sie der Datei den folgenden Inhalt hinzu:
#!/bin/bash
NAME="John"
if [ "$NAME" = "John" ]; then
echo "The name is John"
fi
Lassen Sie uns dieses Skript analysieren:
#!/bin/bash: Dies ist die sogenannte "Shebang"-Zeile. Sie teilt dem System mit, welcher Interpreter zum Ausführen des Skripts verwendet werden soll. In diesem Fall nutzen wir Bash.NAME="John": Diese Zeile erstellt eine Variable namensNAMEund weist ihr den Wert "John" zu.if [ "$NAME" = "John" ]; then: Dies ist der Beginn unserer if-Anweisung. Sie prüft, ob der Wert vonNAMEgleich "John" ist.- Die eckigen Klammern
[ ]sind in der Bash tatsächlich ein Befehl, der äquivalent zumtest-Befehl ist. - Wir setzen
"$NAME"in Anführungszeichen, um Fehler zu vermeiden, fallsNAMEleer sein sollte oder Leerzeichen enthält. - Das Semikolon und das Schlüsselwort
thengehören zur Syntax der if-Anweisung in der Bash.
- Die eckigen Klammern
echo "The name is John": Diese Zeile wird nur ausgeführt, wenn die Bedingung wahr (true) ist.fi: Dies markiert das Ende der if-Anweisung. Es ist einfach "if" rückwärts geschrieben!
Speichern Sie die Datei, nachdem Sie den Inhalt hinzugefügt haben.
Jetzt müssen wir das Skript ausführbar machen. In Unix-ähnlichen Systemen sind Dateien aus Sicherheitsgründen standardmäßig nicht ausführbar. Dies können wir mit dem Befehl chmod ändern:
chmod +x if.sh
Dieser Befehl fügt der Datei die Ausführungsberechtigung hinzu. Das +x steht für "execute" (ausführen).
Führen Sie das Skript nun aus:
./if.sh
Das ./ weist die Shell an, im aktuellen Verzeichnis nach dem Skript zu suchen.
Sie sollten die folgende Ausgabe sehen: The name is John
Falls Sie diese Ausgabe nicht sehen, prüfen Sie bitte erneut, ob Sie die Datei mit dem korrekten Inhalt gespeichert und sie wirklich ausführbar gemacht haben.
Eine Else-Klausel hinzufügen
Erweitern wir nun unsere if-Anweisung um eine else-Klausel. Damit können wir festlegen, was passieren soll, wenn die Bedingung falsch (false) ist.
Öffnen Sie die Datei if.sh erneut in der WebIDE und ändern Sie den Inhalt wie folgt:
#!/bin/bash
NAME="Alice"
if [ "$NAME" = "John" ]; then
echo "The name is John"
else
echo "The name is not John"
fi
Hier sind die Änderungen im Detail:
- Wir haben die Variable
NAMEauf "Alice" geändert. So können wir demonstrieren, was passiert, wenn die Bedingung nicht erfüllt ist. - Wir haben eine
else-Klausel hinzugefügt. Diese definiert den Alternativpfad, falls die Bedingung in der if-Anweisung unwahr ist. - Nach dem
elsehaben wir einen weiterenecho-Befehl eingefügt, der ausgeführt wird, wennNAMEnicht "John" ist.
Die else-Klausel ist optional, aber sehr nützlich, wenn Sie eine bestimmte Aktion ausführen möchten, anstatt das Skript einfach ohne Rückmeldung weiterlaufen zu lassen.
Speichern Sie die Datei mit diesen Änderungen.
Führen Sie das Skript erneut aus:
./if.sh
Diesmal sollten Sie die Ausgabe sehen: The name is not John
Da NAME jetzt "Alice" ist, ist die Bedingung [ "$NAME" = "John" ] falsch, und der Code im else-Block wird ausgeführt.
Versuchen Sie, die Variable NAME wieder in "John" zu ändern und das Skript erneut zu starten. Welche Ausgabe erhalten Sie? Dies ist ein guter Weg, um sicherzustellen, dass Ihre if-else-Struktur für beide Fälle korrekt funktioniert.
Einführung von Elif
Manchmal müssen wir mehr als zwei Möglichkeiten prüfen. Hier kommt die elif-Klausel (kurz für "else if") ins Spiel. Wir passen unser Skript an, um verschiedene Namen zu erkennen.
Aktualisieren Sie die Datei if.sh mit folgendem Inhalt:
#!/bin/bash
NAME="George"
if [ "$NAME" = "John" ]; then
echo "John Lennon"
elif [ "$NAME" = "Paul" ]; then
echo "Paul McCartney"
elif [ "$NAME" = "George" ]; then
echo "George Harrison"
elif [ "$NAME" = "Ringo" ]; then
echo "Ringo Starr"
else
echo "Unknown member"
fi
Lassen Sie uns den Ablauf durchgehen:
- Wir beginnen mit
NAME="George". - Die erste
if-Anweisung prüft, ob der Name "John" ist. - Wenn es nicht "John" ist, springt das Skript zur ersten
elif-Anweisung und prüft auf "Paul". - Ist es nicht "Paul", geht es weiter zum nächsten
eliffür "George". - Wenn auch das nicht zutrifft, wird auf "Ringo" geprüft.
- Wenn keine dieser Bedingungen wahr ist, greift die abschließende
else-Klausel und gibt "Unknown member" aus.
Mit elif können Sie beliebig viele Bedingungen nacheinander prüfen. Die Bedingungen werden der Reihe nach ausgewertet, und nur der Codeblock der ersten zutreffenden Bedingung wird ausgeführt.
Speichern Sie die Datei.
Führen Sie das Skript aus:
./if.sh
Sie sollten die Ausgabe sehen: George Harrison
Experimentieren Sie mit der Variable NAME, indem Sie sie auf "John", "Paul", "Ringo" oder etwas völlig anderes setzen, und beobachten Sie, wie sich die Ausgabe jeweils anpasst.
Numerische Vergleiche
Shell-Skripte können auch Zahlen vergleichen. Erstellen wir ein neues Skript, um dies zu demonstrieren.
Erstellen Sie eine neue Datei namens numeric.sh:
touch numeric.sh
Öffnen Sie numeric.sh in der WebIDE und fügen Sie den folgenden Inhalt hinzu:
#!/bin/bash
NUMBER=10
if [ $NUMBER -lt 5 ]; then
echo "The number is less than 5"
elif [ $NUMBER -eq 10 ]; then
echo "The number is exactly 10"
elif [ $NUMBER -gt 15 ]; then
echo "The number is greater than 15"
else
echo "The number is between 5 and 15, but not 10"
fi
Dieses Skript führt numerische Vergleichsoperatoren ein:
-lt: kleiner als (less than)-eq: gleich (equal to)-gt: größer als (greater than)
Es gibt noch weitere Operatoren:
-le: kleiner oder gleich (less than or equal to)-ge: größer oder gleich (greater than or equal to)-ne: ungleich (not equal to)
Beachten Sie, dass wir diese speziellen Kürzel anstelle von Symbolen wie < oder > verwenden. Das liegt daran, dass in der Bash < und > für die Ein-/Ausgabeumleitung reserviert sind und nicht für den numerischen Vergleich innerhalb von einfachen eckigen Klammern genutzt werden.
Machen Sie das Skript ausführbar und starten Sie es:
chmod +x numeric.sh
./numeric.sh
Sie sollten die Ausgabe sehen: The number is exactly 10
Ändern Sie den Wert von NUMBER testweise auf 20 (Ergebnis: "greater than 15") oder auf 7 (Ergebnis: "between 5 and 15, but not 10"), um die Logik zu prüfen.
String-Vergleiche und logische Operatoren
Zum Abschluss schauen wir uns String-Vergleiche und logische Verknüpfungen an. Erstellen Sie eine Datei namens string_logic.sh:
touch string_logic.sh
Öffnen Sie string_logic.sh in der WebIDE und fügen Sie diesen Inhalt ein:
#!/bin/bash
STRING1="hello"
STRING2="world"
NUMBER1=5
NUMBER2=10
if [ "$STRING1" = "hello" ] && [ "$STRING2" = "world" ]; then
echo "Both strings match"
fi
if [ $NUMBER1 -lt 10 ] || [ $NUMBER2 -gt 5 ]; then
echo "At least one of the number conditions is true"
fi
if [[ "$STRING1" != "$STRING2" ]]; then
echo "The strings are different"
fi
if [[ -z "$STRING3" ]]; then
echo "STRING3 is empty or not set"
fi
Dieses Skript zeigt mehrere neue Konzepte:
- String-Gleichheit (
=): Prüft, ob zwei Zeichenketten identisch sind. - Logisches UND (
&&): Verknüpft zwei Bedingungen. Beide müssen wahr sein, damit der gesamte Ausdruck wahr ist. - Logisches ODER (
||): Verknüpft zwei Bedingungen. Es reicht aus, wenn eine davon wahr ist. - String-Ungleichheit (
!=): Prüft, ob zwei Zeichenketten unterschiedlich sind. - Prüfung auf leere Strings (
-z): Ist wahr, wenn der String leer ist (Länge Null).
Beachten Sie auch die Verwendung von doppelten eckigen Klammern [[ ]]. Dies ist eine erweiterte Version der einfachen Klammern und wird in modernen Bash-Skripten bevorzugt. Sie sind robuster gegenüber Fehlern bei Leerzeichen oder leeren Variablen.
Machen Sie das Skript ausführbar und führen Sie es aus:
chmod +x string_logic.sh
./string_logic.sh
Sie sollten alle vier Nachrichten sehen, da alle Bedingungen im Skript so gewählt sind, dass sie zutreffen.
Both strings match
At least one of the number conditions is true
The strings are different
STRING3 is empty or not set
Versuchen Sie, Werte zu ändern (z. B. STRING1 auf etwas anderes als "hello"), um zu sehen, wie sich die Ausgabe verringert.
Zusammenfassung
In diesem Lab haben Sie gelernt, wie man bedingte Anweisungen in der Shell-Programmierung verwendet. Sie haben den Einsatz von if-else-Anweisungen, elif-Klauseln, numerischen Vergleichen, String-Vergleichen und logischen Operatoren geübt. Diese Werkzeuge sind die Grundlage für die Erstellung intelligenter und entscheidungsfähiger Shell-Skripte.
Wichtige Erkenntnisse:
- Die Grundstruktur von if-else-Anweisungen in Shell-Skripten.
- Die Verwendung von
eliffür multiple Fallunterscheidungen. - Numerische Vergleichsoperatoren wie
-lt,-gt,-eq. - String-Vergleiche und die logischen Verknüpfungen
&&und||. - Die Notwendigkeit, Skripte mit
chmodausführbar zu machen.
Denken Sie daran: Übung ist der Schlüssel zur Meisterschaft im Shell-Scripting. Versuchen Sie, eigene Skripte zu entwerfen, die diese Konzepte kombinieren. Mit der Zeit werden Ihnen diese bedingten Anweisungen helfen, immer komplexere und nützlichere Automatisierungen zu erstellen.



