La commande while permet d'exécuter une série de commandes tant que la condition d'exécution est remplie. Dès que la réponse est FAUX on sort de la boucle
Il est interessant d'associer les commandes while et read comme ci-après :i=0 while (( i < 4 )) --> 0 do echo "-->" $i --> 1 let i+=1 --> 2 done --> 3 echo "==>" $i ==> 4
while read -r Nom Prenom Adresse
do if [[ $Nom = "DURAND" ]]
then echo $Prenom $Nom "habite :"
echo $Adresse
fi
done < fichier_adresse
Chaque ligne est lue et séparée dans les variables 'Nom' 'Prenom'
et 'Adresse'. A la lecture de la fin de fichier la réponse est
FAUX et l'on sort de la boucle.
Nous avons cependent là une différence de comportement suivant les versions de ksh.
i=1
echo "Avant la boucle i=$i" Avant la boucle i=1
echo "essai" | while read message
do
let i+=1
echo "Dans la boucle i=$i" Dans la boucle i=2
done
echo "Apres la boucle i=$i" Apres la boucle i=2
i=1
echo "Avant la boucle i=$i" Avant la boucle i=1
echo "essai" | while read message
do
let i+=1
echo "Dans la boucle i=$i" Dans la boucle i=2
done
echo "Apres la boucle i=$i" Apres la boucle i=1
En effet, après le pipe, la commande while est considérée comme un shell fils (commande externe)
# Création du coprocess
( while true
do
read x
if [[ "$x" = "EOF" ]]
then
print $y
exit
else
y=$x
fi
done
)|&
i=1
print -p $i # initialisation du coprocess
echo "Avant la boucle i=$i" Avant la boucle i=1
echo "essai" | while read message
do
let i+=1
echo "Dans la boucle i=$i" Dans la boucle i=2
print -p $i # Transmission au coprocess
done
print -p "EOF" # fin du coprocess
read -p i # récupération de i
echo "Apres la boucle i=$i" Apres la boucle i=2