#!/bin/bash
# upperconv.sh
# Convertit un fichier d'entrée spécifié en majuscule.

E_ACCES_FICHIER=70
E_MAUVAIS_ARGS=71

if [ ! -r "$1" ]     # Est-ce que le fichier spécifié est lisible ?
then
  echo "Ne peut pas lire le fichier d'entrée !"
  echo "Usage: $0 fichier-entrée fichier-sortie"
  exit $E_ACCES_FICHIER
fi  #  Sortira avec la même erreur,
    #+ même si le fichier d'entrée ($1) n'est pas spécifié (pourquoi ?).

if [ -z "$2" ]
then
  echo "A besoin d'un fichier de sortie."
  echo "Usage: $0 fichier-entrée fichier-sortie"
  exit $E_MAUVAIS_ARGS
fi


exec 4&lt;&amp;0
exec &lt; $1            # Lira le fichier d'entrée.

exec 7&gt;&amp;1
exec &gt; $2            # Écrira sur le fichier de sortie.
                     #  Assume que le fichier de sortie est modifiable
		     #+ (ajoutez une vérification ?).

# -----------------------------------------------
    cat - | tr a-z A-Z   # Conversion en majuscule.
#   ^^^^^                # Lecture de stdin.
#           ^^^^^^^^^^   # Écriture sur stdout.
# Néanmoins, à la fois stdin et stdout ont été redirigés.
# Notez que le 'cat' peut être omis.
# -----------------------------------------------

exec 1&gt;&amp;7 7&gt;&amp;-       # Restaure stdout.
exec 0&gt;&amp;4 4&gt;&amp;-       # Restaure stdin.

#  Après retour à la normal, la ligne suivante affiche sur stdout comme de
#+ normal.
echo "Le fichier \"$1\" a été enregistré dans \"$2\" après une convertion en majuscule."

exit 0
