Guia completo de Scripts Bash para automação e produtividade
📖 Definição
Scripts Bash são arquivos de texto contendo sequências de comandos que podem ser executados automaticamente. São ferramentas poderosas para automação de tarefas repetitivas, administração de sistemas e aumento de produtividade.
💪 Por que aprender?
• Automação de tarefas repetitivas
• Processamento em lote
• Administração de sistemas
• Personalização do ambiente
• Integração com outras ferramentas
🚀 O que você pode fazer?
• Backup e restauração de dados
• Monitoramento de sistemas
• Deploy de aplicações
• Análise de logs
• Configuração de ambientes
Tarefas, Backup
Admin, Monitor
CI/CD, Deploy
Cloud, Containers
📝 Scripts Básicos
Use quando: Aprendendo programação shell ou criando scripts simples
📋Variáveis e Input
#!/bin/bash
# Variáveis
nome="João"
idade=25
echo "Nome: $nome, Idade: $idade"# Declarando variáveis
#!/bin/bash
# Input do usuário
echo "Qual seu nome?"
read nome
echo "Olá, $nome!"# Lendo input do usuário
#!/bin/bash
# Argumentos de linha de comando
echo "Primeiro argumento: $1"
echo "Segundo argumento: $2"
echo "Todos os argumentos: $@"
echo "Número de argumentos: $#"# Usando argumentos
#!/bin/bash
# Variáveis especiais
echo "PID do script: $$"
echo "Código de saída: $?"
echo "Nome do script: $0"# Variáveis especiais
📋Estruturas Condicionais
#!/bin/bash
# If-else
idade=18
if [ $idade -ge 18 ]; then
echo "Maior de idade"
else
echo "Menor de idade"
fi# Estrutura if-else
#!/bin/bash
# Case
opcao="1"
case $opcao in
1) echo "Opção 1 selecionada" ;;
2) echo "Opção 2 selecionada" ;;
*) echo "Opção inválida" ;;
esac# Estrutura case
#!/bin/bash
# Operadores de comparação
num1=10
num2=20
if [ $num1 -eq $num2 ]; then
echo "Iguais"
elif [ $num1 -lt $num2 ]; then
echo "$num1 é menor que $num2"
else
echo "$num1 é maior que $num2"
fi# Comparando números
#!/bin/bash
# Comparando strings
str1="bash"
str2="shell"
if [ "$str1" = "$str2" ]; then
echo "Strings iguais"
else
echo "Strings diferentes"
fi# Comparando strings
📋Loops
#!/bin/bash
# For loop
for i in {1..5}; do
echo "Número: $i"
done# Loop for básico
#!/bin/bash
# For com array
frutas=("maçã" "banana" "laranja")
for fruta in "${frutas[@]}"; do
echo "Fruta: $fruta"
done# Loop com array
#!/bin/bash
# While loop
contador=0
while [ $contador -lt 5 ]; do
echo "Contador: $contador"
contador=$((contador + 1))
done# Loop while
#!/bin/bash
# Until loop
contador=0
until [ $contador -eq 5 ]; do
echo "Contador: $contador"
contador=$((contador + 1))
done# Loop until
🤖 Scripts de Automação
Use quando: Automatizando tarefas repetitivas ou manutenção do sistema
📋Backup Automatizado
#!/bin/bash
# Script de backup
origem="/home/user/documentos"
destino="/backup/$(date +%Y%m%d)"
mkdir -p "$destino"
cp -r "$origem" "$destino"
echo "Backup concluído em $destino"# Backup simples
#!/bin/bash
# Backup com tar
origem="/home/user/documentos"
destino="/backup/documentos_$(date +%Y%m%d).tar.gz"
tar -czf "$destino" "$origem"
echo "Backup compactado em $destino"# Backup compactado
#!/bin/bash
# Backup incremental
origem="/home/user/documentos"
destino="/backup"
data=$(date +%Y%m%d)
find "$origem" -mtime -1 -type f -exec cp {} "$destino/$data/" \;
echo "Backup incremental concluído"# Backup incremental
📋Limpeza de Sistema
#!/bin/bash
# Limpar arquivos temporários
echo "Limpando arquivos temporários..."
rm -rf /tmp/*
rm -rf ~/.cache/*
echo "Limpeza concluída"# Limpeza básica
#!/bin/bash
# Limpar logs antigos
echo "Limpando logs com mais de 30 dias..."
find /var/log -name "*.log" -mtime +30 -delete
echo "Logs antigos removidos"# Limpar logs antigos
#!/bin/bash
# Limpar pacotes não usados (Debian/Ubuntu)
echo "Removendo pacotes não usados..."
sudo apt autoremove -y
sudo apt autoclean
echo "Limpeza de pacotes concluída"# Limpar pacotes
📋Monitoramento de Recursos
#!/bin/bash
# Monitorar uso de disco
echo "Uso de disco:"
df -h | grep -E "^/dev/"# Verificar uso de disco
#!/bin/bash
# Monitorar uso de memória
echo "Uso de memória:"
free -h# Verificar uso de memória
#!/bin/bash
# Monitorar processos
echo "Top 5 processos por CPU:"
ps aux --sort=-%cpu | head -6# Verificar processos
#!/bin/bash
# Alerta de uso de disco
limite=90
uso=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ $uso -gt $limite ]; then
echo "ALERTA: Uso de disco acima de $limite%"
fi# Alerta de disco
📊 Scripts de Monitoramento
Use quando: Monitorando saúde do sistema, serviços ou recursos
📋Monitoramento de Serviços
#!/bin/bash
# Verificar se serviço está rodando
servico="nginx"
if systemctl is-active --quiet $servico; then
echo "$servico está rodando"
else
echo "$servico está parado"
sudo systemctl start $servico
fi# Verificar serviço
#!/bin/bash
# Monitorar múltiplos serviços
servicos=("nginx" "mysql" "apache2")
for servico in "${servicos[@]}"; do
if systemctl is-active --quiet $servico; then
echo "✓ $servico: ATIVO"
else
echo "✗ $servico: INATIVO"
fi
done# Monitorar vários serviços
#!/bin/bash
# Reiniciar serviço se falhar
servico="nginx"
if ! systemctl is-active --quiet $servico; then
echo "Reiniciando $servico..."
sudo systemctl restart $servico
echo "$servico reiniciado"
fi# Reiniciar serviço
📋Monitoramento de Rede
#!/bin/bash
# Testar conectividade
host="google.com"
if ping -c 1 $host &> /dev/null; then
echo "Conectividade com $host: OK"
else
echo "Conectividade com $host: FALHOU"
fi# Testar ping
#!/bin/bash
# Verificar portas abertas
porta=80
if netstat -tuln | grep -q ":$porta "; then
echo "Porta $porta está aberta"
else
echo "Porta $porta está fechada"
fi# Verificar porta
#!/bin/bash
# Monitorar uso de banda
interface="eth0"
echo "Monitorando interface $interface..."
iftop -i $interface -t -s 10# Monitorar banda
📋Logs e Alertas
#!/bin/bash
# Monitorar erros em log
arquivo_log="/var/log/syslog"
erros=$(tail -100 $arquivo_log | grep -i "error" | wc -l)
echo "Erros encontrados: $erros"# Contar erros
#!/bin/bash
# Alertar por email
assunto="Alerta do Sistema"
mensagem="O sistema detectou um problema"
echo "$mensagem" | mail -s "$assunto" admin@exemplo.com# Enviar alerta
#!/bin/bash
# Monitorar tentativas de login
tentativas=$(grep "Failed password" /var/log/auth.log | wc -l)
echo "Tentativas de login falhadas: $tentativas"# Monitorar login
⚙️ Scripts de Processamento
Use quando: Processando textos, arquivos ou dados em lote
📋Processamento de Texto
#!/bin/bash
# Contar palavras em arquivo
arquivo="texto.txt"
palavras=$(wc -w < $arquivo)
echo "O arquivo tem $palavras palavras"# Contar palavras
#!/bin/bash
# Extrair emails de arquivo
arquivo="contatos.txt"
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" $arquivo# Extrair emails
#!/bin/bash
# Substituir texto em arquivos
find . -name "*.txt" -exec sed -i 's/antigo/novo/g' {} \;
echo "Substituição concluída"# Substituir texto
#!/bin/bash
# Ordenar e remover duplicados
arquivo="lista.txt"
sort $arquivo | uniq > ${arquivo}_ordenado.txt
echo "Arquivo ordenado e sem duplicados"# Ordenar e deduplicar
📋Processamento de Arquivos
#!/bin/bash
# Renomear arquivos em massa
contador=1
for arquivo in *.jpg; do
mv "$arquivo" "imagem_$contador.jpg"
contador=$((contador + 1))
done# Renomear em massa
#!/bin/bash
# Converter imagens
for arquivo in *.png; do
convert "$arquivo" "${arquivo%.png}.jpg"
done
echo "Conversão concluída"# Converter imagens
#!/bin/bash
# Comprimir arquivos
diretorio="documentos"
tar -czf "${diretorio}_$(date +%Y%m%d).tar.gz" $diretorio
echo "Compressão concluída"# Comprimir arquivos
#!/bin/bash
# Encontrar arquivos grandes
find . -type f -size +100M -exec ls -lh {} \; | sort -k5 -hr
echo "Arquivos maiores que 100MB"# Encontrar arquivos grandes
📋Processamento de Dados
#!/bin/bash
# Processar CSV
arquivo="dados.csv"
awk -F, '{sum+=$3} END {print "Média:", sum/NR}' $arquivo# Calcular média CSV
#!/bin/bash
# Filtrar dados
arquivo="dados.csv"
awk -F, '$2 > 50 {print $1, $2}' $arquivo# Filtrar CSV
#!/bin/bash
# Gerar relatório
echo "Relatório de Vendas - $(date)" > relatorio.txt
echo "=========================" >> relatorio.txt
cat vendas.csv | awk -F, '{print $1 ": $" $3}' >> relatorio.txt
echo "Relatório gerado"# Gerar relatório
🔒 Scripts de Segurança
Use quando: Implementando medidas de segurança ou analisando vulnerabilidades
⚠️ ⚠️ ATENÇÃO: Scripts de segurança podem afetar o funcionamento do sistema. Teste em ambiente isolado antes de usar em produção.
📋Análise de Segurança
#!/bin/bash
# Verificar permissões de arquivos críticos
arquivos=("/etc/passwd" "/etc/shadow" "/etc/sudoers")
for arquivo in "${arquivos[@]}"; do
ls -la $arquivo
done# Verificar permissões
#!/bin/bash
# Encontrar arquivos com permissões perigosas
echo "Arquivos world-writable:"
find / -type f -perm -002 2>/dev/null | head -10# Arquivos perigosos
#!/bin/bash
# Verificar usuários com UID 0
echo "Usuários com privilégios de root:"
awk -F: '$3 == 0 {print $1}' /etc/passwd# Verificar root users
#!/bin/bash
# Analisar tentativas de invasão
echo "Tentativas de SSH falhadas:"
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr# Tentativas SSH
📋Backup de Segurança
#!/bin/bash
# Backup de configurações
destino="/backup/config_$(date +%Y%m%d)"
mkdir -p $destino
cp -r /etc $destino/
cp -r /home $destino/
echo "Backup de segurança concluído"# Backup configs
#!/bin/bash
# Verificar integridade de arquivos
arquivo="importante.txt"
md5sum $arquivo > ${arquivo}.md5
echo "Checksum gerado"# Gerar checksum
#!/bin/bash
# Verificar integridade
arquivo="importante.txt"
if md5sum -c ${arquivo}.md5; then
echo "Arquivo íntegro"
else
echo "ARQUIVO ALTERADO!"
fi# Verificar checksum
📋Hardening
#!/bin/bash
# Desabilitar serviços desnecessários
servicos=("telnet" "rsh" "rlogin")
for servico in "${servicos[@]}"; do
if systemctl is-enabled $servico &> /dev/null; then
sudo systemctl disable $servico
echo "$servico desabilitado"
fi
done# Desabilitar serviços
#!/bin/bash
# Configurar firewall básico
sudo ufw --force reset
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw --force enable
echo "Firewall configurado"# Configurar firewall
#!/bin/bash
# Atualizar sistema
echo "Atualizando sistema..."
sudo apt update && sudo apt upgrade -y
echo "Sistema atualizado"# Atualizar sistema
🤝 Contribuindo
Encontrou um erro? Quer melhorar um cheatsheet? Tem uma sugestão? Adoraríamos suas contribuições! Abra uma issue ou submeta um PR.
Gostou do projeto? Apoie o desenvolvimento com um café e ajude a manter tudo open source ☕