🐧 Linux Bash & Cloud DevOps

Bash 03: Variablen, Environment & Subshells

Verstehe Prozess-Umgebungen, vererbe Variablen mit export, nutze Command Substitution und meistere native String-Parameter-Expansion.

🔐 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 ))
🧬 Didaktische Analogie: Vererbung in der Prozesstabelle

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

💡 Performance-Tipp: Subprozesse einsparen

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.

💻 In Web-IDE öffnen → ← Zurück zu Bash 02 Weiter zu Bash 04 →