Aufgaben-Python/courses/bash/08_robuste_skripte_und_debugging/aufgabe.sh

50 lines
2 KiB
Bash

#!/usr/bin/env bash
# ==============================================================================
# 🐧 BASH 08: ROBUSTE SKRIPTE, STRICT MODE, TRAPS & DEBUGGING
# ==============================================================================
# 🎯 TEILZIEL 1 (TODO 1): Strict Mode aktivieren.
# Aktiviere `set -euo pipefail` und gib "STRICT_MODE_ON" aus.
aktiviere_strict_mode() {
# TODO: Aktiviere set -euo pipefail
echo "STRICT_MODE_ON"
}
# 🎯 TEILZIEL 2 (TODO 2): Strukturierter DevOps-Logger mit Stream-Trennung.
# Formatiere die Ausgabe als: `[$(date +'%Y-%m-%d %H:%M:%S')] [$1] $2`
# - Wenn $1 == "ERROR" oder $1 == "FATAL": Leite die Ausgabe nach stderr (FD 2) um.
# - Für alle anderen Levels (INFO, WARN, DEBUG): Leite nach stdout (FD 1) um.
devops_logger() {
local level="$1"
local meldung="$2"
# TODO: Formatiere Zeitstempel und trenne stdout/stderr
return 0
}
# 🎯 TEILZIEL 3 (TODO 3): Sichere temporäre Ressourcen mit `trap` & `mktemp`.
# Erstelle ein temporäres Verzeichnis mit `mktemp -d /tmp/devops_XXXXXX`
# und richte einen `trap 'rm -rf "$temp_dir"' EXIT` ein.
# Gib den Pfad des temporären Verzeichnisses auf stdout aus.
erstelle_temp_verzeichnis_mit_cleanup() {
# TODO: Erstelle Verzeichnis mit mktemp -d und registriere EXIT trap
return 0
}
# 🎯 TEILZIEL 4 (TODO 4): Exklusive Lock-Ausführung mit `flock`.
# Führe "$2" (Befehl) geschützt durch die Lock-Datei "$1" mit `flock -n` (non-blocking) aus.
# - Wenn Lock erfolgreich: Gib den Exit-Code des Befehls zurück.
# - Wenn Lock blockiert ist: Schreibe "RESOURCE_LOCKED" nach stderr und gib Exit-Code 1 zurück.
fuehre_exklusiv_mit_lock_aus() {
local lock_file="$1"
local befehl="$2"
# TODO: Nutze flock -n "$lock_file" -c "$befehl"
return 0
}
# 🎯 TEILZIEL 5 (TODO 5): Debug Trace Modus temporär steuern.
# Aktiviere temporär den Bash-Trace-Modus `set -x`, führe "$1" aus und deaktiviere mit `set +x`.
debug_trace_ausfuehren() {
local befehl="$1"
# TODO: Schalte set -x ein, führe befehl aus, schalte mit set +x aus
return 0
}