10 Bash-For-Loop-Beispiele mit Erläuterungen

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.