Bash Grundkurs #3: Kontrollstrukturen in Bash

Willkommen zum dritten Artikel unserer technischen Wiki-Serie über Linux und Bash-Programmierung!

Nachdem wir in den vorherigen Beiträgen die Grundlagen des Erstellens und Ausführens von Bash-Skripten sowie die Verwendung von Variablen kennengelernt haben, widmen wir uns heute den Kontrollstrukturen in Bash. Kontrollstrukturen sind wesentliche Bausteine der Programmierung, die es dir ermöglichen, den Ablauf deines Skripts zu steuern und auf verschiedene Bedingungen zu reagieren.

Was sind Kontrollstrukturen?

Kontrollstrukturen in Bash ermöglichen es dir, Entscheidungen zu treffen, Code basierend auf Bedingungen auszuführen und Aktionen zu wiederholen. Die wichtigsten Kontrollstrukturen, die wir in diesem Artikel behandeln werden, sind:

  1. if-else Anweisungen
  2. case Anweisungen
  3. for Schleifen
  4. while und until Schleifen

Jede dieser Strukturen hat ihre eigenen Anwendungsfälle und Besonderheiten, die wir im Detail erkunden werden. Lass uns ohne weitere Umschweife in die Welt der Bash-Kontrollstrukturen eintauchen!

Bedingte Anweisungen

if-else Anweisungen

Die if-else Anweisung ist eine der grundlegendsten Kontrollstrukturen in Bash. Sie ermöglicht es dir, Code basierend auf einer oder mehreren Bedingungen auszuführen.

Syntax:

Die einfachste Form der if-Anweisung sieht so aus:

Bash
if [ Bedingung ]; then
    # Code, der ausgeführt wird, wenn die Bedingung wahr ist
fi
Beachte die eckigen Klammern um die Bedingung und das Semikolon vor then. Das fi am Ende schließt die if-Anweisung ab.

Hier ein einfaches Beispiel:

Bash
#!/bin/bash

alter=18

if [ $alter -ge 18 ]; then
    echo "Du bist volljährig."
fi
In diesem Beispiel wird die Nachricht nur ausgegeben, wenn die Variable alter größer oder gleich 18 ist.
if-else

Oft möchtest du auch Code ausführen, wenn die Bedingung nicht erfüllt ist. Dafür verwendest du die if-else Struktur:

Bash
if [ Bedingung ]; then
    # Code, der ausgeführt wird, wenn die Bedingung wahr ist
else
    # Code, der ausgeführt wird, wenn die Bedingung falsch ist
fi

Beispiel:

Bash
#!/bin/bash

alter=16

if [ $alter -ge 18 ]; then
    echo "Du bist volljährig."
else
    echo "Du bist minderjährig."
fi
if-elif-else

Für mehrere Bedingungen kannst du elif (else if) verwenden:

Bash
if [ Bedingung1 ]; then
    # Code für Bedingung1
elif [ Bedingung2 ]; then
    # Code für Bedingung2
else
    # Code, wenn keine Bedingung zutrifft
fi

Beispiel:

Bash
#!/bin/bash

note=85

if [ $note -ge 90 ]; then
    echo "Sehr gut!"
elif [ $note -ge 80 ]; then
    echo "Gut!"
elif [ $note -ge 70 ]; then
    echo "Befriedigend."
else
    echo "Verbesserungswürdig."
fi

Vergleichsoperatoren

In Bash gibt es verschiedene Vergleichsoperatoren für Zahlen und Zeichenketten:

  • Für Zahlen:
    • -eq: gleich
    • -ne: ungleich
    • -gt: größer als
    • -ge: größer oder gleich
    • -lt: kleiner als
    • -le: kleiner oder gleich
  • Für Zeichenketten:
    • =: gleich
    • !=: ungleich
    • -z: Zeichenkette ist leer
    • -n: Zeichenkette ist nicht leer

Beispiel für Zeichenkettenvergleich:

Bash
#!/bin/bash

name="Max"

if [ "$name" = "Max" ]; then
    echo "Hallo Max!"
elif [ -z "$name" ]; then
    echo "Der Name ist leer."
else
    echo "Hallo, wie heißt du?"
fi
case Anweisungen

Die case Anweisung ist nützlich, wenn du viele mögliche Bedingungen für eine Variable hast. Sie ist oft übersichtlicher als verschachtelte if-elif-else Strukturen.

Syntax:

Bash
case $variable in
    muster1)
        # Code für muster1
        ;;
    muster2)
        # Code für muster2
        ;;
    *)
        # Standard-Code, wenn kein Muster passt
        ;;
esac

Beispiel:

Bash
#!/bin/bash

fruit="Apfel"

case $fruit in
    "Apfel")
        echo "Äpfel sind rot oder grün."
        ;;
    "Banane")
        echo "Bananen sind gelb."
        ;;
    "Orange")
        echo "Orangen sind orange."
        ;;
    *)
        echo "Unbekannte Frucht."
        ;;
esac
for Schleifen

For-Schleifen in Bash werden verwendet, um eine Aktion für eine bestimmte Anzahl von Iterationen oder für jedes Element in einer Liste auszuführen.

Syntax

Bash
for variable in liste
do
    # Code, der für jedes Element ausgeführt wird
done

Beispiel mit einer Liste von Zahlen:

Bash
#!/bin/bash

for i in 1 2 3 4 5
do
    echo "Nummer $i"
done
Sequenzen generieren

Du kannst auch Sequenzen mit dem Befehl seq generieren:

Bash
#!/bin/bash

for i in $(seq 1 5)
do
    echo "Nummer $i"
done
Über Dateien iterieren

For-Schleifen sind besonders nützlich, um über Dateien in einem Verzeichnis zu iterieren:

Bash
#!/bin/bash

for file in *.txt
do
    echo "Verarbeite Datei: $file"
    # Hier könntest du weitere Aktionen mit der Datei durchführen
done

while und until Schleifen

While-Schleifen führen einen Codeblock aus, solange eine Bedingung wahr ist. Until-Schleifen führen einen Codeblock aus, bis eine Bedingung wahr wird.

while Schleife

Syntax:

Bash
while [ Bedingung ]
do
    # Code, der ausgeführt wird, solange die Bedingung wahr ist
done

Beispiel:

Bash
#!/bin/bash

count=1

while [ $count -le 5 ]
do
    echo "Durchlauf $count"
    count=$((count + 1))
done

until Schleife

Syntax:

Bash
until [ Bedingung ]
do
    # Code, der ausgeführt wird, bis die Bedingung wahr wird
done

Beispiel:

Bash
#!/bin/bash

count=1

until [ $count -gt 5 ]
do
    echo "Durchlauf $count"
    count=$((count + 1))
done

Übung

Um dein Verständnis der Kontrollstrukturen zu festigen, hier eine Übungsaufgabe.

Schreibe ein Bash-Skript, das:

  1. Den Benutzer nach einer Zahl zwischen 1 und 10 fragt.
  2. Eine Schleife verwendet, um von 1 bis zu dieser Zahl zu zählen.
  3. Für jede Zahl prüft, ob sie gerade oder ungerade ist.
  4. Das Ergebnis ausgibt und am Ende eine Zusammenfassung anzeigt, wie viele gerade und ungerade Zahlen gefunden wurden.

Hier ist eine mögliche Lösung:

Bash
#!/bin/bash

echo "Gib eine Zahl zwischen 1 und 10 ein:"
read number

if [ $number -lt 1 ] || [ $number -gt 10 ]; then
    echo "Die Zahl muss zwischen 1 und 10 liegen."
    exit 1
fi

even_count=0
odd_count=0

for i in $(seq 1 $number)
do
    if [ $((i % 2)) -eq 0 ]; then
        echo "$i ist gerade"
        even_count=$((even_count + 1))
    else
        echo "$i ist ungerade"
        odd_count=$((odd_count + 1))
    fi
done

echo "Zusammenfassung:"
echo "Gerade Zahlen: $even_count"
echo "Ungerade Zahlen: $odd_count"

Fazit

Kontrollstrukturen sind das Rückgrat jedes Bash-Skripts. Sie ermöglichen es dir, komplexe Logik zu implementieren und deine Skripte dynamisch und anpassungsfähig zu gestalten. Mit if-else Anweisungen kannst du Entscheidungen treffen, case Anweisungen helfen dir, übersichtlich zwischen verschiedenen Optionen zu wählen, und Schleifen ermöglichen es dir, Aktionen zu wiederholen und über Daten zu iterieren.

In diesem Artikel haben wir die grundlegenden Kontrollstrukturen in Bash behandelt: if-else Anweisungen, case Anweisungen, for Schleifen sowie while und until Schleifen. Jede dieser Strukturen hat ihre eigenen Stärken und Anwendungsfälle. Mit der Zeit und durch Übung wirst du ein Gefühl dafür entwickeln, wann du welche Struktur am besten einsetzt.

Denk daran, dass gute Bash-Skripte nicht nur funktionieren, sondern auch lesbar und wartbar sein sollten. Verwende aussagekräftige Variablennamen, kommentiere deinen Code und strukturiere ihn sauber. Je komplexer deine Skripte werden, desto wichtiger wird es, diese Prinzipien zu beachten.

In unserem nächsten Artikel werden wir uns mit Funktionen in Bash beschäftigen – einem mächtigen Werkzeug, um deinen Code zu organisieren und wiederzuverwenden.

Bis dahin, happy scripting!

Kommentar verfassen