Les options suivies d'un : nécessitent obligatoirement un paramêtre. La variable $OPTARG prend alors la valeur de celui-ci. Si ce paramêtre est omis, nom prend la valeur : et le cas peut être traité.
chaineopt est la liste des options contrôlées nom est la variable qui représente l'option prise en compte arguments est la liste des arguments passé au programme
Si la liste chaineopt commence par un : les options inconnues, passées au programme peuvent être traitées. nom prenant alors la valeur ? et le paramêtre est mis dans la variable $OPTARG.
La variable $OPTIND est l'index du prochain argument traité. Chaque fois qu'un script est appelé OPTIND est positionné à 1. en fin de boucle de lecture par getopts, OPTIND est donc égal au nombre d'argument + 1.
| Exemple d'utilisation de getopts | |
|---|---|
# programme manip
while getopts :xf: c
do case $c in
x) xflg=1;;
+x) unset xflg;;
f) FICout=$OPTARG;;
:) FICout=sortie_par_defaut ;;
\?) print -u2 "$0: option $OPTARG inconnue"
print -u2 "Usage: $0 [ -x -f file_out ] file_in ..."
exit 2;;
esac
done
shift $OPTIND-1 # décallage au dernier argument
FICIN=$1
echo "fichier d'entrée" ${FICin:=OUT_def} # substitution
echo "fichier de sortie" ${FICout:=IN_def} # . si non défini
echo ${xflg:+'flag x utilisé'} # . si défini
|
manip -xf toto tata
fichier d'entrée tata fichier de sortie toto flag x utilisé |