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
- Descrivi il compito passo per passo come lo faresti a mano.
- Indica il sistema esatto (distribuzione, macOS o container) perché cambia la shell disponibile.
- Passa ShellCheck, esegui con
-ne 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.