Les scripts Bash sont un outil puissant pour automatiser les tâches sous Linux, en exploitant d'autres programmes existants. La boucle for est idéale pour répéter une opération similaire plusieurs fois.
Les administrateurs système Linux et macOS maîtrisent généralement les scripts via le terminal. Les utilisateurs Windows peuvent aussi s'y initier grâce au sous-système Windows pour Linux (WSL).
Un script Bash est un fichier texte contenant des commandes exécutables par le shell Bash, shell par défaut sur la plupart des distributions Linux et macOS (pré-Catalina).
Pour débuter, créez un script simple. Ouvrez un terminal, accédez au répertoire désiré et créez le fichier suivant :
#!/bin/bash
echo "Hello, World"
La première ligne (shebang) indique l'interpréteur Bash. Enregistrez sous hello_world.sh, puis :
chmod +x hello_world.sh
./hello_world.sh
La commande chmod +x rend le fichier exécutable. Si "Hello, World" s'affiche, tout est en ordre.
En programmation, les boucles for sont de deux types principaux : numériques (sur un compteur) et itératives (sur une liste ou un tableau).
Exemple numérique classique (syntaxe C-like) :
for (i = 0; i < 100; i++) {
/* instructions répétées */
}
Exemple itératif (foreach-like) :
personnes = ["Pierre", "Paul", "Marie"]
for personne in personnes:
if personne == "Paul":
...
En Bash, la boucle for...in est la plus courante. Syntaxe :
for arg in [liste]; do
# instructions
# $arg contient la valeur courante
done
Exemple sur trois fichiers :
for fichier in un.c deux.c trois.c; do
ls "$fichier"
done
Sortie :
un.c deux.c trois.c
Avec un glob (modèle avec wildcards) pour tous les fichiers .xml :
for fichier in *.xml; do
ls -l "$fichier"
done
Exemple de sortie :
-rw-r--r-- 1 user staff 2436 3 nov. 2019 feed.xml -rw-r--r-- 1 user staff 6447 27 oct. 16:24 sitemap.xml
Contrairement à ls -l *.xml (une exécution), la boucle lance ls une fois par fichier.
Avec wc -l :
wc -l *.xml
Donne totaux ; en boucle :
for fichier in *.xml; do
wc -l "$fichier"
done
Affiche par fichier sans total global.
Évitez les guillemets autour de la liste :
for fichier in un.c deux.c; do ... done
Pas :
for fichier in "un.c deux.c"; do ... done # Une seule itération
Utilisez une variable :
FILES="un.c deux.c"
for fichier in $FILES; do ... done
Sans liste, itère sur les arguments de ligne de commande ($@) :
#!/bin/bash
for a; do
echo $a
done
./args.sh un deux trois affiche :
un deux trois
Syntaxe C-like :
for ((i=1; i<=5; i++)); do
echo $i
done
Ou avec expansion d'accolades (plus concise) :
for i in {1..5}; do
echo $i
done
Exemple : trouver le premier fichier >100 caractères :
#!/bin/bash
for fichier in *; do
if [ ! -f "$fichier" ]; then
echo "$fichier n'est pas un fichier"
continue
fi
num_chars=$(wc -c <"$fichier")
echo "$fichier contient $num_chars caractères"
if [ $num_chars -gt 100 ]; then
echo "Fichier >100 trouvé : $fichier"
break
fi
done
Les scripts Bash automatisent efficacement les tâches. Les boucles for, combinées à des variables, commandes externes, break et continue, permettent une logique complexe pour de nombreuses opérations système.
[]