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 29/09/2011, 10h32   #1
Futur Membre du Club
 
Inscription : février 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 12
Points : 19
Points : 19
Par défaut KSH et plusieurs paramètres

Bonjour,

j'ai l'intention de développer un script et faire passer plusieurs paramètres. Malheureusement je ne sais pas comment procéder ...

En effet j'aimerais que dans un premier temps, tout simplement que
lorsque je lance le script ./script.ksh , je puisse passer plusieurs paramètres

ex ./script.ksh -m TOTO -q TITI -s TATA

sans que l'ordre des paramètres n'ait d'importance

donc ./script.ksh -q TITI -s TATA -m TOTO

et ensuite pouvoir récupérer les valeurs de ces paramètres pour les mettre dans une variable

Voilà en gros je ne sais pas si j 'ai été clair, mais si vous avez une idée cela m'aiderait grandement.

Merci d'avance
alexmirage est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/09/2011, 10h52   #2
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
Bonjour,

tu dois utiliser getopts.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 01/10/2011, 00h33   #3
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 055
Points : 4 934
Points : 4 934
Salut

Le principe de base dans ce genre de script est
1) récupérer et mémoriser chaque option présente
2) supprimer les options des paramètres
3) commencer le programme et utiliser les options mémorisées quand tu en as l'utilité/le besoin

Exemple : Ecriture d'un script pouvant recevoir les options "-a" et "–b" sans valeur associée; une fois "-c" avec valeur associée et plusieurs fois "-d" avec valeurs associées

Code bash :
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
#!/bin/sh
# Script qui traite plusieurs options et qui affiche ce qu'il a analysé
# Options possibles: -a -b -c val -d val [-d val] …
 
# Récupération de chaque option du script
while getopts :abc:d: opt
do
	# Analyse de l'option reçue
	case $opt in
		a)	# Mémorisation option "a" trouvée
			opt_A="true" ;;
		b)	# Mémorisation option "b" trouvée
			opt_B="true" ;;
		c)	# Mémorisation option "c" trouvée et mémorisation de sa valeur
			opt_C="true"
			val_C="$OPTARG" ;;
		d)	# Mémorisation option "d" trouvée et concaténation de sa valeur
			opt_D="true"
			val_D="$val_D $OPTARG" ;;
		*)
			echo "Usage: `basename $0` [-a] [-b] [-c val] [-d val1] [-d val2] [fic1 …]"
			exit 1
	esac
done
 
# Décalage des paramètres pour placer le premier argument non-optionnel en "$1"
shift `expr $OPTIND1`
 
# Affichage du résultat de l'analyse
test –n "$opt_A" && echo "Option A demandée"
test –n "$opt_B" && echo "Option B demandée"
test –n "$opt_C && echo "Option C demandée avec la valeur [$val_C]"
test –n "$opt_D && echo "Option D demandée avec les valeurs [$val_D]"
 
# Affichage du reste des paramètres s'il y en a
test $# -ne 0 && echo "Il reste encore $# paramètres qui sont $*" || echo "Il n y a plus de paramètre"
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/10/2011, 13h44   #4
Futur Membre du Club
 
Inscription : février 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 12
Points : 19
Points : 19
Super ! merci bien j me suis débrouillé en combinant tes infos et celles du man de getopts

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
while getopts :m:q:i: OPT
do
        case $OPT in
                m)      Qmgr="$OPTARG";;
                q)      Queue="$OPTARG";;
                i)      Mail="$OPTARG";;
                \?)     echo "$WARNING You must use ./$PGMNAME [-m QMGR] [-q QUEUE] [-i MAIL]" 
                        echo " Without -q = MANAGE.DEAD.QUEUE "
                        echo " Without -i = show instead of mail send $NORMAL"
                        exit 2
                        ;;
        esac
done
	if [ "$Qmgr" == "" ]
		then 
			./$PGMNAME -?
			exit
		fi


Peut être codé avec des mouffles mais ca marche nickel
alexmirage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 20h12   #5
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 055
Points : 4 934
Points : 4 934
Citation:
Envoyé par alexmirage Voir le message
Super ! merci bien j me suis débrouillé en combinant tes infos et celles du man de getopts

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
while getopts :m:q:i: OPT
do
        case $OPT in
                m)      Qmgr="$OPTARG";;
                q)      Queue="$OPTARG";;
                i)      Mail="$OPTARG";;
                \?)     echo "$WARNING You must use ./$PGMNAME [-m QMGR] [-q QUEUE] [-i MAIL]" 
                        echo " Without -q = MANAGE.DEAD.QUEUE "
                        echo " Without -i = show instead of mail send $NORMAL"
                        exit 2
                        ;;
        esac
done
	if [ "$Qmgr" == "" ]
		then 
			./$PGMNAME -?
			exit
		fi


Peut être codé avec des mouffles mais ca marche nickel
En dehors de tes variables en majuscules (conventionnellement réservées aux variables système), aller charger un truc aussi lourd qu'un appel récursif juste pour afficher une bête aide...

Code bash :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
usage()
{
	echo "$WARNING You must use $(basename $0) [-m QMGR] [-q QUEUE] [-i MAIL]" 
	echo " Without -q = MANAGE.DEAD.QUEUE "
	echo " Without -i = show instead of mail send $NORMAL"
}
 
while getopts :m:q:i: OPT
do
	case $OPT in
		m) Qmgr="$OPTARG";;
		q) Queue="$OPTARG";;
		i) Mail="$OPTARG";;
		\?)
			usage
			exit 2
                        ;;
        esac
done
 
[ -z "$Qmgr" ] && usage && exit
... (suite du code)
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h47.


 
 
 
 
Partenaires

Hébergement Web