Vous êtes ici: Utilitaires / Programmation en BASH / 5 - Extraction des options et arguments dans l'appel d'un script
Friday, 21/09/2018

5 - Extraction des options et arguments dans l'appel d'un script

La commande getopts permet d'extraire les options et leurs arguments dans l'appel d'un script. Ainsi, il sera possible de réaliser des scripts supportant la syntaxe standard des options et arguments d'une commande unix. Par exemple, dans l'appel de la commande useradd -g user zoro, l'option -g et son argument user modifieront l'exécution de la commande useradd. En intégrant la commande getopts dans une boucle, il sera donc possible de modifier l'exécution d'un script en fonction des options et arguments qui lui seront fournis.

Syntaxe générale:

while getopts ":option1:option2option3" variable
do
    case $variable in
        option1 )
            commandes1 $OPTARG
            ;;
        option2 )
            commandes2
            ;;
        option3 )
            commandes3
            ;;
        \? )
            echo "La syntaxe est..."
            exit 1
            ;;
    esac
done
shift $(( $OPTIND -1 ))

 

Analyse de la syntaxe:

L'appel de getopts doit se faire en indiquant entre guillemets les options possibles. Le premier : indique à getopts de désactiver les messages d'erreurs si une option spécifiée à l'appel du script n'est pas dans la liste des options valides lors de l'appel de getopts. Les deux points (:) après option1 indique que l'option doit avoir un argument. Ainsi, dans la syntaxe générale, l'option1 possède un argument un argument, alors que option2 et option3 n'en ont pas.

Pour bien comprendre le fonctionnement de getopts, voici un script qui supprime un fichier dans un répertoire donné. Le synopsis de la commande sera:

Nom

    infofichier -- lecture de certaines informations dans un fichier

Synopsis

infofichier [-r répertoire] [-lmx] fichier

Description

infofichier permet de savoir si un fichier existe et si l'utilisateur en cours a le droit de le lire, de le modifier et/ou de l'exécuter. Il est évident que le simple fait d'exécuter la commande ls permet beaucoup plus facilement d'obtenir ces informations, mais il s'agit ici de faire un exemple simple utilisant la commande interne getopts!

-r répertoire
    Permet de spécifier le répertoire où se trouve le fichier. Oui, j'aurais pu le spécifier lors de l'appel en indiquant le chemin complet, mais...

-l
    Doit indiquer si le fichier peut être lu

-m
    Doit indiquer si le fichier peut être modifié

-x
    Doit indiquer si le fichier peut être exécuté

Historique

Cette commande ne sert à rien, mais elle permet de bien comprendre la commande getopts et elle est apparue uniquement pour votre compréhension en septembre 2000.

Voir aussi

Rien...

Auteur

Christian Lépine (clepine(at)teccart.qc(dot)ca)

Voici le script de cette nouvelle commande!

#!/bin/bash
[ $# -lt 1 ] && echo "Syntaxe générale de $0 est: $0 [-r répertoire] [-lex] fichier" && exit 1
clear
rep=""
lire=""
ecrire=""
execution=""
while getopts ":r:lex" option
do
    case $option in
        r)
            rep=$OPTARG
            ;;
        l)
lire="oui"
;;
e)
ecrire="oui"
;;
x)
execution="oui"
;;
\?)
echo "Vous avez utilisé une option non valide!"
echo "Syntaxe générale de $0 est: $0 [-r répertoire] [-lex] fichier"
exit 1
;;
esac
done
shift $(( $OPTIND-1 ))
if [ -z $rep ]
then
fichier="./$1"
else
fichier="$rep/$1"
fi
if [ -e "$fichier ]
then
echo "Le fichier $fichier existe."
[ -r $fichier -a $lire = "oui" ] && echo "Vous avez le droit de lecture"
[ -w $fichier -a $ecrire = "oui" ] && echo "Vous avez le droit de le modifier
[ -x $fichier -a $execution = "oui" ] && echo "Vous avez le droit de l'executer"
else
echo "Le fichier $fichier n'existe pas"
fi