Sie kennen das Grundgerüst eines Skribts¶
#!nennt man Shebang./bin/bashgibt an, dass das Skript mit der Bash-Shell ausgeführt werden soll.- Der
echo-Befehl gibt eine Nachricht auf der Konsole aus.
Sie können ein Skript ausführbar machen und starten¶
rechte setzen eins von beiden:
ausführen:
In einem Skript Kommentare einfügen¶
#!/bin/bash
# Das ist ein Kommentar
echo "Hallo, Welt!" # Dies gibt "Hallo, Welt!" auf der Konsole aus
# Mehrzeilige Kommentare:
# Jede Zeile muss mit einem # beginnen,
# da Bash keine Block-Kommentare wie /* */ in C hat.
Shellvariablen¶
$0 – Skriptname¶
Aufruf in der Konsole:
Ausgabe:
$# – Anzahl der Argumente¶
Code (skript.sh):
Aufruf mit Argumenten:
Ausgabe:
$1 - $n – Positionsparameter (Argumente)¶
Code(Skript.sh):
Aufruf mit Argumenten:
Ausgabe:
Mit Variablen rechnen in Bash¶
Variablen definieren und ausgeben:¶
#!/bin/bash
# Variable definieren
name="Alice"
alter=25
# Variable ausgeben
echo "Name: $name"
echo "Alter: $alter"
Ausgabe:
Mit Variablen rechnen:¶
Bash unterstützt arithmetische Berechnungen mit $(()):
#!/bin/bash
# Zahlen definieren
a=10
b=5
# Rechnen
summe=$((a + b))
differenz=$((a - b))
produkt=$((a * b))
quotient=$((a / b))
rest=$((a % b))
# Ausgabe
echo "Summe: $summe"
echo "Differenz: $differenz"
echo "Produkt: $produkt"
echo "Quotient: $quotient"
echo "Rest: $rest"
Ausgabe:
Mit Kommabeträgen rechnen (bc verwenden)¶
Bash kann nicht direkt mit Dezimalzahlen rechnen, aber mit bc geht es:
#!/bin/bash
# Zahlen mit Komma
x=5.5
y=2.2
# Berechnung mit bc
summe=$(echo "$x + $y" | bc)
echo "Summe: $summe"
Ausgabe:
Sie können Benutzereingaben einlesen und den Wert von Variablen ausgeben¶
Einfache Benutzereingabe mit read¶
#!/bin/bash
# Eingabe einlesen
echo "Wie heißt du?"
read name
# Variable ausgeben
echo "Hallo, $name!"
Ausführung & Ausgabe:
Mehrere Eingaben auf einmal¶
#!/bin/bash
echo "Gib deinen Vornamen und Nachnamen ein:"
read vorname nachname
echo "Hallo, $vorname $nachname!"
Ausgabe:
Eine Zahl einlesen und damit rechnen¶
#!/bin/bash
echo "Gib eine Zahl ein:"
read zahl
doppelt=$((zahl * 2))
echo "Das Doppelte von $zahl ist $doppelt."
Ausgabe:
Sie können in einem Skript auf die beim Aufruf übergebenen Parameter zugreifen¶
Alle Argumente auf einmal ausgeben ($@ & $*)¶
Aufruf & Ausgabe:
$ ./skript.sh Eins Zwei Drei
Alle Argumente mit "$@": Eins Zwei Drei
Alle Argumente mit "$*": Eins Zwei Drei
Durch alle Argumente iterieren¶
Aufruf & Ausgabe:
Erklärung:¶
"$@"enthält alle übergebenen Argumente, wobei jedes Argument als eigener Wert behandelt wird.for arg in "$@"bedeutet:- Die
for-Schleife geht jedes Argument aus"$@"einzeln durch. - Jedes Argument wird der Variablen
argzugewiesen. - Der Code innerhalb der Schleife (
echo "$arg") wird für jedes Argument ausgeführt.
Sie kennen die Syntax von if [ ] .. then .. else .. fi und können Operatoren für Zahlen, Text, Dateien, Rechte und logische Operatoren korrekt anwenden¶
Syntax einer if-Anweisung in Bash:
if [ BEDINGUNG ]; then
# Codeblock falls BEDINGUNG wahr ist
else
# Codeblock falls BEDINGUNG falsch ist
fi
Operatoren in Bash:¶
Numerische Vergleiche:¶
| Operator | Bedeutung |
|---|---|
| -eq | Gleich (equal) |
| -ne | Ungleich (not equal) |
| -lt | Kleiner als (less than) |
| -le | Kleiner oder gleich (less than or equal) |
| -gt | Größer als (greater than) |
| -ge | Größer oder gleich (greater than or equal) |
Beispiel:
String-Vergleiche:¶
| Operator | Bedeutung |
|---|---|
| = | Gleich (equal) |
| != | Ungleich (not equal) |
| -z | String ist leer (zero-length) |
| -n | String ist nicht leer (non-zero-length) |
Beispiel:
Dateiprüfungen:¶
| Operator | Bedeutung |
|---|---|
| -e DATEI | Datei existiert |
| -f DATEI | Datei ist eine reguläre Datei |
| -d VERZEICHNIS | Ist ein Verzeichnis |
| -s DATEI | Datei ist nicht leer |
| -r DATEI | Datei ist lesbar |
| -w DATEI | Datei ist schreibbar |
| -x DATEI | Datei ist ausführbar |
Beispiel:
Logische Operatoren¶
| Operator | Bedeutung |
|---|---|
| -a | Logisches UND (deprecated, besser && verwenden) |
| -o | Logisches ODER (deprecated, besser ` |
| ! | Negation |
Alternative mit [[ ... ]] (empfohlen für komplexe Bedingungen):
Sie kennen die Syntax der Mehrfachverzweigung mit case und können diese korrekt anwenden¶
Syntax von case¶
case VARIABLE in
Muster1)
# Codeblock für Muster1
;;
Muster2)
# Codeblock für Muster2
;;
*)
# Standardfall (optional)
;;
esac
🔹 ;; beendet jeden Fall (alternativ ;& oder ;;& für spezielle Fälle).
🔹 * ist der Default-Fall (wird ausgeführt, wenn kein anderes Muster passt).
Beispiele für case¶
- Einfache Menüauswahl:
echo "Wähle eine Option: (start, stop, restart)"
read eingabe
case "$eingabe" in
start)
echo "Dienst wird gestartet..."
;;
stop)
echo "Dienst wird gestoppt..."
;;
restart)
echo "Dienst wird neu gestartet..."
;;
*)
echo "Ungültige Eingabe!"
;;
esac
- Mehrere Muster pro Fall:
read -p "Gib eine Datei-Endung ein: " endung
case "$endung" in
jpg|png|gif)
echo "Das ist ein Bildformat."
;;
mp3|wav)
echo "Das ist ein Audioformat."
;;
txt|md)
echo "Das ist eine Textdatei."
;;
*)
echo "Unbekanntes Dateiformat."
;;
esac
Mehrere Muster werden mit | (Pipe) getrennt.
casemit regulären Ausdrücken (Erweiterte Muster)
read -p "Gib eine Zahl ein: " zahl
case "$zahl" in
[0-9])
echo "Das ist eine einstellige Zahl."
;;
[1-9][0-9])
echo "Das ist eine zweistellige Zahl."
;;
*)
echo "Das ist eine große Zahl oder keine Zahl."
;;
esac
[0-9] und [1-9][0-9] sind Muster, ähnlich wie reguläre Ausdrücke.
Spezialfälle: ;& und ;;&¶
;& (Weiter zur nächsten Bedingung, ohne Bedingung zu prüfen)
read -p "Gib eine Farbe ein: " farbe
case "$farbe" in
rot)
echo "Primärfarbe"
;&
blau|gelb)
echo "Diese Farbe ist wichtig!"
;;
*)
echo "Andere Farbe."
;;
esac
Hier wird für "rot" zwei Codeblöcke ausgeführt (rot + blau|gelb).
;;& (Springt zur nächsten Prüfung weiter)
read -p "Gib eine Nummer ein: " nummer
case "$nummer" in
1)
echo "Das ist Eins."
;;&
[0-9])
echo "Einstellige Zahl erkannt."
;;
*)
echo "Andere Zahl."
;;
esac
Wenn der Nutzer "1" eingibt, wird zuerst "Das ist Eins." ausgegeben und dann die nächste Bedingung geprüft ([0-9]).
| Syntax | Verhalten |
|---|---|
;; |
Beendet den aktuellen Fall (Standardverhalten). |
;& |
Führt den nächsten Fall ohne Bedingungsprüfung aus. |
;;& |
Prüft die nächste Bedingung und führt sie aus, falls sie passt. |
Das -p-Flag bei read in Bash steht für Prompt und ermöglicht es, eine Eingabeaufforderung direkt anzuzeigen, ohne echo zu verwenden.
Sie kennen die Syntax der while-Schleife und können diese korrekt anwenden¶
Syntax einer while-Schleife:
🔹 Die Bedingung wird vor jeder Iteration geprüft.
🔹 Die Schleife läuft so lange, wie die Bedingung wahr ist.
-
Beispiel: Einfacher Zähler¶
#!/bin/bash
zahl=1
while [ "$zahl" -le 5 ]; do
echo "Durchlauf $zahl"
((zahl++)) # Erhöht die Zahl um 1
done
Gibt Durchlauf 1 bis Durchlauf 5 aus.
-
Unendliche Schleife (
while true)¶
🔹 true ist immer wahr → Endlosschleife.
🔹 Beenden mit Strg + C.
-
whilemit Benutzereingabe¶
read -p "Gib 'exit' ein, um zu stoppen: " input
while [ "$input" != "exit" ]; do
echo "Du hast '$input' eingegeben. Versuche es erneut."
read -p "Gib 'exit' ein, um zu stoppen: " input
done
echo "Programm beendet!"
💡 Die Schleife fragt immer wieder nach einer Eingabe, bis der Nutzer "exit" eingibt.
-
whilemituntil(Gegenteil)¶
| Schleife | Läuft solange... |
|---|---|
| while | die Bedingung wahr ist |
| until | die Bedingung falsch ist |
Beispiel mit until: