if / elif / else
if prüft den Exit-Status eines Befehls. Meist ist das [[ ... ]] (Bash-Test) oder test:
zahl=7
if [[ $zahl -gt 10 ]]; then
echo "groß"
elif [[ $zahl -gt 5 ]]; then
echo "mittel"
else
echo "klein"
fi
if grep -q "bash" <<< "ich lerne bash"; then
echo "gefunden"
fi
if ! command -v gibtsnicht >/dev/null; then
echo "Programm fehlt"
fiAusgabe
mittel gefunden Programm fehlt
Testoperatoren
| Zahlen | Bedeutung | Text | Bedeutung |
|---|---|---|---|
-eq -ne | gleich, ungleich | == != | gleich, ungleich |
-lt -le | kleiner (gleich) | < > | alphabetisch |
-gt -ge | größer (gleich) | -z -n | leer, nicht leer |
=~ | passt auf Regex |
| Dateitest | Bedeutung |
|---|---|
-e | existiert |
-f -d | normale Datei, Verzeichnis |
-r -w -x | lesbar, schreibbar, ausführbar |
-s | nicht leer |
-L | symbolischer Link |
a="Hallo"; b=""
[[ $a == "Hallo" ]] && echo "gleich"
[[ $a == H* ]] && echo "beginnt mit H (Muster)"
[[ -z $b ]] && echo "b ist leer"
[[ -n $a ]] && echo "a ist nicht leer"
[[ "apfel" < "birne" ]] && echo "alphabetisch kleiner"
[[ 2025-03-15 =~ ^([0-9]{4})-([0-9]{2}) ]] && echo "Jahr ${BASH_REMATCH[1]}, Monat ${BASH_REMATCH[2]}"
[[ 5 -gt 3 && 2 -lt 4 ]] && echo "beides wahr"
[[ 1 -eq 2 || -d / ]] && echo "mindestens eins wahr"
d=$(mktemp -d)
touch "$d/datei"
[[ -f "$d/datei" ]] && echo "ist Datei"
[[ -d "$d" ]] && echo "ist Ordner"
[[ -e "$d/nix" ]] || echo "existiert nicht"Ausgabe
gleich beginnt mit H (Muster) b ist leer a ist nicht leer alphabetisch kleiner Jahr 2025, Monat 03 beides wahr mindestens eins wahr ist Datei ist Ordner existiert nicht
n=12
if (( n % 2 == 0 )); then echo "gerade"; fi
(( n += 3 )); echo "$n"
(( n > 10 && n < 20 )) && echo "zwischen 10 und 20"Ausgabe
gerade 15 zwischen 10 und 20
case: Mustervergleich
eingabe="ja"
case "$eingabe" in
ja|j|yes) echo "zugestimmt" ;;
nein|n) echo "abgelehnt" ;;
[0-9]*) echo "beginnt mit Ziffer" ;;
*) echo "unbekannt" ;;
esac
datei="foto.jpg"
case "${datei##*.}" in
jpg|png|gif) echo "Bild" ;;
txt|md) echo "Text" ;;
*) echo "anderes" ;;
esacAusgabe
zugestimmt Bild
Standardwerte mit Parameter-Erweiterung
unset name
echo "${name:-Gast}" # Ersatz, wenn leer/ungesetzt
echo "[$name]"
echo "${name:=Standard}" # Ersatz und zuweisen
echo "[$name]"
echo "${name:+gesetzt}" # Text nur, wenn gesetzt
echo "${neu:?Variable fehlt}" 2>&1 | head -1Ausgabe
Gast [] Standard [Standard] gesetzt
Merke
ifwertet den Exit-Status eines Befehls aus[[ ... ]]für Tests (Text, Zahlen, Dateien),(( ... ))zum Rechnen- Zahlen mit
-eq -lt -gt, Text mit== !=, Muster mit==und=~ - Dateitests:
-f -d -e -r -w -x -s casefür Mustervergleiche;${var:-standard}für Standardwerte
Aufgabe
Schreibe ein Skript, das prüft, ob ein Pfad eine Datei, ein Ordner oder nicht vorhanden ist.