Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 19/11/2007, 10h37   #1
Membre habitué
 
Inscription : février 2005
Messages : 187
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 187
Points : 149
Points : 149
Par défaut [ksh et/ou bash] Utilisation des arguments type -d

Bonjour à tous,

Je cherche à refaire un de mes scripts, de manière à ce qu'il soit utilisable par d'autres personnes, il me faut donc le compliquer pas mal, pour ça j'aurais besoin de connaitre la manière d'utiliser les arguments précédés d'un ou deux tirets "-", par exemple :
./toto -d 0 --gauche 0
ou
./toto -g 0 --droite 0

ceci afin de pouvoir inverser les arguments, qu'ils soient optionnels... enfin avoir une vraie gestion des arguments.

Cordialement,

Mathias
novices est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2007, 11h00   #2
Membre émérite
 
Avatar de Pouic
 
Inscription : octobre 2004
Messages : 668
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2004
Messages : 668
Points : 904
Points : 904
man getopt
__________________
Software becomes slower faster than hardware becomes faster

http://xrenault.developpez.com
API C standard (C ANSI )
Pouic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2007, 22h16   #3
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
Une base pour commencer

http://man.developpez.com/man1/getopts.1.php

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
syntaxe="syntaxe : $(basename $0) -h -f folder -t object_type -n object_name -d target"
 
while getopts ":f:t:n:d:h" OPTION
	do
		case $OPTION in 
		-h) 
			echo $syntaxe
			exit 1
			;;
		f) 
                        export folder=$OPTARG
			;;
		t) 
			object_type=$OPTARG
			;;
		n) 
			object_name=$OPTARG
			;;
		d) 
			target=$OPTARG
			;;
		:) 
			echo "*** OPTION \"$OPTARG\" sans arg"
			exit 1
			;;
		\?) 
			echo "*** option $OPTARG inconnue !!!"
			exit 1
			;;
		esac
	done
 
if [[ $OPTIND -eq 1 ]] ; then
	echo $syntaxe
	exit 1
fi
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2007, 14h55   #4
Membre habitué
 
Inscription : février 2005
Messages : 187
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 187
Points : 149
Points : 149
Un grand merci pour cet exemple plus fourni, je regarde ce que ça donne et je colle ça en résolu plus tard.
novices est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2007, 18h13   #5
Membre habitué
 
Inscription : février 2005
Messages : 187
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 187
Points : 149
Points : 149
Salut à tous,

Donc, comme je suis nul, j'ai eu du mal malgré les deux exemples gentillement fourni ces jours précédents, me revoilà donc avec un script complet, qui fonctionne dans bash (solaris 5.8) et ksh (la même solaris et HP-UX - je ne saurais dire quelle version

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
#!/bin/ksh
 
while getopts "a:b:c:d:" OPTION
do
        case $OPTION in
        a )    aFLAG=$OPTIND; aARG=$OPTARG;;
        b )    bFLAG=$OPTIND; bARG=$OPTARG;;
        c )    cFLAG=$OPTIND; cARG=$OPTARG;;
        d )    dFLAG=$OPTIND; dARG=$OPTARG;;
        esac
done
 
echo aFLAG = $aFLAG - aARG = $aARG
echo bFLAG = $bFLAG - bARG = $bARG
echo cFLAG = $cFLAG - cARG = $cARG
echo dFLAG = $dFLAG - dARG = $dARG
un exemple (le s'appellant test_arg) :
Code :
1
2
3
4
5
6
7
 
~$ ./test_arg -b test -d arguments -c pouet -a hop
aFLAG = 9 - aARG = hop
bFLAG = 3 - bARG = test
cFLAG = 7 - cARG = pouet
dFLAG = 5 - dARG = arguments
~$
Pour ceux qui suivent, j'ai viré les options h, : et \? du case, n'ayant pas réussi à les faire marcher (je l'ai dit, je suis nul :p

Voilà, en espérant que cela puisse un jour servir à quelqu'un d'autre,

Cordialement,

mathias
novices est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2007, 23h36   #6
Membre du Club
 
Inscription : juillet 2006
Messages : 161
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 161
Points : 40
Points : 40
Je n'ai pas très bien compris comment fonctionne cette partie :

Code :
while getopts ":f:t:n:d:h" OPTION
plus simplement
Code :
1
2
 
while getopts ":f:" OPTION
Comment fait bash pour entrer dans

Code :
1
2
:) 
			echo "*** OPTION \"$OPTARG\" sans
et

Code :
1
2
3
f) 
                        export folder=$OPTARG
			;;
Je vous remercie de vos lumières.

Bonne soirée
Fluxy
Fluxy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2007, 13h37   #7
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
Une lettre suivie de : signifie, attend un argument
Une lettre non suivie de : signifie, pas d'argument
Le 1er : dans la commande getopts ( ":f...." ) permet de gérer les anomalies par le script (cf ci-dessous)

Exemple de script avec :

Code :
while getopts "f:t:n:d:h" OPTION
Exécution :

Code :
1
2
3
$ xgetopt02.sh -f 
./xgetopt02.sh: option requires an argument -- f
*** option  inconnue !!!
Exemple de script avec :

Code :
while getopts ":f:t:n:d:h" OPTION
Exécution :

Code :
1
2
$ xgetopt02.sh -f 
*** OPTION "f" sans arg
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2007, 14h04   #8
Membre du Club
 
Inscription : juillet 2006
Messages : 161
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 161
Points : 40
Points : 40
Merci bien c'est plus clair ++
Fluxy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 12h00.


 
 
 
 
Partenaires

Hébergement Web