Sicheres, robustes Bash-Skript: Fehler, Locking, Logs und Dry-Run

Erzeuge ein serverfertiges Bash-Skript: Strict Mode, Aufräumen per trap, Argumente mit getopts, Lock gegen parallele Läufe, Logging, Dry-Run-Modus und Code ohne ShellCheck-Warnungen. Entwickelt für ChatGPT, Claude, Gemini und Microsoft Copilot. Er enthält 4 anpassbare Variablen und lässt sich kostenlos mit einem Klick kopieren.

Fortgeschritten · Code · Redaktionelle Prüfung ausstehend

Prompt

Handle als Linux-Systemadministrator, der wartbare und sichere Shell-Skripte schreibt.

Ich brauche ein Skript, das Folgendes tut: {{aufgabe}}
- Ausführungsumgebung: {{umgebung}}
- Eingaben (Argumente, Dateien, Variablen): {{eingaben}}
- Was es ändert oder löscht: {{auswirkungen}}

Liefere:
1. Das vollständige Skript mit:
   - Passendem Shebang und Strict Mode (`set -Eeuo pipefail`) oder dem Äquivalent, falls die Shell nicht Bash ist, inklusive Erklärung der Fallstricke.
   - Einer `usage`-Funktion und Argumentverarbeitung mit `getopts`, inklusive `-h`, `-v` (ausführlich) und `-n` (Dry-Run).
   - Abhängigkeitsprüfung mit `command -v` und klaren Meldungen, wenn etwas fehlt.
   - Stets gequoteten Variablen, `local` in Funktionen und ohne `eval`.
   - Temporären Dateien mit `mktemp` und Aufräumen per `trap` auf `EXIT`, `INT` und `TERM`.
   - Einem Lock mit `flock` (oder einer portablen Alternative), um zwei gleichzeitige Läufe zu verhindern.
   - Logs mit Zeitstempel auf stderr und optional in eine Datei.
   - Dokumentierten Exit-Codes.
   - Im Dry-Run-Modus der Ausgabe dessen, was passieren würde, ohne etwas Destruktives auszuführen.
2. Eine Erklärung jedes Blocks und jeder gefährlichen Zeile (Löschen, Berechtigungen, `sudo`).
3. Die Überprüfung: ShellCheck ohne Warnungen sowie einige Tests mit bats-core oder ein manuelles Vorgehen in einem Testverzeichnis.
4. Die Planung mit cron oder einem systemd-Timer, falls sinnvoll, inklusive PATH und benötigter Variablen.

Einschränkungen:
- Jedes `rm` oder Überschreiben muss vorher prüfen, dass der Pfad weder leer noch `/` ist.
- Erfinde keine Pfade oder Servernamen: nutze meine oder [AUSFÜLLEN].
- Ist die Aufgabe unklar oder gefährlich, frag nach, bevor du das Skript schreibst.
- Empfiehl, zuerst mit `-n` und außerhalb der Produktion zu testen.

So verwenden Sie ihn

  1. Beschreibe die Aufgabe Schritt für Schritt so, wie du sie von Hand erledigen würdest.
  2. Nenne das genaue System (Distribution, macOS oder Container), denn davon hängt die verfügbare Shell ab.
  3. Lass ShellCheck laufen, führe mit -n aus und prüfe die Ausgabe, bevor du den Dry-Run entfernst.

Anwendungsbeispiel

Aufgabe: Logs älter als 7 Tage in /var/log/meineapp komprimieren und ältere als 30 Tage löschen · Umgebung: Debian 12 mit Bash 5 · Auswirkung: löscht alte Dateien.

Beispielergebnis

1. Skript

#!/usr/bin/env bash
# logs-rotieren.sh — .log älter als N Tage komprimieren, .gz älter als M Tage löschen
set -Eeuo pipefail

LOG_DIR="/var/log/meineapp"; TAGE_KOMPRIMIEREN=7; TAGE_LOESCHEN=30
DRY_RUN=0; VERBOSE=0; LOCK="/run/lock/logs-rotieren.lock"

log()   { printf '%s [%s] %s\n' "$(date '+%F %T')" "$1" "$2" >&2; }
usage() { echo "Aufruf: ${0##*/} [-h] [-v] [-n] [-d verz] [-c tage] [-r tage]"; }
run()   { if (( DRY_RUN )); then log DRY "$*"; return 0; fi
          if (( VERBOSE )); then log INFO "$*"; fi; "$@"; }

while getopts ":hvnd:c:r:" opt; do
  case "$opt" in
    h) usage; exit 0 ;;  v) VERBOSE=1 ;;  n) DRY_RUN=1 ;;
    d) LOG_DIR="$OPTARG" ;;  c) TAGE_KOMPRIMIEREN="$OPTARG" ;;  r) TAGE_LOESCHEN="$OPTARG" ;;
    *) usage; exit 1 ;;
  esac
done

# Niemals auf leerem Pfad oder auf / arbeiten
[[ -n "$LOG_DIR" && "$LOG_DIR" != "/" && -d "$LOG_DIR" ]] || { log ERROR "ungültiges Verzeichnis: $LOG_DIR"; exit 2; }
[[ "$TAGE_KOMPRIMIEREN$TAGE_LOESCHEN" =~ ^[0-9]+$ ]] || { log ERROR "Tage müssen ganze Zahlen sein"; exit 1; }
command -v gzip >/dev/null || { log ERROR "gzip fehlt"; exit 3; }

exec 9>"$LOCK"; flock -n 9 || { log WARN "läuft bereits"; exit 4; }

find "$LOG_DIR" -type f -name '*.log' -mtime +"$TAGE_KOMPRIMIEREN" -print0 |
  while IFS= read -r -d '' f; do run gzip -- "$f"; done
find "$LOG_DIR" -type f -name '*.gz' -mtime +"$TAGE_LOESCHEN" -print0 |
  while IFS= read -r -d '' f; do run rm -f -- "$f"; done

-print0 mit read -d '' verkraftet Dateinamen mit Leerzeichen, und -- verhindert, dass eine Datei mit führendem Bindestrich als Option gelesen wird. Zuerst ./logs-rotieren.sh -n -v ausführen und durch ShellCheck schicken…

Wichtige Fakten

Kategorie
Programmierung & Entwicklung · Automatisierungen
Ausgabetyp
Code
Niveau
Fortgeschritten
Entwickelt für
ChatGPT, Claude, Gemini und Microsoft Copilot
Verifiziert in
Redaktionelle Prüfung ausstehend
Variablen
Aufgabe, Umgebung, Eingaben und Was es ändert oder löscht
Sprache
Deutsch
Preis
Kostenlos, ohne Anmeldung
Aktualisiert
07.11.2026

Häufig gestellte Fragen

Was macht set -Eeuo pipefail genau?

Das Skript bricht bei Fehlern (-e), bei nicht gesetzten Variablen (-u) und bei Fehlern irgendeines Befehls in einer Pipe (pipefail) ab; -E vererbt den ERR-Trap an Funktionen. Es gibt Ausnahmen, deshalb verlangt der Prompt eine Erklärung.

Wozu dient flock in einem geplanten Skript?

Es verhindert, dass sich zwei Läufe überschneiden, wenn der vorherige noch nicht fertig ist, was bei cron häufig vorkommt. Ohne Lock können sich zwei Kopien gegenseitig Dateien überschreiben oder Arbeit doppelt erledigen.

Wofür ist dieser Prompt gedacht?

Erzeuge ein serverfertiges Bash-Skript: Strict Mode, Aufräumen per trap, Argumente mit getopts, Lock gegen parallele Läufe, Logging, Dry-Run-Modus und Code ohne ShellCheck-Warnungen.

Mit welchen KI-Tools funktioniert er?

Er ist für ChatGPT, Claude, Gemini und Microsoft Copilot entwickelt. Wir haben ihn in diesen Tools noch nicht überprüft, daher können die Ergebnisse variieren.

Wie passe ich den Prompt an?

Klicken Sie auf „Anpassen“ und füllen Sie die Variablen aus (Aufgabe, Umgebung, Eingaben und Was es ändert oder löscht). Der Text wird sofort aktualisiert und lässt sich anschließend mit einem Klick kopieren. Die Werte werden nur in Ihrem Browser gespeichert.

Brauche ich Erfahrung, um ihn zu verwenden?

Er ist für Fortgeschrittene: Es hilft, das Thema zu kennen, um guten Kontext zu liefern und das Ergebnis kritisch zu prüfen.

Ist dieser Prompt kostenlos?

Ja. Jeder Prompt von HomeCasa Prompts ist kostenlos, ohne Anmeldung und ohne Abonnement. Sie können ihn auch in beruflichen Projekten verwenden.

Kann ich der KI-Ausgabe vertrauen?

Betrachten Sie sie als hochwertigen Entwurf: Prüfen Sie Daten, Zahlen und wichtige Aussagen immer, bevor Sie etwas veröffentlichen oder Entscheidungen treffen.

Ähnliche Prompts