Dans cette documentation, vous allez apprendre le concept de boucle en Bash.
Une boucle en scripting est un concept très simple à comprendre, comme son nom l'indique une "boucle" va permettre de répéter l'exécution d'un code pendant un certain temps.
La boucle va alors prendre plusieurs "formes" soit elle exécute votre code sur un temps donné & défini, soit elle exécute votre code de manière indéfinie jusqu'à remplir une conditions.
En bash ces boucles vont s'appeler "for" et "while", chacune va avoir sa propre utilité et va avoir son mot de fonctionnement particulier.
La boucle "for" comme son nom l'indique (pour) va nous permettre d'exécuter du code pour certaines valeurs qui sont contenu dans une autre valeur définie.
Par exemple : pour chaque ligne dans un fichier j'exécute un code A.
L'avantage de la boucle for est qu'à chaque "bouclage" (à chaque fois qu'il réexécute du code) la valeur après le for (ici la valeur est "ligne") s'autoincrémente (= passe de 1 à 2, de 2 à 3, etc...).
Dans notre cas ci-dessus, par défaut il partira avec "ligne" ayant une valeur (ex : 0) et à chaque passage augmentera son numéro (0 à 1, 1 à 2, etc..) ce qui signifie dans l'exemple précédent qu'il effectuera le code A tant qu'il y aura des lignes dans un fichier.
L'inconvéniant est qu'on est obligé à l'avance de définir une fin à cette boucle (ex : impossible de lire un fichier dont le nombre de ligne est infini), il faut donc bien réfléchir à l'utilisation de cette boucle puisqu'elle s'arrête forcément a un moment mais ce moment est défini.
La boucle "while" comme son nom l'indique (tant que) va nous permettre d'exécuter du code tant qu'une condition est remplie.
Par exemple : tant que la valeur A est inférieure à 10 j'exécute le code A
L'avantage ici est que la boucle while continuera "à l'infini" d'exécuter le code A tant que la condition est vrai (ici A inférieur a 10).
L'inconvénient est également que la boucle s'exécutera "à l'infini", le risque pour moi est donc que si dans mon code A je ne fais pas en sorte de ne pas remplir la condition à un moment, le code s'exécutera "pour toujours".
Dans l'utilisation comme montré précedement la boucle for est très simple, il vous suffit simplement de définir une valeur qui a une fin, si on reprend l'exemple précédent des lignes dans un fichier, en bash cela donnerait :
for ligne in fichier ; do
code A
done
Dans l'utilisation comme montré précedement la boucle whil est très simple, il vous suffit de définir une condition comme pour un "if", tant que cette condition est remplie le code s'exécute, pour reprendre l'exemple précédent tant que la valeur A est inférieur à 10, en bash cela donnerait :
while [ $A -lt 10 ] ; do
code A
done
Reprenons le code de mes documentations précédentes (variables, arguments, etc...)
J'ai pour le moment un code qui exécute la commande ls pour maximum 3 arguments, il vérifie à chaque fois que l'argument est bien non nul & est bien un dossier :
#!/bin/bash
if [ -n "$1" ] && [ -d "$1" ] ; then
firstLS=$(ls $1)
echo $1 :
echo $firstLS
else
echo "Argument n°1 manquant, attendu : nom du dossier à afficher"
exit
fi
if [ -n "$2" ] && [ -d "$2" ] ; then
secondLS=$(ls $2)
echo $2 :
echo $secondLS
else
echo "Argument n°2 manquant, attendu : nom du dossier à afficher"
exit
fi
if [ -n "$3" ] && [ -d "$3" ] ; then
thirdLS=$(ls $3)
echo $3 :
echo $thirdLS
else
echo "Argument n°3 manquant, attendu : nom du dossier à afficher"
exit
fi
Je pourrais utiliser une simple boucle "for" avec la syntaxe suivante :
Pour numéro d'argument allant de 1 à 3, j'effectue le code ....
for numArg in {1..3} ; do
[...]
done
Ici j'aurais donc le numArg avec la valeur 1 et le nombre maximum d'argument qui est 3, logiquement l'exécution se fera de la manière suivante :
Cela donnerait en bash :
#!/bin/bash
numArg=1
for arg in "$@" ; do
if [ -n "$arg" ] && [ -d "$arg" ] ; then
firstLS=$(ls $arg)
echo $arg :
echo $firstLS
nu
mArg=$(expr $numArg + 1)
else
echo "Argument n°$numArg manquant, attendu : nom du dossier à afficher"
exit
fi
done
Vous savez maintenant comment utilisez les boucles en bash !
Vous pouvez aller plus loin dans la configuration si vous le souhaitez, n’hésitez pas à me contacter dans ce cas ou à vous renseigner directement auprès des documentations disponibles sur leur site officiel.
Si vous souhaitez avoir plus d’informations ou si vous avez découvert une coquille sur ce tutoriel, merci de me contacter à l’adresse i.martel@imweb.ovh
v1 - Version initiale