0 XP

DEVOPSQUEST

Minha Trilha
Módulo 3 · Git, GitHub e Bash

Bash na vida real: scripts com parâmetros, laços e tratamento de erros

Intermediário 35 min+25 XPBash

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 1

Laç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.txt

Por 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. 1. O que significa `${1:-dev}` num script?

  2. 2. Por que usar aspas em "$var"?

  3. 3. Para que serve o `trap ... ERR`?

Minhas anotações

Salvo automaticamente neste navegador.

AnteriorPróxima