#!/bin/bash
#+ S'exercer avec getopts et OPTIND
#+ Script modifié le 10/09/03 suivant la suggestion de Bill Gradwohl.

#  Nous observons ici comment 'getopts' analyse les arguments en ligne de
#+ commande du script.
#  Les arguments sont analysés comme des "options" (flags) et leurs arguments
#+ associés.

# Essayez d'appeller ce script avec
# 'nomscript -mn'
# 'nomscript -oq qOption' (qOption peut être une chaîne de caractère arbitraire.)
# 'nomscript -qXXX -r'
#
# 'nomscript -qr'    - Résultat inattendu, prend "r" comme argument à l'option
#                      "q"
# 'nomscript -q -r'  - Résultat inattendu, identique à ci-dessus
# 'scriptname -mnop -mnop'  - Résultat inattendu
# (OPTIND est incapable d'indiquer d'où provient une option)

#  Si une option attend un argument ("flag:"), alors il récupèrera tout ce qui
#+ se trouve ensuite sur la ligne de commandes.

SANS_ARGS=0 
E_ERREUROPTION=65

if [ $# -eq "$SANS_ARGS" ]  # Script appelé sans argument?
then
  echo "Usage: `basename $0` options (-mnopqrs)"
  exit $E_ERREUROPTION        # Sort et explique l'usage, si aucun argument(s)
                              # n'est donné.
fi  
# Usage: nomscript -options
# Note: tiret (-) nécessaire


while getopts ":mnopq:rs" Option
do
  case $Option in
    m     ) echo "Scénario #1: option -m-   [OPTIND=${OPTIND}]";;
    n | o ) echo "Scénario #2: option -$Option-   [OPTIND=${OPTIND}]";;
    p     ) echo "Scénario #3: option -p-   [OPTIND=${OPTIND}]";;
    q     ) echo "Scénario #4: option -q- \
avec l'argument \"$OPTARG\"   [OPTIND=${OPTIND}]";;
    # Notez que l'option 'q' doit avoir un argument associé,
    # sinon il aura la valeur par défaut.
    r | s ) echo "Scénario #5: option -$Option-"'';;
    *     ) echo "Option non implémentée.";;   # DEFAULT
  esac
done

shift $(($OPTIND - 1))
# Décrémente le pointeur d'argument de façon à ce qu'il pointe vers le prochain.
#  $1 référence maintenant le premier élément n'étant pas une option sur la
#+ ligne de commande si un tel élément existe.
 
 exit 0

#   Comme Bill Gradwohl le dit,
#  "Le mécanisme getopts vous permet de spécifier :  nomscript -mnop -mnop
#+  mais il n'y a pas de moyen de différencier d'où cela vient en utilisant
#+  OPTIND."

