Écrire des scripts bash pour automatiser des tâches d'administration : variables, conditions, boucles, fonctions et bonnes pratiques.
Connaître les commandes Linux de base. Avoir accès à un terminal Debian. Savoir utiliser un éditeur de texte (nano, vim).
#!/bin/bash # Ligne 1 : le shebang — indique l'interpréteur à utiliser # Les lignes commençant par # sont des commentaires echo "Bonjour depuis mon premier script !"
# Créer le script nano /opt/scripts/monscript.sh # Rendre le script exécutable chmod +x /opt/scripts/monscript.sh # Exécuter le script ./monscript.sh # ou bash /opt/scripts/monscript.sh
#!/bin/bash # Déclaration d'une variable (pas d'espaces autour du =) NOM="Alice" AGE=25 DATE=$(date +%Y-%m-%d) # commande dans une variable # Utiliser une variable (avec $) echo "Bonjour $NOM, vous avez $AGE ans" echo "Date du jour : $DATE" # Variables spéciales echo "Nom du script : $0" echo "Nb d'arguments : $#" echo "Tous les arguments : $@" echo "Code retour dernière commande : $?" echo "PID du script : $$"
#!/bin/bash # Appel : ./backup.sh /var/www /backup SOURCE=$1 # premier argument DEST=$2 # deuxième argument echo "Sauvegarde de $SOURCE vers $DEST" tar -czf "$DEST/backup-$(date +%Y%m%d).tar.gz" "$SOURCE"
#!/bin/bash # Syntaxe de base if [ condition ]; then # commandes si vrai elif [ autre_condition ]; then # commandes si autre condition else # commandes si faux fi
| Test | Signification | Exemple |
|---|---|---|
| -f fichier | Le fichier existe et est un fichier ordinaire | [ -f /etc/passwd ] |
| -d dossier | Le répertoire existe | [ -d /var/www ] |
| -e chemin | Le fichier ou dossier existe | [ -e /opt/app ] |
| -z chaine | La chaîne est vide | [ -z "$VAR" ] |
| -n chaine | La chaîne n'est pas vide | [ -n "$VAR" ] |
| = ou == | Égalité de chaînes | [ "$NOM" = "Alice" ] |
| != | Inégalité de chaînes | [ "$NOM" != "Bob" ] |
| -eq | Égalité de nombres | [ $AGE -eq 25 ] |
| -ne | Différence de nombres | [ $CODE -ne 0 ] |
| -gt | Supérieur à (greater than) | [ $NB -gt 10 ] |
| -lt | Inférieur à (lower than) | [ $NB -lt 100 ] |
#!/bin/bash FICHIER="/etc/passwd" if [ -f "$FICHIER" ]; then echo "Le fichier $FICHIER existe" else echo "Le fichier $FICHIER n'existe pas" fi # Vérifier le code de retour d'une commande ping -c 1 8.8.8.8 > /dev/null 2>&1 if [ $? -eq 0 ]; then echo "Internet accessible" else echo "Pas de connectivité Internet" fi
#!/bin/bash # Itérer sur une liste de valeurs for SERVEUR in srv01 srv02 srv03; do echo "Ping de $SERVEUR..." ping -c 1 "$SERVEUR" > /dev/null && echo " OK" || echo " ECHEC" done # Itérer sur des fichiers for FICHIER in /var/log/*.log; do echo "Taille de $FICHIER : $(wc -l < $FICHIER) lignes" done # Boucle numérique for i in $(seq 1 10); do echo "Itération $i" done
#!/bin/bash COMPTEUR=0 while [ $COMPTEUR -lt 5 ]; do echo "Compteur : $COMPTEUR" COMPTEUR=$((COMPTEUR + 1)) done # Lire un fichier ligne par ligne while IFS= read -r LIGNE; do echo "Ligne : $LIGNE" done < /etc/hosts
#!/bin/bash # Déclaration d'une fonction afficher_info() { local NOM=$1 # variable locale à la fonction echo "=== Informations sur $NOM ===" echo "Date : $(date)" echo "Uptime : $(uptime -p)" } verifier_service() { local SERVICE=$1 if systemctl is-active --quiet "$SERVICE"; then echo "Service $SERVICE : ACTIF" else echo "Service $SERVICE : INACTIF" fi } # Appel des fonctions afficher_info "Serveur Web" verifier_service "ssh" verifier_service "apache2"
#!/bin/bash # check-sante.sh — Vérification rapide de l'état du serveur LOG="/var/log/check-sante.log" DATE=$(date "+%Y-%m-%d %H:%M:%S") echo "[$DATE] Début vérification" | tee -a "$LOG" # Espace disque USAGE=$(df / | awk 'NR==2 {print int($5)}') if [ "$USAGE" -gt 80 ]; then echo "ALERTE : disque à ${USAGE}%" | tee -a "$LOG" else echo "Disque OK : ${USAGE}%" | tee -a "$LOG" fi # Services critiques for SERVICE in ssh apache2 mysql; do if systemctl is-active --quiet "$SERVICE"; then echo "Service $SERVICE : OK" | tee -a "$LOG" else echo "ALERTE : Service $SERVICE INACTIF" | tee -a "$LOG" fi done echo "[$DATE] Vérification terminée" | tee -a "$LOG"
✅ Réponse : Le shebang — indique l'interpréteur à utiliser
✅ Réponse : chmod +x script.sh
✅ Réponse : Le code de retour de la dernière commande
✅ Réponse : [ -f fichier ]
✅ Réponse : while IFS= read -r ligne; do ... done < fichier