Variablen & Quoting
Bash-Scripting
Variablen in Bash
Eine Variable speichert einen Wert unter einem Namen. In Bash weist du sie ohne Leerzeichen um das Gleichheitszeichen zu und liest sie mit einem vorangestellten $:
name="Anna" echo "Hallo $name" # Ausgabe: Hallo Anna
Stolperfalle: name = "Anna" (mit Leerzeichen) funktioniert nicht! Bash interpretiert name dann als Befehl. Korrekt ist name="Anna" ohne jedes Leerzeichen.
Anführungszeichen: " vs '
Der Unterschied zwischen doppelten und einfachen Anführungszeichen ist zentral:
name="Anna" echo "Hallo $name" # Hallo Anna -> Variablen werden ersetzt echo 'Hallo $name' # Hallo $name -> alles wörtlich
In doppelten Anführungszeichen werden Variablen und $(...) ausgewertet. In einfachen Anführungszeichen bleibt alles wörtlich stehen. Setze Variablen im Zweifel immer in doppelte Anführungszeichen, damit Leerzeichen im Wert nicht zu Fehlern führen.
Befehlssubstitution: $(...)
Mit $(...) führst du einen Befehl aus und speicherst dessen Ausgabe:
heute=$(date +%F) anzahl=$(ls | wc -l) echo "Am $heute liegen hier $anzahl Dateien."
Die ältere Schreibweise mit Rückwärts-Anführungszeichen (Backticks) gilt als veraltet – nutze $(...), das lässt sich auch verschachteln.
Argumente: $1, $@, $#
Werte, die du beim Aufruf eines Skripts übergibst, stehen als nummerierte Variablen bereit:
| Variable | Bedeutung |
|---|---|
$0 | Name des Skripts |
$1, $2 … | erstes, zweites Argument |
$@ | alle Argumente einzeln |
$# | Anzahl der Argumente |
#!/bin/bash echo "Skript: $0" echo "Erstes Argument: $1" echo "Anzahl: $#"
Eingaben lesen mit read
#!/bin/bash read -p "Wie heißt du? " name echo "Hallo, $name!" read -s -p "Passwort: " pw # -s versteckt die Eingabe
Welche Schreibweise gibt Hallo Anna aus, wenn name=Anna?
Sicherheit & gute Praxis
Setze Variablen in Skripten konsequent in doppelte Anführungszeichen ("$datei"), sonst zerlegen Leerzeichen oder * im Wert deinen Befehl unerwartet – eine häufige Fehlerquelle und Sicherheitslücke. Verarbeite Benutzereingaben aus read niemals ungeprüft in gefährlichen Befehlen. Mit diesen Grundlagen kannst du als Nächstes Bedingungen einsetzen.