⚡ Lehrpfad 2: Scripting & Text-Mining

Bash 06: Schleifen, Arrays, Hashmaps & getopts

Verarbeite Datenmengen mit while IFS= read -r, nutze Assoziative Arrays (declare -A) als Key-Value-Speicher und baue CLI-Tools mit getopts.

🔄 1. Schleifen & Sicheres Stream-Reading

Das korrekte Einlesen strukturierter Datenzeilen (z.B. CSV, Passwörter, Logfiles) ist eine fundamentale DevOps-Kompetenz:

# 🎯 1. Sicheres zeilenweises Einlesen:
while IFS= read -r line; do
  echo "Verarbeite: $line"
done < /etc/hosts

# 🎯 2. CSV-Parsing direkt in der Shell:
while IFS=',' read -r host ip status; do
  echo "Server $host ($ip) ist $status"
done < servers.csv

🗂️ 2. Indizierte vs. Assoziative Arrays (declare -A)

Seit Bash 4 kannst du echte Key-Value-Maps im Speicher halten:

# 🎯 1. Indiziertes Array:
SERVICES=("nginx" "postgres" "redis")
SERVICES+=("rabbitmq")
echo "Erster Dienst: ${SERVICES[0]}"
echo "Anzahl Dienste: ${#SERVICES[@]}"

# 🎯 2. Assoziatives Array (Hashmap):
declare -A PORT_MAP=(
  ["http"]="80"
  ["https"]="443"
  ["ssh"]="22"
)
PORT_MAP["database"]="5432"

echo "HTTPS-Port: ${PORT_MAP["https"]}"
echo "Alle Keys:  ${!PORT_MAP[@]}"
🏷️ Didaktische Analogie: Schuhkartons vs. Adressbuch

Indiziertes Array (arr[0]): Wie ein Stapel nummerierter Schuhkartons. Du findest Dinge nur über ihre Etagen-Nummer (0, 1, 2...).

Assoziatives Array (declare -A): Dein Adressbuch. Du suchst nicht nach Seite 4, sondern schlägst direkt das Stichwort "database" auf und hast sofort die IP-Adresse zur Hand!

📑 3. Cheat-Sheet: Arrays & getopts

Konstrukt Beispiel Zweck
declare -A map declare -A conf=([a]=1 [b]=2) Deklariert assoziatives Array (Key-Value)
${!map[@]} for k in "${!map[@]}"; do Iteriert über alle Keys der Map
${map[@]} echo "${map[@]}" Liefert alle Werte (Values)
while IFS= read -r while IFS= read -r l; do Standard für zeilenweises Einlesen
getopts "e:p:v" opt ./script.sh -e prod -p 443 -v POSIX-konformes Parsing von CLI-Optionen

🎯 Aufgaben & Checkliste in aufgabe.sh

💡 Tipp: getopts & OPTIND Reset

Wenn du getopts innerhalb von Funktionen aufrufst, setze zu Beginn immer local OPTIND=1, damit nachfolgende Funktionsaufrufe den Parsing-Index von vorne beginnen!

💻 In Web-IDE öffnen → ← Zurück zu Bash 05 Weiter zu Bash 07 →