Einführung
Stellen Sie sich vor, Sie müssten 1.000 Briefe unterschreiben. Einen zu unterschreiben ist einfach. 1.000 Briefe zu unterschreiben ist langweilig und tut in der Hand weh. Beim Programmieren vermeiden wir langweilige Wiederholungen.
Dafür verwenden wir Schleifen. Eine Schleife teilt dem Computer mit: Führe diese Aufgabe wiederholt aus – entweder für jedes Element einer Liste oder so lange, bis sich eine Bedingung ändert.
Schleifen sind ein zentraler Bestandteil der Automatisierung, weil Computer gut wiederholen können und Menschen darin schlecht sind. Wenn Sie feststellen, dass Sie immer wieder dasselbe Befehlsmuster ausführen, ist das oft ein Zeichen dafür, dass Sie an dieser Stelle eine Schleife verwenden sollten.
In diesem Lab bauen Sie Ihre eigenen digitalen Produktionsstraßen:
- Der Zähler: Eine Schleife, die für Sie zählt (die
for-Schleife). - Der Arbeiter: Eine Schleife, die jede Datei in einem Stapel verarbeitet (die
for-Schleife mit Dateien). - Der Beobachter: Eine Schleife, die weiterarbeitet, bis ein Ziel erreicht ist (die
while-Schleife).
Die Zahlenschleife (For-Schleife)
Die for-Schleife ist wie eine Checkliste. Sie haben eine Liste von Elementen und führen für jedes Element auf der Liste eine Aktion aus.
Dies ist eines der nützlichsten Automatisierungsmuster in Unix-ähnlichen Systemen. Computer können eine kleine Aktion sehr zuverlässig wiederholen. Mit Schleifen können Sie daher eine Aufgabe für ein einzelnes Element auf viele Elemente ausweiten, ohne denselben Befehl immer wieder zu kopieren.
Beginnen wir mit der einfachsten Liste: Zahlen. Wir weisen den Computer an, von 1 bis 5 zu zählen.
Prüfen Sie zuerst Ihr Arbeitsverzeichnis:
cd ~/project
Erstellen Sie ein Skript mit dem Namen num_loop.sh:
nano num_loop.sh
Geben Sie diesen Code ein:
#!/bin/bash
for i in {1..5}; do
echo "Number: $i"
done
Die Produktionsstraße entschlüsselt:
for i in {1..5}: Dies ist die Zuführung der Maschine. Sie nimmt die Zahlen 1, 2, 3, 4 und 5 und übergibt sie nacheinander an die Variable$i.do: Startet die Maschine.echo ...: Die konkrete auszuführende Aufgabe.done: Beendet die Verarbeitung dieses Elements und holt anschließend das nächste Element.
Der Teil {1..5} ist eine Bash-Kurzschreibweise namens Brace Expansion. Bevor die Schleife beginnt, erweitert Bash diesen Ausdruck zu einer Liste von Werten. Die Schleife durchläuft also tatsächlich eine vorbereitete Liste, ein Element nach dem anderen.
Speichern Sie die Datei (Ctrl+O) und beenden Sie den Editor (Ctrl+X).
Machen Sie das Skript ausführbar:
chmod +x num_loop.sh
./num_loop.sh
Sie sehen, wie der Roboter zählt:
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5
Die Dateischleife (For-Schleife)
Zählen macht Spaß, aber die Verarbeitung von Dateien ist nützlich. Besonders leistungsfähig ist die for-Schleife in Verbindung mit Platzhaltern wie *.txt. Sie können dem Skript sagen: „Führe für jede Textdatei, die du in diesem Ordner findest, die Aktion X aus.“
In Ihrem Ordner haben wir bereits einige Beispieltextdateien erstellt. Schreiben Sie nun ein Skript, das diese Dateien findet.
Erstellen Sie eine neue Datei mit dem Namen file_loop.sh:
nano file_loop.sh
Geben Sie diesen Code ein:
#!/bin/bash
echo "Listing text files:"
for file in *.txt; do
echo "Found file: $file"
done
Die Logik:
Statt der Zahlenfolge {1..5} geben wir der Schleife das Muster *.txt.
BASH durchsucht den Ordner, findet alle passenden Dateien – zum Beispiel data1.txt und notes.txt – und übergibt sie nacheinander an die Variable $file.
Dieser Abgleich findet statt, bevor der Schleifenkörper ausgeführt wird. Die Shell erweitert *.txt zu einer Liste von Dateinamen. Anschließend durchläuft die for-Schleife diese Liste. Deshalb funktionieren Schleifen und Glob-Muster in Shell-Skripten so gut zusammen.
Speichern Sie die Datei und beenden Sie den Editor.
Führen Sie das Skript aus:
chmod +x file_loop.sh
./file_loop.sh
Ausgabe:
Listing text files:
Found file: data1.txt
Found file: data2.txt
Found file: notes.txt
Stellen Sie sich vor, Sie würden statt echo den Befehl mv verwenden, um die Dateien zu verschieben, oder zip, um sie zu archivieren. Mit demselben Skript aus nur vier Zeilen könnten Sie 10.000 Dateien in wenigen Sekunden verarbeiten!
Die Bedingungsschleife (While-Schleife)
Die for-Schleife eignet sich hervorragend, wenn Sie eine Liste aus Zahlen oder Dateien haben. Aber was ist, wenn Sie keine Liste haben? Was ist, wenn Sie einfach „WEITERMACHEN möchten, BIS etwas passiert“?
Dafür gibt es die While-Schleife. Sie ist wie ein Thermostat: „Solange der Raum kalt ist, bleibt die Heizung eingeschaltet.“
Schreiben wir ein Skript, das manuell bis 10 zählt.
Erstellen Sie while_loop.sh:
nano while_loop.sh
Geben Sie diesen Code ein:
#!/bin/bash
counter=1
while [ $counter -le 10 ]; do
echo "Count: $counter"
((counter++))
done
Der Thermostat entschlüsselt:
while [ $counter -le 10 ]: Die Bedingung: „Ist der Zähler kleiner oder gleich 10?“- Wenn JA: Die Schleife wird ausgeführt.
- Wenn NEIN: Die Schleife wird beendet.
((counter++)): Die Aktualisierung. Dieser Ausdruck erhöht den Zähler um 1. Wichtig: Wenn Sie diese Zeile vergessen, bleibt der Zähler für immer bei 1 und das Skript läuft endlos weiter – eine „Endlosschleife“!
Daran erkennen Sie den wesentlichen Unterschied zwischen for und while. Eine for-Schleife erhält ihre Abfolge normalerweise bereits zu Beginn von der Shell. Eine while-Schleife hängt von einer Bedingung ab, die Ihr Skript während der Ausführung korrekt aktualisieren muss.
Die Syntax ((counter++)) ist eine arithmetische Schreibweise von Bash. Sie weist die Shell an, counter als Zahl zu behandeln und um eins zu erhöhen. Shell-Skripte kombinieren häufig Textverarbeitung mit einfachen arithmetischen Berechnungen, daher kommt diese Syntax oft vor.
Speichern Sie die Datei und beenden Sie den Editor.
Führen Sie das Skript aus:
chmod +x while_loop.sh
./while_loop.sh
Das Skript verhält sich wie die for-Schleife, aber die Logik ist eine andere. For durchläuft eine Liste. While arbeitet mit einer Bedingung.
Zusammenfassung
Sie haben Ihre ersten Automatisierungsmaschinen gebaut.
In diesem Lab haben Sie Folgendes gelernt:
- Die Checkliste (
for): Eine festgelegte Liste von Elementen verarbeiten, zum Beispiel Zahlen aus{1..5}. - Der Stapelverarbeiter (
for *.txt): Jede Datei in einem Verzeichnis automatisch verarbeiten. - Der Thermostat (
while): Aktionen wiederholen, bis ein bestimmtes Ziel oder Limit erreicht ist.
Diese Schleifen sind die Arbeitspferde der Skripterstellung. Sie machen aus 1.000 manuellen Klicks eine Sekunde Rechenzeit.



