Script Bash seguro e robusto: erros, bloqueio, logs e modo dry-run
Gera um script Bash pronto para servidores: modo estrito, limpeza com trap, argumentos com getopts, bloqueio contra execuções simultâneas, logs, dry-run e código limpo para o ShellCheck. Pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Inclui 4 variáveis personalizáveis e pode copiá-lo gratuitamente com um clique.
Intermédio · Código · Pendente de revisão editorial
Prompt
Atua como administrador de sistemas Linux que escreve scripts de shell seguros e fáceis de manter.
Preciso de um script que faça o seguinte: {{tarefa}}
- Ambiente onde vai correr: {{ambiente}}
- Entradas (argumentos, ficheiros, variáveis): {{entradas}}
- O que altera ou apaga: {{efeitos}}
Entregáveis:
1. O script completo com:
- Shebang adequado ao ambiente e modo estrito (`set -Eeuo pipefail`) ou equivalente se a shell não for Bash, explicando as suas armadilhas.
- Uma função `usage` e análise de argumentos com `getopts`, incluindo `-h`, `-v` (detalhado) e `-n` (dry-run).
- Verificação de dependências com `command -v` e mensagens claras se faltar alguma.
- Variáveis sempre entre aspas, `local` nas funções e nada de `eval`.
- Ficheiros temporários com `mktemp` e limpeza com `trap` em `EXIT`, `INT` e `TERM`.
- Bloqueio com `flock` (ou alternativa portável) para impedir duas execuções em simultâneo.
- Logs com marca temporal para stderr e, opcionalmente, para um ficheiro.
- Códigos de saída documentados.
- Em modo dry-run, mostrar o que faria sem executar nada destrutivo.
2. Explicação de cada bloco e de qualquer linha perigosa (eliminações, permissões, `sudo`).
3. Como verificar: ShellCheck sem avisos e alguns testes com bats-core ou um procedimento manual numa pasta de testes.
4. Como agendá-lo com cron ou um timer do systemd, se fizer sentido, com o PATH e as variáveis necessárias.
Restrições:
- Qualquer `rm` ou sobrescrita tem de validar antes que o caminho não está vazio nem é `/`.
- Não inventes caminhos nem nomes de servidores: usa os meus ou [PREENCHER].
- Se a tarefa for ambígua ou perigosa, pergunta-me antes de escrever o script.
- Recomenda testá-lo primeiro com `-n` e fora de produção.Como utilizar
- Descreve a tarefa passo a passo, como a farias à mão.
- Indica o sistema exato (distribuição, macOS ou contentor), porque muda a shell disponível.
- Passa o ShellCheck, executa com
-ne revê a saída antes de tirar o dry-run.
Exemplo de utilização
Tarefa: comprimir os logs com mais de 7 dias em /var/log/minhaapp e apagar os com mais de 30 · Ambiente: Ubuntu 24.04 com Bash 5 · Efeitos: apaga ficheiros antigos.
Exemplo de resultado
1. Script
#!/usr/bin/env bash
# rodar-logs.sh — comprime .log com mais de N dias e apaga .gz com mais de M dias
set -Eeuo pipefail
LOG_DIR="/var/log/minhaapp"; DIAS_COMPRIMIR=7; DIAS_APAGAR=30
DRY_RUN=0; VERBOSE=0; LOCK="/run/lock/rodar-logs.lock"
log() { printf '%s [%s] %s\n' "$(date '+%F %T')" "$1" "$2" >&2; }
usage() { echo "Uso: ${0##*/} [-h] [-v] [-n] [-d pasta] [-c dias] [-r dias]"; }
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) DIAS_COMPRIMIR="$OPTARG" ;; r) DIAS_APAGAR="$OPTARG" ;;
*) usage; exit 1 ;;
esac
done
# Nunca operar sobre um caminho vazio nem sobre /
[[ -n "$LOG_DIR" && "$LOG_DIR" != "/" && -d "$LOG_DIR" ]] || { log ERROR "pasta inválida: $LOG_DIR"; exit 2; }
[[ "$DIAS_COMPRIMIR$DIAS_APAGAR" =~ ^[0-9]+$ ]] || { log ERROR "os dias têm de ser inteiros"; exit 1; }
command -v gzip >/dev/null || { log ERROR "falta o gzip"; exit 3; }
exec 9>"$LOCK"; flock -n 9 || { log WARN "já existe outra execução em curso"; exit 4; }
find "$LOG_DIR" -type f -name '*.log' -mtime +"$DIAS_COMPRIMIR" -print0 |
while IFS= read -r -d '' f; do run gzip -- "$f"; done
find "$LOG_DIR" -type f -name '*.gz' -mtime +"$DIAS_APAGAR" -print0 |
while IFS= read -r -d '' f; do run rm -f -- "$f"; done
-print0 com read -d '' suporta nomes com espaços, e -- impede que um ficheiro começado por hífen seja lido como opção. Corre primeiro ./rodar-logs.sh -n -v e passa-o pelo ShellCheck…
Dados-chave
- Categoria
- Programação e desenvolvimento · Automatizações
- Tipo de resultado
- Código
- Nível
- Intermédio
- Pensado para
- ChatGPT, Claude, Gemini e Microsoft Copilot
- Verificado em
- Pendente de verificação editorial
- Variáveis
- Tarefa, Ambiente, Entradas e O que altera ou apaga
- Idioma
- Português
- Preço
- Gratuito, sem registo
- Atualizado
- 07/11/2026
Perguntas frequentes
O que faz exatamente o set -Eeuo pipefail?
Faz o script parar perante um erro (-e), variáveis não definidas (-u) e falhas de qualquer comando num pipe (pipefail); o -E propaga o trap de ERR às funções. Tem exceções, por isso o prompt pede que sejam explicadas.
Para que serve o flock num script agendado?
Evita que duas execuções se sobreponham quando a anterior ainda não terminou, algo comum com cron. Sem bloqueio, duas cópias podem estragar os ficheiros uma da outra ou duplicar o trabalho.
Para que serve este prompt?
Gera um script Bash pronto para servidores: modo estrito, limpeza com trap, argumentos com getopts, bloqueio contra execuções simultâneas, logs, dry-run e código limpo para o ShellCheck.
Com que ferramentas de IA funciona?
Foi pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Ainda não o verificámos nestas ferramentas, pelo que os resultados podem variar entre elas.
Como personalizo o prompt?
Clique em “Personalizar” e preencha as variáveis (Tarefa, Ambiente, Entradas e O que altera ou apaga). O texto atualiza-se instantaneamente e pode depois copiá-lo com um clique. Os valores ficam guardados apenas no seu navegador.
Preciso de experiência para o utilizar?
É de nível intermédio: convém conhecer o tema para fornecer bom contexto e rever o resultado com sentido crítico.
Este prompt é gratuito?
Sim. Todos os prompts do HomeCasa Prompts são gratuitos, sem registo nem subscrição. Pode também utilizá-los em projetos profissionais.
Posso confiar no resultado da IA?
Trate-o como um rascunho de qualidade: verifique sempre os dados, os números e as afirmações importantes antes de publicar ou tomar decisões.