
Bash na vida real: scripts com parâmetros, laços e tratamento de erros
Objetivos desta aula
- Escrever scripts com parâmetros e valores padrão
- Usar laços e condições para automatizar tarefas
- Tratar erros com set -euo pipefail e trap
- Criar um script de verificação de saúde reutilizável
Você já viu set -euo pipefail; agora vamos escrever scripts que parecem profissionais: recebem parâmetros, validam entradas, repetem tarefas e falham com mensagens claras.
Parâmetros: dentro do script, $1 é o primeiro argumento, $2 o segundo. Use valores padrão com ${1:-valor}. Sempre valide: se faltar algo obrigatório, mostre como usar e saia com erro.
Condições: if [ -f arquivo ] testa se um arquivo existe; [ -z "$var" ] testa se está vazia; comando && echo ok || echo falhou é o atalho mais usado.
Laços: for f in *.log; do ...; done repete para cada arquivo; while read -r linha processa um arquivo linha a linha. Combinado com pipes, resolve tarefas de minutos em segundos.
Tratamento de erros: além do set -euo pipefail, use trap 'echo "falhou na linha $LINENO"' ERR para saber exatamente onde quebrou. Scripts de deploy precisam disso.
Funções organizam scripts grandes: agrupe passos com nomes claros (checar_dependencias, fazer_backup) e o script vira documentação executável.
Boas práticas: coloque #!/usr/bin/env bash na primeira linha, use aspas em variáveis ("$var"), comente o *porquê* (não o óbvio) e teste com shellcheck.
Exercício mental: tudo que você digita mais de três vezes por semana merece virar um script versionado no Git.
Na prática
Script de health check com parâmetros
bash
#!/usr/bin/env bash
set -euo pipefail
trap 'echo "ERRO na linha $LINENO" >&2' ERR
HOST="${1:-localhost}"
PORTA="${2:-3000}"
checar() {
if curl -fsS "http://$HOST:$PORTA/health" > /dev/null; then
echo "OK: $HOST:$PORTA respondeu"
else
echo "FALHA: $HOST:$PORTA não respondeu" >&2
return 1
fi
}
for i in 1 2 3; do
checar && exit 0
echo "tentativa $i falhou, aguardando..."
sleep 5
done
exit 1Laço processando arquivos
bash
for f in /var/log/app/*.log; do
echo "$f: $(wc -l < "$f") linhas"
done
# linha a linha:
while read -r servidor; do
ping -c1 "$servidor" > /dev/null && echo "$servidor ok" || echo "$servidor FORA"
done < servidores.txtPor que isso importa
Automação em Bash está em todo lugar: pipelines, provisionamento, backups e runbooks executáveis.
Erro comum
Não usar aspas em variáveis: um nome de arquivo com espaço quebra o script inteiro.
Dica de produção
Rode shellcheck em todo script antes de commitar — ele aponta erros que você nem imaginava.
Alerta de segurança
Nunca passe senhas como argumento de script (script.sh senha123): ficam visíveis no ps e no histórico. Use variáveis de ambiente.
Pergunta de entrevista
O que faz set -euo pipefail e por que usar em scripts de deploy?
Glossário
- $1, $2
- Argumentos passados ao script, em ordem.
- trap
- Executa um comando quando o script recebe um sinal ou erro.
- shellcheck
- Ferramenta que analisa scripts Bash e aponta problemas.
- ${var:-padrao}
- Usa o valor de var ou um padrão se estiver vazia.
Conexão com o CloudShop
O backup diário dos logs do CloudShop é um script Bash com laço, parâmetros e trap de erro.
Quiz da aula
1. O que significa `${1:-dev}` num script?
2. Por que usar aspas em "$var"?
3. Para que serve o `trap ... ERR`?
Minhas anotações
Salvo automaticamente neste navegador.
