8.2. Itération while

La commande interne while correspond à l’itération tant que présente dans de nombreux langages de programmation.

Syntaxe :

while suite_cmd1

do

   suite_cmd2

done

La suite de commandes suite_cmd1 est exécutée; si son code de retour est égal à 0, alors la suite de commandes suite_cmd2 est exécutée, puis suite_cmd1 est réexécutée. Si son code de retour est différent de 0, alors l’itération se termine.

En d’autres termes, suite_cmd2 est exécutée autant de fois que le code de retour de suite_cmd1 est égal à 0.

L’originalité de cette structure de contrôle est que le test ne porte pas sur une condition booléenne (vraie ou fausse) mais sur le code de retour issu de l’exécution d’une suite de commandes.

En tant que mots-clé, while, do et done doivent être les premiers mots d'une commande.

Une commande while, comme toute commande interne, peut être écrite directement sur la ligne de commande.

$ while who | grep sanchis >/dev/null
> do
>   echo ″l’utilisateur sanchis est encore connecte″
>   sleep 5
> done
l’utilisateur sanchis est encore connecte
	...
^C
$

Le fonctionnement est le suivant : la suite de commandes who | grep sanchis est exécutée. Son code de retour sera égal à 0 si le mot sanchis est présent dans les résultats engendrés par l’exécution de la commande unix who, c’est à dire si l’utilisateur sanchis est connecté. Dans ce cas, la ou les lignes correspondant à cet utilisateur seront affichées sur la sortie standard de la commande grep. Comme seul le code de retour est intéressant et non le résultat, la sortie standard de grep est redirigée vers le puits (/dev/null). Enfin, le message est affiché et le programme « s’endort » pendant 5 secondes. Ensuite, la suite de commandes who | grep sanchis est réexécutée. Si l’utilisateur s’est totalement déconnecté, la commande grep ne trouve aucune ligne contenant la chaîne sanchis, son code de retour sera égal à 1 et le programme sortira de l’itération.