🔐 1. Variablen, Vererbung & export
Variablen in der Shell werden ohne Leerzeichen um das Gleichheitszeichen herum zugewiesen. Mit export wandern sie in die Prozesstabelle aller Subprozesse:
# ⚠️ Keine Leerzeichen bei der Zuweisung!
SERVICE="auth-api" # Lokal: Nur in dieser Shell verfügbar
export PORT=8080 # Global: An alle Kind-Prozesse (z.B. node, python, skripte) vererbt
# Die wichtigste Variable: $PATH
echo $PATH # /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/bin
export PATH="/opt/tools/bin:$PATH" # Suchpfad für eigene DevOps-Skripte erweitern
⚙️ 2. Parameter Expansion & Command Substitution
Moderne Shell-Programmierung vermeidet langsame externe Tool-Aufrufe, wo immer Bash es nativ lösen kann:
# 🎯 1. Command Substitution $(...):
HOST=$(hostname)
UPTIME=$(uptime -p)
# 🎯 2. Parameter Expansion (Strings zerlegen & Fallbacks):
DATEI="/var/log/nginx/access.log"
echo ${DATEI%/*} # /var/log/nginx (Suffix ab letztem '/' abschneiden)
echo ${DATEI##*/} # access.log (Präfix bis zum letzten '/' abschneiden)
echo ${DATEI##*.} # log (Dateiendung)
# 🎯 3. Default-Werte:
PORT=${CUSTOM_PORT:-8080} # Nutzt 8080, falls CUSTOM_PORT nicht gesetzt ist
# 🎯 4. Shell-Arithmetik $(( ... )):
FREE_RAM=$(( TOTAL_RAM - USED_RAM ))
Lokale Variable vs. export: Eine lokale Variable ist wie ein Notizzettel in deiner Jackentasche – nur du kannst ihn lesen. Wenn du mit export arbeitest, machst du den Zettel zu einer DNA-Eigenschaft, die jedes Kind (jeder Subprozess) bei der Geburt automatisch mitbekommt!
📑 3. Cheat-Sheet: Parameter-Expansion & Arithmetik
| Syntax | Beispiel | Ergebnis / Zweck |
|---|---|---|
$(cmd) |
USER=$(whoami) |
Fängt Standardausgabe des Befehls ein |
${var:-fallback} |
${CLUSTER:-"prod"} |
Nutzt Fallback, falls $CLUSTER leer/ungesetzt |
${var##*/} |
${P##*/} |
Entfernt längstes Präfix bis / (Basename) |
${var%/*} |
${P%/*} |
Entfernt kürzestes Suffix ab / (Dirname) |
${var%.*} |
${file%.*} |
Entfernt Dateiendung |
${#var} |
${#str} |
Länge des Strings in Anzahl Zeichen |
$((a + b)) |
$(( (a * 100) / b )) |
Native Ganzzahl-Arithmetik |
🎯 Aufgaben & Checkliste in aufgabe.sh
Vermeide basename "$FILE" und dirname "$FILE" in Schleifen über Millionen Dateien! Native Parameter Expansion wie ${FILE##*/} läuft in Nanosekunden direkt im Bash-C-Core ohne Prozess-Forking.