La nuit se répète. Les mêmes gestes, les mêmes rues, les mêmes surveillances. Dans le script, la répétition s’appelle une boucle. C’est l’outil de l’obsessionnel, du méticuleux. Pour traiter une liste de cibles, surveiller un log jusqu’à ce qu’un mot apparaisse, ou simplement attendre qu’une condition se brise. La boucle est le cœur battant de l’automatisation.
8.1 Boucle for
La boucle du comptable. Elle sait combien de tours elle doit faire. Elle parcourt une liste, un éventail, une série connue.
-
Parcours de listes : Une liste explicite, dure comme le pavé.
for complice in "Moriarty" "Sebastian" "Irene" "Lestrade"; do echo "[*] Vérification du dossier : $complice" grep -q "$complice" /var/log/meeting.log && echo " -> Présent au dernier rendez-vous." doneSortie :
[*] Vérification du dossier : Moriarty -> Présent au dernier rendez-vous. [*] Vérification du dossier : Sebastian [*] Vérification du dossier : Irene [*] Vérification du dossier : Lestrade -
Parcours de fichiers : L’arme classique. Agir sur chaque fichier correspondant à un motif.
echo "[+] Nettoyage des preuves temporaires..." for fichier in /tmp/*.tmp /tmp/*.cache ~/.cache/trash/*; do if [[ -f "$fichier" ]]; then echo " Effacement : $(basename "$fichier")" rm -f "$fichier" fi doneLa boucle
forest aussi votre outil pour parcourir les arguments d’un script (for arg in "$@"). -
Parcours numérique : Compter les tours.
echo "[*] Tentatives de connexion sur le port 22..." for (( i=1; i<=5; i++ )); do echo " Essai n°$i en cours..." nc -z -w 1 192.168.1.100 22 && echo " -> SUCCÈS" && break sleep 2 doneLa syntaxe
(( i=1; i<=5; i++ ))est du style C.breakcasse la boucle prématurément si on réussit.
8.2 Boucle while
La boucle du guetteur. Elle tourne tant que (while) une condition est vraie. Elle est idéale pour attendre un événement, ou lire un flux dont on ne connaît pas la fin.
-
Conditions simples : Attendre qu’un fichier apparaisse, qu’un processus meure.
echo "[*] En attente du signal de l'opérateur..." signal_file="/tmp/go_signal" while [[ ! -f "$signal_file" ]]; do echo -n "." # Un point par seconde d'attente sleep 1 done echo " Signal reçu. Lancement de la phase 2." rm "$signal_file" -
Lecture de fichiers ligne par ligne : Traiter un journal, un fichier de config, sans tout charger en mémoire.
echo "[+] Analyse du fichier de contacts compromis..." while IFS= read -r ligne; do # IFS= empêche le stripping des espaces, -r ignore les backslashes. if [[ "$ligne" =~ @(gmail|proton)\.com$ ]]; then echo " Email suspect : $ligne" fi done < "liste_contacts.txt"done < "fichier.txt"injecte le fichier dans l’entrée standard de la bouclewhile. Chaque tour lit une nouvelle ligne. -
Lecture en direct d’un flux : Surveiller la sortie d’une commande en temps réel.
echo "[*] Surveillance du journal d'authentification (Ctrl+C pour arrêter)..." tail -f /var/log/auth.log | while read -r logline; do if [[ "$logline" == *"FAILED"* ]]; then echo " ALERTE : Tentative échouée -> $logline" fi done
8.3 Boucle until
La sœur inverse de while. Elle tourne jusqu’à ce que (until) une condition devienne vraie. Elle est parfaite pour les attentes où l’on cherche un état de succès.
-
Attendre qu’un service soit disponible, qu’un hôte réponde.
echo "[*] Test de la connexion au serveur de chute..." serveur="10.0.2.15" until ping -c 1 -W 1 "$serveur" &>/dev/null; do echo " Serveur $serveur injoignable. Nouvel essai dans 5s..." sleep 5 done echo "[+] Serveur contacté. Transfert des données." scp donnees.txt noir@$serveur:/drop/La boucle tourne jusqu’à ce que la commande
pingréussisse (code de retour 0). -
Garder un script en vie jusqu’à une condition terminale.
compteur=0 until [[ $compteur -ge 10 || -f "/tmp/abort" ]]; do echo "[$compteur] Cycle de surveillance actif." # ... tâches de surveillance ... ((compteur++)) sleep 60 done echo "Arrêt de la surveillance."
Les boucles sont le moteur. for pour les listes connues, while pour les attentes vigilantes, until pour les attentes de résultat. Elles automatisent la patience, la répétition, la surveillance. Une boucle mal conçue peut devenir infinie, un piège dans lequel le script tourne en rond jusqu’à ce que quelqu’un vienne l’éteindre d’un coup de Ctrl+C sec.
Maîtrisez les cycles. Ils sont le rythme cardiaque de vos opérations autonomes dans les ténèbres numériques.