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:
- if-else Anweisungen
- case Anweisungen
- for Schleifen
- 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:
if [ Bedingung ]; then
# Code, der ausgeführt wird, wenn die Bedingung wahr ist
fi
Beachte die eckigen Klammern um die Bedingung und das Semikolon vorthen
. Dasfi
am Ende schließt die if-Anweisung ab.
Hier ein einfaches Beispiel:
#!/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:
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:
#!/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:
if [ Bedingung1 ]; then
# Code für Bedingung1
elif [ Bedingung2 ]; then
# Code für Bedingung2
else
# Code, wenn keine Bedingung zutrifft
fi
Beispiel:
#!/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:
#!/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:
case $variable in
muster1)
# Code für muster1
;;
muster2)
# Code für muster2
;;
*)
# Standard-Code, wenn kein Muster passt
;;
esac
Beispiel:
#!/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
for variable in liste
do
# Code, der für jedes Element ausgeführt wird
done
Beispiel mit einer Liste von Zahlen:
#!/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:
#!/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:
#!/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:
while [ Bedingung ]
do
# Code, der ausgeführt wird, solange die Bedingung wahr ist
done
Beispiel:
#!/bin/bash
count=1
while [ $count -le 5 ]
do
echo "Durchlauf $count"
count=$((count + 1))
done
until Schleife
Syntax:
until [ Bedingung ]
do
# Code, der ausgeführt wird, bis die Bedingung wahr wird
done
Beispiel:
#!/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:
- Den Benutzer nach einer Zahl zwischen 1 und 10 fragt.
- Eine Schleife verwendet, um von 1 bis zu dieser Zahl zu zählen.
- Für jede Zahl prüft, ob sie gerade oder ungerade ist.
- Das Ergebnis ausgibt und am Ende eine Zusammenfassung anzeigt, wie viele gerade und ungerade Zahlen gefunden wurden.
Hier ist eine mögliche Lösung:
#!/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!