#!/bin/bash

# Ceci est une forme alternative au script précédent.

#  Suggéré par Heiner Steven
#+ comme astuce dans ces situations où une boucle de redirection est lancée
#+ comme un sous-shell, et donc que les variables à l'intérieur de la boucle
#+ ne conservent pas leurs valeurs une fois la boucle terminée.


if [ -z "$1" ]
then
  Fichier=noms.donnees     # Par défaut, si aucun fichier spécifié.
else
  Fichier=$1
fi  


exec 3&lt;&amp;0                  # Sauve stdin sur le descripteur de fichier 3.
exec 0&lt;"$Fichier"          # Redirige l'entrée standard.

compteur=0
echo


while [ "$nom" != Smith ]
do
  read nom               # Lit à partir du stdin redirigé ($Fichier).
  echo $nom
  let "compteur += 1"
done                      #  La boucle lit à partir du fichier $Fichier
                          #+ à cause de la ligne 20.

#  La version originale de ce script terminait la boucle "while" avec
#+      done &lt;"$Filename" 
#  Exercice :
#  Pourquoi cela n'est-il pas nécessaire ?


exec 0&lt;&amp;3                 # Restaure l'ancien stdin.
exec 3&lt;&amp;-                 # Ferme le temporaire fd 3.

echo; echo "$compteur noms lus"; echo

exit 0
