Scripting e Automação no Linux
Domine scripts Bash e a automação de tarefas para otimizar seu trabalho no Linux
InSkillCoach
Scripting e Automação no Linux
A automação de tarefas repetitivas é uma das grandes vantagens do Linux. Com o scripting Bash e diversas ferramentas de automação, você pode economizar muito tempo e reduzir erros humanos. Este guia apresenta os fundamentos do scripting Bash e as técnicas essenciais de automação no Linux.
Fundamentos do scripting Bash
Estrutura de um script Bash
Todo script Bash começa com um “shebang”, que indica o interpretador a ser usado.
#!/bin/bash
# Isto é um comentário
echo "Bonjour, monde!"
# Variáveis
NOM="Utilisateur"
echo "Bonjour, $NOM"
# Saída com código de retorno 0 (sucesso)
exit 0
Para tornar um script executável:
chmod +x mon_script.sh
Para executar um script:
./mon_script.sh
Variáveis e operações
#!/bin/bash
# Declaração e uso de variáveis
NOMBRE=10
TEXTE="Linux"
# Operações aritméticas
let RESULTAT=$NOMBRE+5
echo "Résultat: $RESULTAT"
# Outro método para cálculos
CARRE=$((NOMBRE * NOMBRE))
echo "Le carré de $NOMBRE est $CARRE"
# Variáveis de ambiente
echo "Votre répertoire personnel: $HOME"
echo "Votre shell actuel: $SHELL"
Entradas e saídas
#!/bin/bash
# Pedir uma entrada ao usuário
echo "Entrez votre nom:"
read NOM
# Exibir uma mensagem com a entrada
echo "Bonjour, $NOM!"
# Redirecionamento de saída para um arquivo
echo "Log: Script exécuté par $NOM" >> log.txt
# Ler a partir de um arquivo
echo "Contenu du fichier log.txt:"
cat log.txt
Argumentos de linha de comando
#!/bin/bash
# $0 é o nome do script
# $1, $2, etc. são os argumentos
# $# é o número de argumentos
# $@ representa todos os argumentos
echo "Nom du script: $0"
echo "Premier argument: $1"
echo "Deuxième argument: $2"
echo "Nombre d'arguments: $#"
echo "Tous les arguments: $@"
Estruturas de controle
Condições
#!/bin/bash
# Estrutura condicional if-else
NOMBRE=15
if [ $NOMBRE -gt 10 ]; then
echo "$NOMBRE est supérieur à 10"
elif [ $NOMBRE -eq 10 ]; then
echo "$NOMBRE est égal à 10"
else
echo "$NOMBRE est inférieur à 10"
fi
# Operadores de comparação para números
# -eq : igual
# -ne : diferente
# -gt : maior que
# -lt : menor que
# -ge : maior ou igual
# -le : menor ou igual
# Testes em arquivos
if [ -f "/etc/passwd" ]; then
echo "Le fichier /etc/passwd existe"
fi
# Operadores para arquivos
# -f : arquivo regular
# -d : diretório
# -e : existe
# -r : legível
# -w : gravável
# -x : executável
Laços
#!/bin/bash
# Laço for
echo "Comptage avec for:"
for i in {1..5}; do
echo "Numéro $i"
done
# Laço for com lista
echo "Liste de fruits:"
for fruit in pomme orange banane; do
echo "J'aime les $fruit"
done
# Laço while
echo "Comptage avec while:"
COUNT=1
while [ $COUNT -le 5 ]; do
echo "Compteur: $COUNT"
let COUNT=COUNT+1
done
# Laço until (até que a condição seja verdadeira)
echo "Comptage avec until:"
COUNT=5
until [ $COUNT -le 0 ]; do
echo "Décompte: $COUNT"
let COUNT=COUNT-1
done
Case (switch)
#!/bin/bash
echo "Entrez un fruit (pomme, orange, banane):"
read FRUIT
case $FRUIT in
"pomme")
echo "Les pommes sont rouges ou vertes."
;;
"orange")
echo "Les oranges sont... orange!"
;;
"banane")
echo "Les bananes sont jaunes."
;;
*)
echo "Je ne connais pas ce fruit."
;;
esac
Funções
#!/bin/bash
# Definição de uma função
saluer() {
echo "Bonjour, $1!"
}
# Função com retorno de valor
calculer_carre() {
local nombre=$1
echo $((nombre * nombre))
}
# Chamada de função
saluer "Alice"
saluer "Bob"
# Capturar o valor de retorno
resultat=$(calculer_carre 5)
echo "Le carré de 5 est $resultat"
Scripts de automação práticos
Script de backup automático
#!/bin/bash
# Script de sauvegarde automatique
# Usage: ./backup.sh [répertoire_source]
# Verificar se um argumento foi fornecido
if [ $# -eq 0 ]; then
echo "Usage: $0 [répertoire_source]"
exit 1
fi
# Variáveis
SOURCE_DIR=$1
BACKUP_DIR="/home/user/backups"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
ARCHIVE_NAME="backup_$DATE.tar.gz"
# Criar o diretório de backup se ele não existir
mkdir -p $BACKUP_DIR
# Criar o arquivo compactado
echo "Création de la sauvegarde de $SOURCE_DIR..."
tar -czf "$BACKUP_DIR/$ARCHIVE_NAME" "$SOURCE_DIR"
# Verificar se o backup foi bem-sucedido
if [ $? -eq 0 ]; then
echo "Sauvegarde réussie: $BACKUP_DIR/$ARCHIVE_NAME"
echo "Taille: $(du -h "$BACKUP_DIR/$ARCHIVE_NAME" | cut -f1)"
else
echo "Erreur lors de la sauvegarde"
exit 1
fi
# Remover backups antigos (mais de 30 dias)
find $BACKUP_DIR -name "backup_*.tar.gz" -mtime +30 -delete
Monitoramento de sistema automatizado
#!/bin/bash
# Script de surveillance système
# Vérifie l'utilisation du CPU, de la mémoire et de l'espace disque
# Limites de alerta
CPU_THRESHOLD=80
MEM_THRESHOLD=80
DISK_THRESHOLD=90
LOG_FILE="/var/log/system_monitor.log"
# Função de registro de logs
log_message() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}
# Verificação do uso de CPU
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}' | cut -d. -f1)
if [ $CPU_USAGE -gt $CPU_THRESHOLD ]; then
MESSAGE="ALERTE: Utilisation CPU à $CPU_USAGE% (seuil: $CPU_THRESHOLD%)"
log_message "$MESSAGE"
echo "$MESSAGE"
fi
# Verificação do uso de memória
MEM_USAGE=$(free | grep Mem | awk '{print int($3/$2 * 100)}')
if [ $MEM_USAGE -gt $MEM_THRESHOLD ]; then
MESSAGE="ALERTE: Utilisation mémoire à $MEM_USAGE% (seuil: $MEM_THRESHOLD%)"
log_message "$MESSAGE"
echo "$MESSAGE"
fi
# Verificação do espaço em disco
DISK_USAGE=$(df -h / | grep / | awk '{print $5}' | cut -d% -f1)
if [ $DISK_USAGE -gt $DISK_THRESHOLD ]; then
MESSAGE="ALERTE: Utilisation disque à $DISK_USAGE% (seuil: $DISK_THRESHOLD%)"
log_message "$MESSAGE"
echo "$MESSAGE"
fi
Script de deploy
#!/bin/bash
# Script de déploiement simple
# Usage: ./deploy.sh [environnement]
# Configuração
APP_NAME="mon-application"
GIT_REPO="https://github.com/user/repo.git"
DEPLOY_DIR="/var/www"
# Verificar o ambiente
if [ $# -eq 0 ]; then
ENV="development"
else
ENV=$1
fi
echo "Déploiement de $APP_NAME en environnement $ENV"
# Criar um diretório temporário
TEMP_DIR=$(mktemp -d)
echo "Répertoire temporaire: $TEMP_DIR"
# Clonar o repositório
echo "Clonage du dépôt..."
git clone $GIT_REPO $TEMP_DIR
if [ $? -ne 0 ]; then
echo "Erreur lors du clonage du dépôt"
exit 1
fi
# Ir para o diretório do projeto
cd $TEMP_DIR
# Checkout da branch apropriada
if [ "$ENV" = "production" ]; then
git checkout master
else
git checkout develop
fi
# Instalação das dependências
echo "Installation des dépendances..."
npm install --production
# Build do projeto
echo "Construction du projet..."
npm run build
# Deploy
echo "Déploiement vers $DEPLOY_DIR/$APP_NAME-$ENV..."
mkdir -p $DEPLOY_DIR/$APP_NAME-$ENV
cp -r dist/* $DEPLOY_DIR/$APP_NAME-$ENV/
# Limpeza
echo "Nettoyage..."
rm -rf $TEMP_DIR
echo "Déploiement terminé avec succès!"
Automação com Cron
O Cron é um agendador de tarefas que permite executar scripts em momentos específicos.
Sintaxe do crontab
# Format crontab:
# .---------------- minute (0 - 59)
# | .------------- heure (0 - 23)
# | | .---------- jour du mois (1 - 31)
# | | | .------- mois (1 - 12)
# | | | | .---- jour de la semaine (0 - 6) (Dimanche=0)
# | | | | |
# * * * * * commande à exécuter
Exemplos de tarefas cron
# Editar seu crontab
crontab -e
Exemplos de tarefas:
# Exécuter un script tous les jours à 3h du matin
0 3 * * * /chemin/vers/script.sh
# Exécuter une sauvegarde tous les lundis à 2h30
30 2 * * 1 /chemin/vers/backup.sh
# Exécuter un script toutes les 15 minutes
*/15 * * * * /chemin/vers/script.sh
# Exécuter un script le premier jour de chaque mois
0 0 1 * * /chemin/vers/script.sh
Gerenciamento das saídas do cron
# Rediriger la sortie standard et d'erreur vers un fichier
0 3 * * * /chemin/vers/script.sh > /var/log/script.log 2>&1
# Ajouter la sortie à un fichier existant
0 3 * * * /chemin/vers/script.sh >> /var/log/script.log 2>&1
# Ignorer toute sortie
0 3 * * * /chemin/vers/script.sh > /dev/null 2>&1
# Envoyer la sortie par email (si configuré)
0 3 * * * /chemin/vers/script.sh | mail -s "Résultat du script" user@example.com
Automação avançada
Automação com Ansible
O Ansible é uma poderosa ferramenta de automação para gerenciamento de configuração e deploy de aplicações.
# Instalar o Ansible
sudo apt install ansible
# Exemplo de comando ad-hoc
ansible all -i inventory.ini -m ping
# Executar um playbook
ansible-playbook -i inventory.ini playbook.yml
Automação com Systemd
O Systemd permite criar serviços personalizados que são executados em segundo plano.
Exemplo de arquivo de serviço (/etc/systemd/system/mon-service.service):
[Unit]
Description=Mon Service Personnalisé
After=network.target
[Service]
Type=simple
User=utilisateur
WorkingDirectory=/chemin/vers/app
ExecStart=/usr/bin/node app.js
Restart=on-failure
[Install]
WantedBy=multi-user.target
Comandos para gerenciar o serviço:
# Recarregar o systemd após criar/modificar um serviço
sudo systemctl daemon-reload
# Habilitar o serviço na inicialização
sudo systemctl enable mon-service
# Iniciar o serviço
sudo systemctl start mon-service
# Verificar o status
sudo systemctl status mon-service
Conclusão
O scripting Bash e a automação são competências essenciais para qualquer administrador de sistemas Linux ou desenvolvedor. Ao automatizar tarefas repetitivas, você não só economiza tempo, como também reduz erros humanos e melhora a consistência das suas operações.
Comece com scripts simples e avance para soluções de automação mais complexas à medida que ganhar confiança. Não se esqueça de documentar seus scripts e de testá-los com cuidado antes de colocá-los em produção.
Com a prática, você descobrirá que quase todas as tarefas repetitivas no Linux podem ser automatizadas, permitindo que você se concentre em trabalhos mais criativos e estratégicos.
Sobre InSkillCoach
Especialista em treinamento e tecnologias
Coach especializado em tecnologias avançadas e IA, apoiado pela GNeurone Inc.
Certificações:
- AWS Certified Solutions Architect – Professional
- Certificações Google Cloud
- Microsoft Certified: DevOps Engineer Expert
- Certified Kubernetes Administrator (CKA)
- CompTIA Security+
Comentários
Os comentários são alimentados pelo GitHub Discussions
Conecte-se com o GitHub para participar da discussão