Variablen
Zuweisung und Verwendung
Abschnitt betitelt „Zuweisung und Verwendung“NAME="Linux" # Zuweisung – kein Leerzeichen um das =!echo "$NAME" # Verwendung – immer in Anführungszeichenecho "Hallo $NAME" # in Strings einbettenVariablen sind immer Strings – Bash kennt keinen Typ. Zahlen werden als Strings gespeichert und nur in arithmetischen Ausdrücken als Zahlen behandelt.
Spezialvariablen
Abschnitt betitelt „Spezialvariablen“Positionsparameter – Argumente des Skripts
Abschnitt betitelt „Positionsparameter – Argumente des Skripts“#!/bin/bashecho "Skriptname: $0"echo "Erstes Argument: $1"echo "Zweites Argument: $2"echo "Alle Argumente: $@"echo "Anzahl Argumente: $#"./skript.sh hallo welt# Erstes Argument: hallo# Zweites Argument: welt# Alle Argumente: hallo welt# Anzahl Argumente: 2| Variable | Bedeutung |
|---|---|
$0 | Name des Skripts |
$1 … $9 | Positionsparameter 1–9 |
${10} … | Positionsparameter ab 10 (Klammern nötig!) |
$@ | Alle Parameter als separate Wörter |
$* | Alle Parameter als ein Wort |
$# | Anzahl der Parameter |
Prozess- und Statusvariablen
Abschnitt betitelt „Prozess- und Statusvariablen“| Variable | Bedeutung |
|---|---|
$? | Exit-Code des letzten Befehls (0 = Erfolg) |
$$ | PID des aktuellen Skripts |
$! | PID des zuletzt in den Hintergrund geschickten Prozesses |
$- | Aktive Shell-Optionen |
cp quelle.txt ziel.txtecho "Exit-Code: $?" # 0 bei Erfolg, 1 bei Fehler
sleep 10 &echo "PID des sleep: $!"Parameter-Expansion
Abschnitt betitelt „Parameter-Expansion“Bash bietet mächtige Möglichkeiten, Variablen beim Einsetzen zu transformieren:
Standardwerte
Abschnitt betitelt „Standardwerte“echo "${NAME:-Unbekannt}" # Wert von NAME, oder "Unbekannt" wenn leer/undefiniertecho "${NAME:=Standard}" # wie :- , aber weist Standard auch zu wenn leerecho "${NAME:+Vorhanden}" # "Vorhanden" wenn NAME gesetzt, sonst leerecho "${1:?'Argument fehlt!'}" # Fehlermeldung und Abbruch wenn $1 leer/undefiniert#!/bin/bashset -euo pipefailZIEL="${1:?'Bitte Zielverzeichnis angeben!'}"# → Skript bricht mit Fehlermeldung ab wenn $1 fehltString-Operationen
Abschnitt betitelt „String-Operationen“DATEI="/home/alice/dokumente/bericht.txt"
echo "${#DATEI}" # Länge: 38echo "${DATEI##*/}" # Dateiname: bericht.txt (längster Präfix bis /)echo "${DATEI%/*}" # Verzeichnis: /home/alice/dokumente (kürzestes Suffix ab /)echo "${DATEI%.txt}" # ohne Endung: /home/alice/dokumente/berichtecho "${DATEI/alice/bob}" # ersetzen: /home/bob/dokumente/bericht.txtecho "${DATEI^^}" # Großbuchstaben (bash 4+)echo "${DATEI,,}" # Kleinbuchstaben (bash 4+)Benutzereingabe: read
Abschnitt betitelt „Benutzereingabe: read“read -p "Name eingeben: " NAMEecho "Hallo, $NAME!"
read -sp "Passwort: " PASSWORT # -s: kein Echo (für Passwörter)echo "" # Zeilenumbruch nach verdeckter Eingabe
read -t 10 -p "Eingabe (10s): " ANTWORT || echo "Timeout!"read ohne Variablenname speichert die Eingabe in $REPLY.
Kommando-Substitution
Abschnitt betitelt „Kommando-Substitution“Wie im Shell-Substitutionen-Artikel gezeigt, lässt sich die Ausgabe eines Befehls direkt in eine Variable schreiben:
DATUM=$(date +%Y-%m-%d)BENUTZER=$(whoami)ZEILENANZAHL=$(wc -l < datei.txt)
echo "Backup vom $DATUM, erstellt von $BENUTZER"