Scripting e Automação no Linux: Domine o Bash
Aprenda a criar scripts Bash poderosos e a automatizar suas tarefas diárias no Linux.
InSkillCoach
Scripting e Automação no Linux: Domine o Bash
Uma das maiores vantagens do Linux é a capacidade de automatizar tarefas repetitivas por meio de scripts. O shell Bash, presente em quase todas as distribuições Linux, é uma ferramenta poderosa que permite criar scripts para automatizar praticamente qualquer tarefa. Este guia apresenta os fundamentos do scripting Bash e as técnicas essenciais de automação.
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
# Ceci est un commentaire
echo "Bonjour, monde!"
# Sortie avec code de retour 0 (succès)
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
As variáveis são essenciais em qualquer linguagem de script:
#!/bin/bash
# Déclaration et utilisation de variables
NOM="Linux"
VERSION=5.15
DISTRIBUTION="Ubuntu"
# Afficher des variables
echo "Je travaille avec $DISTRIBUTION, qui utilise le noyau $NOM version $VERSION"
# Variables d'environnement
echo "Mon répertoire personnel est $HOME"
echo "Mon shell actuel est $SHELL"
# Opérations arithmétiques
let RESULTAT=10+5
echo "10 + 5 = $RESULTAT"
# Autre méthode pour les calculs
CARRE=$((5 * 5))
echo "5² = $CARRE"
Entradas e saídas
Interagir com o usuário e manipular entradas/saídas:
#!/bin/bash
# Demander une entrée à l'utilisateur
echo "Quel est votre nom ?"
read NOM
# Afficher un message avec l'entrée
echo "Bonjour, $NOM !"
# Arguments de ligne de commande
# $0 est le nom du script
# $1, $2, etc. sont les arguments
# $# est le nombre d'arguments
# $@ représente tous les arguments
echo "Nom du script : $0"
echo "Premier argument : $1"
echo "Nombre d'arguments : $#"
echo "Tous les arguments : $@"
# Redirection de sortie vers un fichier
echo "Ceci est enregistré dans un fichier" > output.txt
# Ajouter à un fichier existant
echo "Ceci est ajouté au fichier" >> output.txt
# Lire depuis un fichier
echo "Contenu du fichier :"
cat output.txt
Estruturas de controle
Condições
As estruturas condicionais permitem executar código de acordo com determinadas condições:
#!/bin/bash
# Structure 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
# Opérateurs de comparaison pour nombres
# -eq : égal
# -ne : différent
# -gt : supérieur
# -lt : inférieur
# -ge : supérieur ou égal
# -le : inférieur ou égal
# Test sur les fichiers
if [ -f "/etc/passwd" ]; then
echo "Le fichier /etc/passwd existe"
fi
if [ -d "/etc" ]; then
echo "/etc est un répertoire"
fi
# Opérateurs pour fichiers
# -f : fichier régulier
# -d : répertoire
# -e : existe
# -r : lisible
# -w : modifiable
# -x : exécutable
# Opérateurs logiques
if [ $NOMBRE -gt 10 ] && [ $NOMBRE -lt 20 ]; then
echo "$NOMBRE est entre 10 et 20"
fi
if [ "$NOM" = "Linux" ] || [ "$NOM" = "GNU/Linux" ]; then
echo "Vous utilisez Linux"
fi
Laços de repetição
Os laços permitem repetir ações:
#!/bin/bash
# Boucle for
echo "Comptage avec for :"
for i in {1..5}; do
echo "Numéro $i"
done
# Boucle for avec liste
echo "Liste de distributions Linux :"
for distro in Ubuntu Fedora "Arch Linux" Debian; do
echo "- $distro"
done
# Boucle for classique (style C)
for ((i=0; i<5; i++)); do
echo "Index $i"
done
# Boucle while
echo "Comptage avec while :"
COUNT=1
while [ $COUNT -le 5 ]; do
echo "Compteur : $COUNT"
let COUNT=COUNT+1
done
# Boucle until (jusqu'à ce que la condition soit vraie)
echo "Décompte avec until :"
COUNT=5
until [ $COUNT -le 0 ]; do
echo "Décompte : $COUNT"
let COUNT=COUNT-1
done
Case (switch)
A estrutura case é útil para múltiplas escolhas:
#!/bin/bash
echo "Quelle distribution Linux utilisez-vous ? (Ubuntu, Fedora, Arch, Debian)"
read DISTRO
case $DISTRO in
"Ubuntu")
echo "Ubuntu est basé sur Debian et utilise APT."
;;
"Fedora")
echo "Fedora est sponsorisé par Red Hat et utilise DNF."
;;
"Arch")
echo "Arch Linux utilise Pacman et suit un modèle rolling release."
;;
"Debian")
echo "Debian est connu pour sa stabilité et utilise APT."
;;
*)
echo "Je ne connais pas cette distribution."
;;
esac
Funções
As funções permitem reutilizar código:
#!/bin/bash
# Définition d'une fonction
saluer() {
echo "Bonjour, $1 !"
}
# Fonction avec retour de valeur
calculer_carre() {
local nombre=$1 # Variable locale
echo $((nombre * nombre))
}
# Appel de fonction
saluer "Alice"
saluer "Bob"
# Récupérer la valeur de retour
resultat=$(calculer_carre 5)
echo "Le carré de 5 est $resultat"
# Fonction avec plusieurs paramètres
addition() {
echo $(($1 + $2))
}
somme=$(addition 10 15)
echo "10 + 15 = $somme"
Scripts de automação na prática
Script de backup automático
#!/bin/bash
# Script de sauvegarde automatique
# Usage: ./backup.sh [répertoire_source]
# Vérifier si un argument a été fourni
if [ $# -eq 0 ]; then
echo "Usage: $0 [répertoire_source]"
exit 1
fi
# Variables
SOURCE_DIR=$1
BACKUP_DIR="$HOME/backups"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
ARCHIVE_NAME="backup_$DATE.tar.gz"
# Créer le répertoire de sauvegarde s'il n'existe pas
mkdir -p $BACKUP_DIR
# Créer l'archive
echo "Création de la sauvegarde de $SOURCE_DIR..."
tar -czf "$BACKUP_DIR/$ARCHIVE_NAME" "$SOURCE_DIR"
# Vérifier si la sauvegarde a réussi
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
# Supprimer les anciennes sauvegardes (plus de 30 jours)
find $BACKUP_DIR -name "backup_*.tar.gz" -mtime +30 -delete
echo "Les sauvegardes de plus de 30 jours ont été supprimées."
Monitoramento automatizado do sistema
#!/bin/bash
# Script de surveillance système
# Vérifie l'utilisation du CPU, de la mémoire et de l'espace disque
# Seuils d'alerte
CPU_THRESHOLD=80
MEM_THRESHOLD=80
DISK_THRESHOLD=90
LOG_FILE="$HOME/system_monitor.log"
# Fonction de journalisation
log_message() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}
log_message "Début de la vérification du système"
# Vérification de l'utilisation CPU
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}' | cut -d. -f1)
log_message "Utilisation CPU: $CPU_USAGE%"
if [ $CPU_USAGE -gt $CPU_THRESHOLD ]; then
MESSAGE="ALERTE: Utilisation CPU à $CPU_USAGE% (seuil: $CPU_THRESHOLD%)"
log_message "$MESSAGE"
echo "$MESSAGE"
fi
# Vérification de l'utilisation mémoire
MEM_USAGE=$(free | grep Mem | awk '{print int($3/$2 * 100)}')
log_message "Utilisation mémoire: $MEM_USAGE%"
if [ $MEM_USAGE -gt $MEM_THRESHOLD ]; then
MESSAGE="ALERTE: Utilisation mémoire à $MEM_USAGE% (seuil: $MEM_THRESHOLD%)"
log_message "$MESSAGE"
echo "$MESSAGE"
fi
# Vérification de l'espace disque
DISK_USAGE=$(df -h / | grep / | awk '{print $5}' | cut -d% -f1)
log_message "Utilisation disque: $DISK_USAGE%"
if [ $DISK_USAGE -gt $DISK_THRESHOLD ]; then
MESSAGE="ALERTE: Utilisation disque à $DISK_USAGE% (seuil: $DISK_THRESHOLD%)"
log_message "$MESSAGE"
echo "$MESSAGE"
fi
log_message "Fin de la vérification du système"
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
# Éditer votre 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
Técnicas avançadas
Processamento de texto com sed e awk
# sed - Éditeur de flux
sed 's/ancien/nouveau/g' fichier.txt # Remplacer toutes les occurrences
sed -i '5d' fichier.txt # Supprimer la ligne 5
sed -n '10,20p' fichier.txt # Afficher les lignes 10 à 20
# awk - Traitement de texte par colonnes
awk '{print $1}' fichier.txt # Afficher la première colonne
awk -F: '{print $1 " -> " $3}' /etc/passwd # Utiliser : comme délimiteur
awk '{sum += $1} END {print "Somme:", sum}' donnees.txt # Calculer une somme
Expressões regulares
# Recherche avec grep et expressions régulières
grep '^[A-Z]' fichier.txt # Lignes commençant par une majuscule
grep -E '[0-9]{3}-[0-9]{3}-[0-9]{4}' # Format de numéro de téléphone
grep -v '^#' config.txt # Lignes qui ne sont pas des commentaires
Automação com expect
#!/usr/bin/expect
# Automatiser les interactions interactives
spawn ssh utilisateur@serveur
expect "password:"
send "mot_de_passe\r"
expect "$ "
send "ls -la\r"
expect "$ "
send "exit\r"
expect eof
Conclusão
O scripting Bash e a automação são competências essenciais para qualquer usuário Linux. Dominando essas técnicas, você pode:
- Economizar um tempo considerável em tarefas repetitivas
- Reduzir erros humanos
- Criar soluções personalizadas, adaptadas às suas necessidades específicas
- Melhorar sua produtividade geral
Comece com scripts simples e avance para soluções mais complexas conforme ganhar confiança. A prática regular é a chave para se tornar competente em scripting Bash.
Não se esqueça de que a documentação é sua melhor amiga. Use man bash para explorar todos os recursos disponíveis e não hesite em consultar os inúmeros recursos on-line dedicados ao scripting Bash.
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