J'ai déjà fait ce genre de choses pour des scripts (mais pas à ce niveau). Comme ça, je peux improviser quelques idées, mais pour les détails je garantis pas...
while $# != 0 ; do
case $1 in
# un filtre qui attend plusieurs parametres
"-filtre1" ) if [[ $# -ge n ]]
then
PARAM_FILTRE1_1=$1 ; switch ;
(...)
PARAM_FILTRE1_N=$1 ; switch ;
<ce que tu veux avec les n param> ;
else
echo "-filtre1 attend n paramètres"
exit 1
fi ;;
# un filtre qui n'attend aucun parametres
"-filtre2" ) <nimporte_quoi>; switch ;;
# un param qui dépend de la présence d'un autre (codé comme suit, il faut que le filtre 3 soit donné avant le 4 sur la ligne de commande)
"-filtre3" ) <nimporte_quoi>; FILTRE3=1; switch ;;
"-filtre4" ) if [[ $FILTRE3 == 1 ]]
then
<nimporte_quoi>
else
echo "-filtre4 ne peut être défini que si -filtre3 est déjà défini."
exit 1
fi;
switch ;;
# et si le param est n'importe quoi...
* ) echo "mauvais paramètre" ;
exit 1 ;;
esac
done
-------
Et, par hasard, si PARAM_FILTRE1_2 doit être une fichier existant, ou vérifier n'importe quelle condition:
(...)
PARAM_FILTRE1_1=$1; switch ;
if [ -f $1 ] ; then
PARAM_FILTRE1_2=$1 ; switch;
else
echo "Le 2e param de -filtre1 doit être un fichier."
exit 1
fi ;
PARAM_FILTRE1_3 (...)
----
Un truc que j'aime bien faire, c'est prévoir des codes d'erreurs différents pour chaque cas (ce que j'ai pas fait au-dessus), comme ça on peut le réutiliser assez finement dans d'autres scripts...
Ou encore rediriger les messages d'erreurs sur la "sortie d'erreur" (stderr) avec des
echo "message_erreur" >&2
Mais là c'est pour faire vraiment propre, c'est pas forcément nécessaire pour de petits scripts...
Poste le Friday 12 December 2003 00:50:36