0%
Scripting e Automação no Linux: Domine o Bash

Scripting e Automação no Linux: Domine o Bash

Aprenda a criar scripts Bash poderosos e a automatizar suas tarefas diárias no Linux.

I

InSkillCoach

· min

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.

InSkillCoach

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+
1.8k
338

Comentários

Os comentários são alimentados pelo GitHub Discussions

Conecte-se com o GitHub para participar da discussão

Link copiado!