0%
Scripting y automatización en Linux: domina Bash

Scripting y automatización en Linux: domina Bash

Aprende a crear potentes scripts Bash y a automatizar tus tareas diarias en Linux.

I

InSkillCoach

· min

Scripting y automatización en Linux: domina Bash

Una de las mayores ventajas de Linux es su capacidad para automatizar tareas repetitivas mediante scripting. El shell Bash, presente en casi todas las distribuciones Linux, es una herramienta potente que permite crear scripts para automatizar prácticamente cualquier tarea. Esta guía te presenta los fundamentos del scripting en Bash y las técnicas de automatización esenciales.

Fundamentos del scripting en Bash

Estructura de un script Bash

Todo script Bash comienza con un “shebang” que indica el intérprete que se debe usar:

#!/bin/bash

# Ceci est un commentaire
echo "Bonjour, monde!"

# Sortie avec code de retour 0 (succès)
exit 0

Para hacer ejecutable un script:

chmod +x mon_script.sh

Para ejecutar un script:

./mon_script.sh

Variables y operaciones

Las variables son esenciales en cualquier lenguaje de scripting:

#!/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 y salidas

Interactuar con el usuario y manipular las entradas/salidas:

#!/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

Estructuras de control

Condiciones

Las estructuras condicionales permiten ejecutar código según ciertas condiciones:

#!/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

Bucles

Los bucles permiten repetir acciones:

#!/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)

La estructura case es útil para las opciones múltiples:

#!/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

Funciones

Las funciones permiten 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 automatización prácticos

Script de copia de seguridad automática

#!/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."

Supervisión automatizada del 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"

Automatización con Cron

Cron es un planificador de tareas que permite ejecutar scripts en momentos concretos.

Sintaxis de 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

Ejemplos de tareas cron

# Éditer votre crontab
crontab -e

Ejemplos de tareas:

# 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

Gestión de las salidas de 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 avanzadas

Procesamiento de texto con sed y 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

Expresiones 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

Automatización con 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

Conclusión

El scripting en Bash y la automatización son competencias esenciales para cualquier usuario de Linux. Dominando estas técnicas, puedes:

  • Ahorrar una cantidad considerable de tiempo en las tareas repetitivas
  • Reducir los errores humanos
  • Crear soluciones personalizadas adaptadas a tus necesidades específicas
  • Mejorar tu productividad global

Empieza con scripts sencillos y avanza después hacia soluciones más complejas a medida que ganes confianza. La práctica regular es la clave para llegar a ser competente en el scripting en Bash.

No olvides que la documentación es tu mejor aliada. Usa man bash para explorar todas las funcionalidades disponibles y no dudes en consultar los numerosos recursos en línea dedicados al scripting en Bash.

InSkillCoach

Acerca de InSkillCoach

Experto en formación y tecnologías

Coach especializado en tecnologías avanzadas e IA, impulsado por GNeurone Inc.

Certificaciones:

  • AWS Certified Solutions Architect – Professional
  • Certificaciones de Google Cloud
  • Microsoft Certified: DevOps Engineer Expert
  • Certified Kubernetes Administrator (CKA)
  • CompTIA Security+
1.9k
129

Comentarios

Los comentarios funcionan con GitHub Discussions

Inicia sesión con GitHub para participar en la discusión

¡Enlace copiado!