Bash et options de ligne de commande

Le
Arnaud JAYET
Bonjour,

en espérant pas etre HS vu que c'est plus une question programmation
Linux que purement Debian.

je souhaite ecrire un script bash utilisant des flags avec des noms
longs genre :

$ ./monscript --user=toto --group=tutu


qui serait équivalent à (avec des flag court)
$ monscript -u toto -g tutu
donc pouvoir utiliser indifféremment des options à nom court ou long et
les récupérer dans le script.
.

j'ai un peu googlisé et j'ai trouvé getopt et getopts dans le "bash adv.
scripting howto" mais les exemples données ne portent que sur des flags
avec des noms courts (un caractère précédé d'un tiret). Apparemment en C
on peut utiliser la fonction getopt_long, egalement en Perl avec le
module GetOpt::Long qui crée une table de hachage pour les flags longs.

je voudrai savoir s'il existe l'équivalent en 100% shell/bash. Si oui,
comment faire ? car je n'ai rien trouvé pour le moment.
merci pour tout lien, exemple de script qui permet la récupération et le
traitement d'option longues avec double tirets.

2e question : y a t-il un moyen simple (sans faire des batteries de
tests) pour préciser qu'un flag est obligatoire ou facultatif ?


A+
Arnaud



--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrice Karatchentzeff
Le #8941231
Arnaud JAYET writes:

[...]

> je voudrai savoir s'il existe l'équivalent en 100% shell/bash. Si oui,
> comment faire ? car je n'ai rien trouvé pour le moment.
> merci pour tout lien, exemple de script qui permet la récupération et le
> traitement d'option longues avec double tirets.
>
> 2e question : y a t-il un moyen simple (sans faire des batteries de
> tests) pour préciser qu'un flag est obligatoire ou facultatif ?

1) si tu veux faire du scripting assez avancé, tu vas vite avoir du
soucis avec les différents Bourne... Passe tout de suite la vitesse
supérieure avec Perl ou un équivalent...

2) sinon, tu peux jouer aussi avec zsh... dans le genre Bourne très
avancé, ce n'est pas mal :)

PK

--
      |      _,,,---,,_       Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:
     |,4-  ) )-,_. , (  `'-'  http://p.karatchentzeff.free.fr
    '---''(_/--'  `-'_)       


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Arnaud JAYET
Le #8940781
Arnaud JAYET a écrit :

Bonjour,

en espérant pas etre HS vu que c'est plus une question programmation
Linux que purement Debian.

je souhaite ecrire un script bash utilisant des flags avec des noms
longs genre :

$ ./monscript --user=toto --group=tutu



Salut,

me répond à moi-meme, si cela peut servir à d'autres....


utiliser getopt -o <optstring> -l <opstring>

et puis lire, relire et re-relire le man ;-) car

man getopt

EXAMPLES
Example scripts for (ba)sh and (t)csh are provided with the
getopt(1) distribution, and are
optionally installed in /usr/lib/getopt or /usr/local/lib/getopt
(if you have created it).

juste que c'est pas dans /usr/lib/getopt mais dans
/usr/share-doc/util-linux/examples (paquet util-linux)

$ ls /usr/share/doc/util-linux/examples/
fstab.example2.gz getopt-parse.tcsh.gz getopt-test.tcsh.gz
getopt-parse.bash.gz getopt-test.bash.gz sfdisk.examples.gz

$ zcat getopt-parse.bash.gz

un beau script d'exemples , ouin.....

A+
Arnaud



--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Publicité
Poster une réponse
Anonyme