Pascal BEAUSSART

getopts


La commande getopts permet de controler les options passées à un programme sous la forme -option +option.
La syntaxe de la commande est : getopts chaineopt nom [arguments ...]
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

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é.

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é

[RETOUR] [HOME]