Script Bash sicuro e robusto: errori, lock, log e modalità dry-run

Genera uno script Bash pronto per i server: modalità strict, pulizia con trap, argomenti con getopts, lock contro esecuzioni simultanee, log, dry-run e codice pulito per ShellCheck. Pensato per ChatGPT, Claude, Gemini e Microsoft Copilot. Include 4 variabili personalizzabili e puoi copiarlo gratuitamente con un clic.

Intermedio · Codice · In attesa di revisione editoriale

Prompt

Agisci come amministratore di sistemi Linux che scrive script di shell manutenibili e sicuri.

Mi serve uno script che faccia questo: {{compito}}
- Ambiente di esecuzione: {{ambiente}}
- Input (argomenti, file, variabili): {{input}}
- Cosa modifica o cancella: {{effetti}}

Consegna:
1. Lo script completo con:
   - Shebang adatto all’ambiente e modalità strict (`set -Eeuo pipefail`) o equivalente se la shell non è Bash, spiegandone le insidie.
   - Una funzione `usage` e il parsing degli argomenti con `getopts`, inclusi `-h`, `-v` (dettagliato) e `-n` (dry-run).
   - Il controllo delle dipendenze con `command -v` e messaggi chiari se ne manca qualcuna.
   - Variabili sempre tra virgolette, `local` nelle funzioni e niente `eval`.
   - File temporanei con `mktemp` e pulizia con `trap` su `EXIT`, `INT` e `TERM`.
   - Un lock con `flock` (o un’alternativa portabile) per impedire due esecuzioni contemporanee.
   - Log con timestamp su stderr e, facoltativamente, su file.
   - Codici di uscita documentati.
   - In dry-run, mostrare cosa farebbe senza eseguire nulla di distruttivo.
2. La spiegazione di ogni blocco e di ogni riga pericolosa (cancellazioni, permessi, `sudo`).
3. Come verificarlo: ShellCheck senza avvisi e alcuni test con bats-core o una procedura manuale in una cartella di prova.
4. Come pianificarlo con cron o un timer systemd se ha senso, con il PATH e le variabili necessarie.

Vincoli:
- Ogni `rm` o sovrascrittura deve prima verificare che il percorso non sia vuoto né `/`.
- Non inventare percorsi né nomi di server: usa i miei o [DA COMPLETARE].
- Se il compito è ambiguo o pericoloso, chiedimi chiarimenti prima di scrivere lo script.
- Consiglia di provarlo prima con `-n` e fuori dalla produzione.

Come usarlo

  1. Descrivi il compito passo per passo come lo faresti a mano.
  2. Indica il sistema esatto (distribuzione, macOS o container) perché cambia la shell disponibile.
  3. Passa ShellCheck, esegui con -n e controlla l’output prima di togliere il dry-run.

Esempio d'uso

Compito: comprimere i log più vecchi di 7 giorni in /var/log/miaapp e cancellare quelli oltre i 30 · Ambiente: Ubuntu 24.04 con Bash 5 · Effetti: cancella file vecchi.

Esempio di risultato

1. Script

#!/usr/bin/env bash
# ruota-log.sh — comprime i .log più vecchi di N giorni, cancella i .gz più vecchi di M giorni
set -Eeuo pipefail

LOG_DIR="/var/log/miaapp"; GIORNI_COMPRESSIONE=7; GIORNI_CANCELLAZIONE=30
DRY_RUN=0; VERBOSE=0; LOCK="/run/lock/ruota-log.lock"

log()   { printf '%s [%s] %s\n' "$(date '+%F %T')" "$1" "$2" >&2; }
usage() { echo "Uso: ${0##*/} [-h] [-v] [-n] [-d cartella] [-c giorni] [-r giorni]"; }
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) GIORNI_COMPRESSIONE="$OPTARG" ;;  r) GIORNI_CANCELLAZIONE="$OPTARG" ;;
    *) usage; exit 1 ;;
  esac
done

# Mai operare su un percorso vuoto o su /
[[ -n "$LOG_DIR" && "$LOG_DIR" != "/" && -d "$LOG_DIR" ]] || { log ERROR "cartella non valida: $LOG_DIR"; exit 2; }
[[ "$GIORNI_COMPRESSIONE$GIORNI_CANCELLAZIONE" =~ ^[0-9]+$ ]] || { log ERROR "i giorni devono essere interi"; exit 1; }
command -v gzip >/dev/null || { log ERROR "gzip mancante"; exit 3; }

exec 9>"$LOCK"; flock -n 9 || { log WARN "un’altra esecuzione è in corso"; exit 4; }

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

-print0 con read -d '' gestisce i nomi con spazi, e -- evita che un file che inizia con un trattino venga letto come opzione. Lancia prima ./ruota-log.sh -n -v e passalo a ShellCheck…

Dati chiave

Categoria
Programmazione e sviluppo · Automazioni
Tipo di output
Codice
Livello
Intermedio
Pensato per
ChatGPT, Claude, Gemini e Microsoft Copilot
Verificato in
In attesa di verifica editoriale
Variabili
Compito, Ambiente, Input e Cosa modifica o cancella
Lingua
Italiano
Prezzo
Gratuito, senza registrazione
Aggiornato
07/11/2026

Domande frequenti

Cosa fa esattamente set -Eeuo pipefail?

Ferma lo script in caso di errore (-e), di variabili non definite (-u) e di fallimento di un comando in una pipe (pipefail); -E estende il trap ERR alle funzioni. Ci sono eccezioni, per questo il prompt chiede di spiegarle.

A cosa serve flock in uno script pianificato?

Evita che due esecuzioni si sovrappongano se la precedente non è ancora finita, cosa frequente con cron. Senza lock, due copie possono sovrascriversi i file o duplicare il lavoro.

A cosa serve questo prompt?

Genera uno script Bash pronto per i server: modalità strict, pulizia con trap, argomenti con getopts, lock contro esecuzioni simultanee, log, dry-run e codice pulito per ShellCheck.

Con quali strumenti di IA funziona?

È pensato per ChatGPT, Claude, Gemini e Microsoft Copilot. Non lo abbiamo ancora verificato in questi strumenti, quindi i risultati possono variare da uno all'altro.

Come personalizzo il prompt?

Clicca su «Personalizza» e compila le variabili (Compito, Ambiente, Input e Cosa modifica o cancella). Il testo si aggiorna all'istante e poi puoi copiarlo con un clic. I valori vengono salvati solo nel tuo browser.

Serve esperienza per usarlo?

È di livello intermedio: conviene conoscere l'argomento per fornire un buon contesto e valutare il risultato con occhio critico.

Questo prompt è gratuito?

Sì. Tutti i prompt di HomeCasa Prompts sono gratuiti, senza registrazione né abbonamento. Puoi usarli anche in progetti professionali.

Posso fidarmi dell'output dell'IA?

Consideralo una bozza di alta qualità: verifica sempre dati, cifre e affermazioni importanti prima di pubblicare o prendere decisioni.

Prompt correlati