Retour au blog
Linux

Shell scripting pour le DevOps

01 May 2024 9 min
Linux Bash Automatisation

L'art du shell scripting

Le shell scripting reste un outil fondamental pour tout ingénieur DevOps. Voici les patterns et bonnes pratiques essentiels.

Structure d'un script robuste

#!/bin/bash
set -euo pipefail
IFS=$'\n\t'

# Variables
readonly SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
readonly LOG_FILE="/var/log/deploy.log"

# Fonctions
log() {
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOG_FILE"
}

cleanup() {
    log "Nettoyage en cours..."
    rm -rf "$TEMP_DIR"
}
trap cleanup EXIT

# Script principal
main() {
    log "Démarrage du déploiement"
    # ...
    log "Déploiement terminé"
}

main "$@"

Patterns utiles

# Vérifier si un service est actif
check_service() {
    if systemctl is-active --quiet "$1"; then
        echo "$1 est actif"
    else
        echo "$1 est inactif" && return 1
    fi
}

# Retry avec backoff
retry() {
    local max_attempts=$1; shift
    local attempt=1
    while [ $attempt -le $max_attempts ]; do
        if "$@"; then return 0; fi
        echo "Tentative $attempt/$max_attempts échouée"
        sleep $((attempt * 2))
        ((attempt++))
    done
    return 1
}

Bonnes pratiques

  • Toujours utiliser set -euo pipefail
  • Documenter les variables et fonctions
  • Utiliser des fonctions pour la lisibilité
  • Gérer les erreurs avec trap
  • Tester avec shellcheck