Bash-Scripting: Schleifen

ShellBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie die Verwendung von Schleifen im Bash-Scripting kennen. Schleifen sind leistungsstarke Werkzeuge, mit denen Sie eine Reihe von Anweisungen mehrfach wiederholen können, was Ihre Skripte effizienter und flexibler macht. Wir werden drei Arten von Schleifen behandeln: for, while und until. Zusätzlich werden Sie die Anweisungen break und continue kennenlernen, die eine präzise Steuerung der Schleifenausführung ermöglichen. Dieses Lab ist für Anfänger konzipiert und führt Sie Schritt für Schritt durch jedes Konzept.

Einrichten der Umgebung

Beginnen wir mit der Einrichtung unserer Arbeitsumgebung. Wir erstellen ein neues Verzeichnis, um alle unsere Schleifen-Experimente zu speichern.

Öffnen Sie ein Terminal in der WebIDE. Standardmäßig sollten Sie sich im Verzeichnis /home/labex/project befinden. Wenn Sie unsicher sind, können Sie jederzeit mit diesem Befehl dorthin navigieren:

cd /home/labex/project

Erstellen wir nun ein neues Verzeichnis für unsere Übungen:

mkdir bash_loops
cd bash_loops

Dies erstellt einen neuen Ordner namens bash_loops und wechselt direkt hinein. Wir werden dieses Verzeichnis für alle weiteren Schritte nutzen.

Warum machen wir das? Die Organisation Ihrer Skripte in eigenen Verzeichnissen ist eine bewährte Methode. Es hält Ihre Arbeit übersichtlich und erleichtert das Finden und Verwalten Ihrer Dateien.

Die for-Schleife

Die for-Schleife wird verwendet, um über eine Liste von Werten zu iterieren. Man kann es sich so vorstellen: „Für jedes Element in dieser Liste, tue etwas.“ Erstellen wir ein Skript, das die Verwendung einer for-Schleife demonstriert.

Erstellen Sie eine neue Datei namens for_loop.sh im Verzeichnis bash_loops:

touch for_loop.sh

Öffnen Sie nun die Datei for_loop.sh in der WebIDE und fügen Sie den folgenden Inhalt hinzu:

#!/bin/bash

## Loop through an array of names
echo "Looping through an array:"
NAMES=("Alice" "Bob" "Charlie" "David")
for name in "${NAMES[@]}"; do
  echo "Hello, $name!"
done

echo ## Print an empty line for readability

## Loop through a range of numbers
echo "Looping through a range of numbers:"
for i in {1..5}; do
  echo "Number: $i"
done

Schauen wir uns an, was dieses Skript macht:

  1. Die erste Schleife durchläuft ein Array von Namen. Für jeden Namen im Array wird eine Begrüßung ausgegeben.
  2. Die zweite Schleife verwendet einen Bereich {1..5}, um von 1 bis 5 zu zählen.

Die Syntax "${NAMES[@]}" mag anfangs ungewohnt erscheinen. Das @ bedeutet „alle Elemente des Arrays“, und die Anführungszeichen sowie die geschweiften Klammern stellen sicher, dass jedes Element als einzelnes Objekt behandelt wird, selbst wenn es Leerzeichen enthält.

Speichern Sie die Datei und machen Sie sie mit diesem Befehl ausführbar:

chmod +x for_loop.sh

Der Befehl chmod +x macht die Datei ausführbar, sodass Sie sie wie ein Programm starten können.

Führen Sie das Skript nun aus:

./for_loop.sh

Sie sollten eine Ausgabe wie diese sehen:

Looping through an array:
Hello, Alice!
Hello, Bob!
Hello, Charlie!
Hello, David!

Looping through a range of numbers:
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5

Dies zeigt, wie for-Schleifen sowohl über Arrays als auch über Zahlenbereiche iterieren können.

Die while-Schleife

Die while-Schleife führt einen Codeblock aus, solange eine bestimmte Bedingung wahr (true) ist. Es ist wie die Anweisung: „Solange diese Bedingung erfüllt ist, mache weiter.“

Erstellen Sie eine neue Datei namens while_loop.sh:

touch while_loop.sh

Öffnen Sie die Datei while_loop.sh in der WebIDE und fügen Sie den folgenden Inhalt hinzu:

#!/bin/bash

## Simple countdown using a while loop
count=5
echo "Countdown:"
while [ $count -gt 0 ]; do
  echo $count
  count=$((count - 1))
  sleep 1 ## Wait for 1 second
done
echo "Blast off!"

Lassen Sie uns dieses Skript analysieren:

  1. Wir beginnen mit count=5, um unseren Startwert für den Countdown festzulegen.
  2. Die Bedingung [ $count -gt 0 ] bedeutet „solange count größer als 0 ist“.
  3. Innerhalb der Schleife geben wir den aktuellen Wert aus, verringern ihn um 1 und warten eine Sekunde.
  4. Dies wird fortgesetzt, bis count den Wert 0 erreicht; an diesem Punkt endet die Schleife.

Der Befehl sleep 1 pausiert das Skript für eine Sekunde, wodurch ein Echtzeit-Countdown-Effekt entsteht.

Speichern Sie die Datei und machen Sie sie ausführbar:

chmod +x while_loop.sh

Führen Sie das Skript nun aus:

./while_loop.sh

Sie sehen einen Countdown von 5 bis 1 mit einer Pause von einer Sekunde zwischen jeder Zahl:

Countdown:
5
4
3
2
1
Blast off!

Dies verdeutlicht, wie eine while-Schleife eine Aktion wiederholen kann, bis eine Bedingung nicht mehr erfüllt ist.

Die until-Schleife

Die until-Schleife ähnelt der while-Schleife, weist jedoch einen entscheidenden Unterschied auf: Sie wird so lange ausgeführt, bis eine bestimmte Bedingung wahr wird. Man kann sagen: „Mache dies so lange, bis diese Bedingung eintritt.“

Erstellen Sie eine neue Datei namens until_loop.sh:

touch until_loop.sh

Öffnen Sie die Datei until_loop.sh in der WebIDE und fügen Sie den folgenden Inhalt hinzu:

#!/bin/bash

## Count up to 5 using an until loop
count=1
echo "Counting up to 5:"
until [ $count -gt 5 ]; do
  echo $count
  count=$((count + 1))
  sleep 1 ## Wait for 1 second
done

Lassen Sie uns dieses Skript aufschlüsseln:

  1. Wir starten mit count=1 als Initialwert.
  2. Die Bedingung [ $count -gt 5 ] bedeutet „bis count größer als 5 ist“.
  3. Innerhalb der Schleife geben wir den aktuellen Wert aus, erhöhen ihn um 1 und warten eine Sekunde.
  4. Dies wird fortgesetzt, bis count größer als 5 wird; dann endet die Schleife.

Speichern Sie die Datei und machen Sie sie ausführbar:

chmod +x until_loop.sh

Führen Sie das Skript nun aus:

./until_loop.sh

Sie sehen die Zahlen 1 bis 5, die jeweils mit einer Sekunde Verzögerung ausgegeben werden:

Counting up to 5:
1
2
3
4
5

Dies zeigt, wie eine until-Schleife eine Aktion wiederholt, bis eine Zielbedingung erreicht ist.

Verwendung von break- und continue-Anweisungen

Die Anweisungen break und continue dienen zur Steuerung des Schleifenflusses. break beendet eine Schleife vorzeitig, während continue den Rest des aktuellen Durchlaufs überspringt und direkt zum nächsten springt.

Erstellen Sie eine neue Datei namens break_continue.sh:

touch break_continue.sh

Öffnen Sie die Datei break_continue.sh in der WebIDE und fügen Sie den folgenden Inhalt hinzu:

#!/bin/bash

## Using break to exit a loop early
echo "Demonstration of break:"
for i in {1..10}; do
  if [ $i -eq 6 ]; then
    echo "Breaking the loop at $i"
    break
  fi
  echo $i
done

echo ## Print an empty line for readability

## Using continue to skip iterations
echo "Demonstration of continue (printing odd numbers):"
for i in {1..10}; do
  if [ $((i % 2)) -eq 0 ]; then
    continue
  fi
  echo $i
done

Lassen Sie uns dieses Skript analysieren:

  1. In der ersten Schleife verwenden wir break, um die Schleife zu verlassen, sobald i den Wert 6 erreicht.
  2. In der zweiten Schleife verwenden wir continue, um gerade Zahlen zu überspringen. Die Bedingung $((i % 2)) -eq 0 prüft, ob eine Zahl gerade ist (durch 2 teilbar ohne Rest).

Der Operator % berechnet den Rest einer Division (Modulo). Somit ergibt i % 2 bei geraden Zahlen 0 und bei ungeraden Zahlen 1.

Speichern Sie die Datei und machen Sie sie ausführbar:

chmod +x break_continue.sh

Führen Sie das Skript nun aus:

./break_continue.sh

Die Ausgabe sollte wie folgt aussehen:

Demonstration of break:
1
2
3
4
5
Breaking the loop at 6

Demonstration of continue (printing odd numbers):
1
3
5
7
9

Dies zeigt, wie break eine Schleife abrupt beenden kann und wie continue bestimmte Iterationen basierend auf einer Bedingung überspringen kann.

Zusammenfassung

In diesem Lab haben Sie drei Arten von Schleifen im Bash-Scripting kennengelernt:

  1. for-Schleifen, die über eine Liste von Elementen oder einen Zahlenbereich iterieren.
  2. while-Schleifen, die so lange laufen, wie eine Bedingung wahr ist.
  3. until-Schleifen, die so lange laufen, bis eine Bedingung wahr wird.

Zudem haben Sie gelernt, wie Sie mit break und continue mehr Kontrolle über den Ablauf Ihrer Schleifen gewinnen.

Diese Schleifenstrukturen sind grundlegend für viele Skripte und ermöglichen es Ihnen, repetitive Aufgaben effizient zu automatisieren. Üben Sie die Verwendung dieser Schleifen in Ihren eigenen Skripten, um sich mit ihrem Verhalten und ihren Einsatzmöglichkeiten vertraut zu machen.