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 (permalink)
Membre actif
 
Date d'inscription: février 2005
Localisation: Vienne (38)
Messages: 177
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
Vieux 19/11/2007, 11h00   #2 (permalink)
Rédacteur
 
Avatar de Pouic
 
Date d'inscription: octobre 2004
Localisation: Paris
Âge: 26
Messages: 641
Par défaut

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
Vieux 19/11/2007, 22h16   #3 (permalink)
Membre éprouvé
 
Avatar de BlaireauOne
 
Date d'inscription: mars 2007
Localisation: Toulouse
Messages: 471
Par défaut

Une base pour commencer

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

Code :
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
Vieux 20/11/2007, 14h55   #4 (permalink)
Membre actif
 
Date d'inscription: février 2005
Localisation: Vienne (38)
Messages: 177
Par défaut

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
Vieux 23/11/2007, 18h13   #5 (permalink)
Membre actif
 
Date d'inscription: février 2005
Localisation: Vienne (38)
Messages: 177
Par défaut

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 :
#!/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 :
~$ ./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
Vieux 23/11/2007, 23h36   #6 (permalink)
Membre habitué
 
Date d'inscription: juillet 2006
Messages: 166
Par défaut

Je n'ai pas très bien compris comment fonctionne cette partie :

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

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

Code :
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
Vieux 24/11/2007, 13h37   #7 (permalink)
Membre éprouvé
 
Avatar de BlaireauOne
 
Date d'inscription: mars 2007
Localisation: Toulouse
Messages: 471
Par défaut

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 :
$ 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 :
$ 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
Vieux 24/11/2007, 14h04   #8 (permalink)
Membre habitué
 
Date d'inscription: juillet 2006
Messages: 166
Par défaut

Merci bien c'est plus clair ++
Fluxy est déconnecté   Envoyer un message privé Réponse avec citation
NEWS LINUX PROFESSIONNELFAQ LINUXTUTORIELS LINUXLIVRES LINUXLINUX TVUNIXGTK+QtAPACHE

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 01h50.


Vos questions techniques : forum d'entraide Linux Professionnel - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.