Die For-Schleife ist ein grundlegendes Element in der Welt der Programmierung. Sie ermöglicht es, eine bestimmte Anzahl von Operationen oder Iterationen durchzuführen, wodurch das Bearbeiten von Datenstrukturen wie Listen und Arrays vereinfacht wird.
Stell dir vor, du hast eine Liste mit ’n‘ Elementen, die du bearbeiten möchtest; eine For-Schleife ist dein Werkzeug der Wahl. Betrachten wir folgendes Beispiel:
1Violett2Indigo3Blau4GrünRegenbogentisch
Um mit dieser Tabelle zu interagieren, sie zu durchlaufen und Aktionen für jedes Element auszuführen, ist die For-Schleife unerlässlich.
Die Bash For-Schleife
In Bash-Skripten hat die For-Schleife eine spezifische Struktur:
#!/bin/bash for VAR in 1 2 3 4 5.....N do AKTION 1 AKTION 2 ..... done
Diese Struktur ist recht geradlinig. Die erste Zeile, #!/bin/bash
, identifiziert den Code als Bash-Skript. VAR
dient als temporäre Variable während der Iterationen. N
repräsentiert die maximale Anzahl an Durchläufen. Die Schlüsselwörter do
und done
markieren den Beginn und das Ende des Schleifenblocks. Die AKTIONEN
sind die Befehle, die bei jeder Iteration ausgeführt werden.
Die Bash For-Schleife ist flexibel und kann mit verschiedenen Datentypen wie Listen, Zeichenketten, Ganzzahlen und Arrays arbeiten. Im Folgenden werden einige typische Anwendungen der Bash For-Schleife veranschaulicht.
Du kannst diese Beispiele direkt in der Bash-Befehlszeile ausführen oder sie in einer Datei speichern und mit dem Befehl bash dateiname.sh
ausführen.
Verarbeitung einer statischen Liste
Betrachten wir eine Liste von Farben: rainbowColorList = Violett, Indigo, Blau, Grün, Gelb, Orange, Rot
.
Diese Liste von Zeichenketten kann mit einer Bash For-Schleife wie folgt ausgegeben werden:
#!/bin/sh # Definiere die Liste rainbowColorList=Violett,Indigo,Blau,Grün,Gelb,Orange,Rot # Komma als Trennzeichen verwenden mit //,/ for farbe in ${rainbowColorList//,/ } do echo $farbe done
Das Ergebnis ist eine Liste, in der jedes Element in einer neuen Zeile erscheint.
#Ausgabe Violett Indigo Blau Grün Gelb Orange Rot
Einlesen eines Arrays
Die Syntax zur Deklaration eines Arrays unterscheidet sich leicht; hier werden Klammern für jedes Element verwendet:
rainbowArray=("Violett" "Indigo" "Blau" "Grün" "Gelb" "Orange" "Rot") for farbe in "${rainbowArray[@]}"; do echo "Ich mag $farbe" done
Das Symbol @
wird verwendet, um jedes Element des Arrays zu iterieren.
#Ausgabe Ich mag Violett Ich mag Indigo Ich mag Blau Ich mag Grün Ich mag Gelb Ich mag Orange Ich mag Rot
Die For-Schleife kann auch genutzt werden, um sowohl den Index als auch die Elemente eines Arrays auszugeben.
#Ausgabe mit Index rainbowArray=("Violett" "Indigo" "Blau" "Grün" "Gelb" "Orange" "Rot") for i in "${!rainbowArray[@]}"; do echo "Farbe am Index " $i " : " "${rainbowArray[$i]}" i=$((i+1)); done
#Ausgabe Farbe am Index 0 : Violett Farbe am Index 1 : Indigo Farbe am Index 2 : Blau Farbe am Index 3 : Grün Farbe am Index 4 : Gelb Farbe am Index 5 : Orange Farbe am Index 6 : Rot
Beachte das !
in der Schleife, um den Index des jeweiligen Elements zu erhalten.
Iteration über einen Zahlenbereich
Bash For-Schleifen können verwendet werden, um über einen bestimmten Bereich von Zahlen zu iterieren.
#Iteration über Zahlenbereich echo "Countdown beginnt..." for N in {10..0} do echo "$N" done
Die Schreibweise ..
definiert einen Zahlenbereich.
#Ausgabe 10 9 8 7 6 5 4 3 2 1 0
Man kann auch Zahlen überspringen, indem man die Schrittweite definiert.
In diesem Beispiel wird in Schritten von 3 heruntergezählt:
#Iteration mit Schrittweite echo "Countdown beginnt..." for N in {30..0..3} do echo "$N" done
Dieses Programm startet bei 30 und zählt bis 0 herunter, wobei 3
die Schrittweite angibt.
#Ausgabe 30 27 24 21 18 15 12 9 6 3 0
Zeichenketten und Zeichen
Die Bash For-Schleife ermöglicht das Durchführen verschiedenster Zeichenkettenoperationen.
So kann man zum Beispiel jedes einzelne Zeichen einer Zeichenkette extrahieren, indem man den seq
-Operator in der Schleife verwendet:
#Auslesen der Zeichen einer Zeichenkette mywort="willkommen" for i in $(seq 1 ${#mywort}) do echo "${mywort:i-1:1}" done
Beachte, dass seq
mit 1 beginnen muss, um mit dem ersten Zeichen zu starten.
#Ausgabe w i l l k o m m e n
Auch kann man jedes Wort einer Zeichenkette, getrennt durch Leerzeichen, ausgeben:
#Ausgabe der Wörter eines Satzes meinsatz="Willkommen auf wdzwdz. Ein Hub für alle Technikinteressierten" for wort in $meinsatz; do echo $wort done
#Ausgabe Willkommen auf wdzwdz. Ein Hub für alle Technikinteressierten
Ausdrücke
Wie in anderen Programmiersprachen, wie Java, können Ausdrücke innerhalb einer Bash For-Schleife verwendet werden.
for (( var=10; var>=0; var-- )) do echo "Herunterzählen...$var" done
#Ausgabe Herunterzählen...10 Herunterzählen...9 Herunterzählen...8 Herunterzählen...7 Herunterzählen...6 Herunterzählen...5 Herunterzählen...4 Herunterzählen...3 Herunterzählen...2 Herunterzählen...1 Herunterzählen...0
Einlesen von Befehlszeilenargumenten
Zum Einlesen von Befehlszeilenargumenten verwenden wir den Befehl read
. Im folgenden Beispiel nehmen wir vom Benutzer eingegebene Zahlen entgegen und berechnen mit Hilfe einer For-Schleife deren Summe. Die Variable total
speichert die laufende und endgültige Summe der Zahlen.
read -a array -p "Gib die Zahlen ein, die du addieren möchtest:" total=0 for i in ${array[@]}; do let total+=$i done echo "Die Summe der Zahlen ist: $total"
Die entsprechende Ausgabe sieht wie folgt aus:
#Ausgabe Gib die Zahlen ein, die du addieren möchtest: 3 4 66 Die Summe der Zahlen ist: 73
Finden von geraden und ungeraden Zahlen
Um gerade und ungerade Zahlen in einem Bereich (z.B. von 1 bis 10) zu ermitteln, kombinieren wir eine If-Bedingung mit einer Bash For-Schleife. Eine Zahl gilt als gerade, wenn sie durch 2 teilbar ist und der Rest 0 ist, andernfalls ist sie ungerade.
#Liste zur Sortierung der geraden und ungeraden Zahlen deklarieren geradezahlen="" ungeradezahlen="" for (( i=1; i<=10; i++ )) do rest=$(( $i % 2 )) if [ $rest -eq 0 ]; then geradezahlen="$geradezahlen $i " else ungeradezahlen="$ungeradezahlen $i " fi done echo "Gerade Zahlen sind: "$geradezahlen echo "Ungerade Zahlen sind: "$ungeradezahlen
In diesem Beispiel ist der Bereich auf 10 festgelegt, dieser Wert kann jedoch für jeden beliebigen Zahlenbereich geändert werden. Zusätzlich kann man den Befehl read
verwenden, um die Zahl vom Benutzer einzulesen, wie im vorherigen Abschnitt gezeigt.
#Ausgabe Gerade Zahlen sind: 2 4 6 8 10 Ungerade Zahlen sind: 1 3 5 7 9
Endlosschleife
Eine Endlosschleife ist eine Schleife, die sich endlos wiederholt und mit Strg+C unterbrochen werden muss. Eine solche Schleife kann leicht durch die Verwendung von ; ;
innerhalb der For-Schleife erstellt werden:
for (( ; ; )) do echo "Willkommen auf wdzwdz" done
#Ausgabe Willkommen auf wdzwdz Willkommen auf wdzwdz Willkommen auf wdzwdz Willkommen auf wdzwdz Willkommen auf wdzwdz Willkommen auf wdzwdz Willkommen auf wdzwdz Willkommen auf wdzwdz Willkommen auf wdzwdz Willkommen auf wdzwdz ^C $
Break-Anweisung
Mit break
kann die Schleife vorzeitig beendet werden, wenn eine bestimmte If-Bedingung erfüllt ist.
for farbe in Violett Indigo Blau Grün Gelb Orange Rot do if [[ "$farbe" == 'Grün' ]]; then break fi echo "Suche nach Grün, die aktuelle Farbe ist $farbe" done echo "Ich habe meine Farbe gefunden: $farbe"
In diesem Beispiel wird nach der Farbe Grün gesucht. Sobald die Farbe Grün gefunden wird, wird die Schleife aufgrund der break
-Anweisung verlassen.
#Ausgabe Suche nach Grün, die aktuelle Farbe ist Violett Suche nach Grün, die aktuelle Farbe ist Indigo Suche nach Grün, die aktuelle Farbe ist Blau Ich habe meine Farbe gefunden: Grün
Continue-Anweisung
continue
ermöglicht es, den aktuellen Schleifendurchlauf zu überspringen und mit dem nächsten fortzufahren. So können wir zum Beispiel das Drucken der Farbe „Grün“ in unserem vorherigen Programm überspringen, und alle anderen Farben werden ausgegeben.
for farbe in Violett Indigo Blau Grün Gelb Orange Rot do if [[ "$farbe" == 'Grün' ]]; then continue fi echo "$farbe" done
#Ausgabe Violett Indigo Blau Gelb Orange Rot
Abschliessende Worte
Wir haben die gebräuchlichsten Anwendungsfälle von Bash For-Schleifen mit Zeichenketten, Zahlen, Arrays und Listen behandelt. Falls du Linux lernen möchtest, aber einen Windows 10 Rechner hast, kann die WSL-Funktion genutzt werden, um Linux auf dem Windows Rechner zu installieren.
Das Linux Terminal kann dann ähnlich wie CMD verwendet werden.
Als nächstes kann man sich ansehen, wie man Bash Skripte mit Python ausführt.