Erstellung wiederverwendbarer Bash-Skriptvorlagen für mehr Effizienz

Erstellen Sie wiederverwendbare Bash-Skriptvorlagen mit striktem Modus, Nutzungstext, Protokollierung, Bereinigung und sicherer getopts-Argumentanalyse.

Erstellung wiederverwendbarer Bash-Skriptvorlagen für mehr Effizienz

Wiederverwendbare Bash-Skriptvorlagen helfen Ihnen, jedes Mal dieselben Sicherheitsprüfungen neu zu schreiben, wenn Sie eine Aufgabe automatisieren. Eine gute Vorlage gibt Ihrem Skript eine strenge Fehlerbehandlung, vorhersagbare Protokollierung, Nutzungshilfe, Argumentanalyse und Bereinigungshooks, bevor Sie projektspezifische Logik hinzufügen.

Das Ziel ist kein großes Framework. Es ist ein kleiner Ausgangspunkt, der Routine-Skripte konsistent und einfacher zu debuggen macht.

Warum Skriptvorlagen verwenden?

Vorlagen sind nützlich, wenn Ihr Team viele kleine Skripte für Backups, Bereitstellungen, Berichte, Log-Bereinigung oder Datenbewegung schreibt. Ohne eine Vorlage neigt jedes Skript dazu, Fehler, Optionen und Protokollierung etwas anders zu handhaben.

Eine wiederverwendbare Vorlage bietet Ihnen:

  • Konsistenten strikten Modus und Anführungszeichen-Gewohnheiten.
  • Eine standardmäßige usage-Funktion.
  • Einen Ort für Protokollierungshelfer.
  • Einen Bereinigungshook für temporäre Dateien und Sperren.
  • Vorhersagbare Befehlszeilenanalyse mit getopts.

Die Kernbestandteile der Vorlage

Beginnen Sie mit Bash selbst und aktivieren Sie dann striktes Verhalten:

#!/usr/bin/env bash
set -euo pipefail

set -e beendet das Skript bei vielen unbehandelten Befehlsfehlern, set -u behandelt nicht gesetzte Variablen als Fehler und set -o pipefail fängt Fehler innerhalb von Pipelines ab. Sie benötigen immer noch explizite Prüfungen für erwartete Fehler, aber der strikte Modus fängt viele versehentliche Fehler ab.

Fügen Sie einen Skriptnamen und einen kurzen Nutzungsblock hinzu:

readonly SCRIPT_NAME="$(basename "$0")"

usage() {
    cat <<USAGE
Verwendung: $SCRIPT_NAME [-v] [-o ausgabe_verz] eingabedatei

Optionen:
  -v              Ausführliche Protokollierung aktivieren
  -o ausgabe_verz  Ausgabe in dieses Verzeichnis schreiben
  -h              Diese Hilfemeldung anzeigen
USAGE
}

Verwenden Sie kleine Protokollierungshelfer anstelle von verstreuten echo-Aufrufen:

log_info() {
    [[ "$VERBOSE" -eq 1 ]] && printf '[INFO] %s\n' "$1"
}

die() {
    printf '[ERROR] %s\n' "$1" >&2
    exit 1
}

Wenn das Skript temporäre Dateien oder Sperrdateien erstellt, fügen Sie frühzeitig eine Bereinigungsfunktion hinzu:

cleanup() {
    # Temporäre Dateien entfernen oder Sperren freigeben.
    :
}

trap cleanup EXIT

Sichere Argumentanalyse mit getopts

Die meisten wiederverwendbaren Vorlagen benötigen Flags. Bashs eingebautes getopts reicht für kurze Optionen wie -v und -o ausgabe_verz aus.

VERBOSE=0
OUTPUT_DIR="."

while getopts ":vo:h" opt; do
    case "$opt" in
        v) VERBOSE=1 ;;
        o) OUTPUT_DIR=$OPTARG ;;
        h) usage; exit 0 ;;
        :) die "Option -$OPTARG erfordert ein Argument" ;;
        \?) die "Unbekannte Option: -$OPTARG" ;;
    esac
done
shift "$((OPTIND - 1))"

INPUT_FILE=${1:-}
[[ -n "$INPUT_FILE" ]] || { usage >&2; exit 1; }
[[ -f "$INPUT_FILE" ]] || die "Eingabedatei nicht gefunden: $INPUT_FILE"

Das führende : in ":vo:h" ermöglicht es Ihrem Skript, fehlende Optionsargumente selbst zu behandeln. Nach der Analyse entfernt shift "$((OPTIND - 1))" die analysierten Optionen, sodass Positionsargumente leichter zu lesen sind.

Eine kompakte Vorlage, die Sie wiederverwenden können

Hier ist ein praktischer Ausgangspunkt für kleine Betriebsskripte:

#!/usr/bin/env bash
set -euo pipefail

readonly SCRIPT_NAME="$(basename "$0")"
VERBOSE=0
OUTPUT_DIR="."

usage() {
    cat <<USAGE
Verwendung: $SCRIPT_NAME [-v] [-o ausgabe_verz] eingabedatei
USAGE
}

log_info() {
    [[ "$VERBOSE" -eq 1 ]] && printf '[INFO] %s\n' "$1"
}

die() {
    printf '[ERROR] %s\n' "$1" >&2
    exit 1
}

cleanup() {
    :
}
trap cleanup EXIT

while getopts ":vo:h" opt; do
    case "$opt" in
        v) VERBOSE=1 ;;
        o) OUTPUT_DIR=$OPTARG ;;
        h) usage; exit 0 ;;
        :) die "Option -$OPTARG erfordert ein Argument" ;;
        \?) die "Unbekannte Option: -$OPTARG" ;;
    esac
done
shift "$((OPTIND - 1))"

INPUT_FILE=${1:-}
[[ -n "$INPUT_FILE" ]] || { usage >&2; exit 1; }
[[ -f "$INPUT_FILE" ]] || die "Eingabedatei nicht gefunden: $INPUT_FILE"
mkdir -p "$OUTPUT_DIR"

log_info "Verarbeite $INPUT_FILE"
# Fügen Sie hier Ihre Skriptlogik hinzu.

Halten Sie die Vorlage kurz. Fügen Sie gemeinsame Funktionen nur hinzu, wenn mehrere Skripte sie wirklich benötigen. Eine Vorlage sollte wiederholte Einrichtungsarbeit entfernen, nicht jedes Skript wie ein Framework wirken lassen.