#1 Le 19/05/2015, à 10:33
- abou33
Utilisation du getopts dans une fonction (Bash/ksh)
Bonjour à tous,
Je viens de m’apercevoir que si j'utilise une deuxième fois la même fonction (avec des paramètres lus par getopts) dans un même script, la seconde exécution de la fonction ne lit pas les paramètres. Si je remplace le getopts par une lecture des paramètres avec $1, $2, ... ça fonctionne... Ouf, je ne suis pas fou...
Savez-vous pourquoi ou comment résoudre ce soucis ?
Je me monte une bibliothèque de fonction pour réécrire une p'tite appli et l'utilisation du getopts dans les fonctions m'aide énormément.
Voici mon script :
#!/bin/ksh
calculdate() {
# Calcule une date à plus ou moins n jours
#
# Exemple :
# Quelle est la date dans 15 jours (date début = date du jour) ?
# calculdate -d 8 (aujourd'hui = 18/05/2015)
# --> 26/05/2015
# Quelle est la date de demain (date début = date du jour) ?
# calculdate (aujourd'hui = 18/05/2015)
# --> 19/05/2015
# Quelle est la date il y a 7 jour (date début = date du jour) ?
# calculdate -d 8 -s moins (aujourd'hui = 18/05/2015)
# --> 10/05/2015
# Quelle est la date 5 jours après le 30/06/2015 ?
# calculdate -j 30 -m 05 -a 2015 -d 5
# --> 04/06/2015
echo debug $# $*
typeset -u sens
# jour=$1
# mois=$2
# annee=$3
# delai=$4
# sens=$5
while getopts :j:m:a:d:s: c
do
case $c in
j) jour=$OPTARG;;
m) mois=$OPTARG;;
a) annee=$OPTARG;;
d) delai=$OPTARG;;
s) sens=$OPTARG;;
*) echo "Parametre non connu !!!"
echo "calculdate [ -j <JJ> -m <MM> -a <CCAA> ] [ -d <nn> ] [ -s <PLUS|MOIS> ]"
return 99;;
esac
done
# Initialisation des variables
test -z $jour && jour=$(date '+%d')
test -z $mois && mois=$(date '+%m')
test -z $annee && annee=$(date '+%Y')
test -z $delai && delai=1
test -z $sens && sens="PLUS"
test $sens == "MOINS" && avant="ago" || avant=""
# formatage sur 2 chiffres du jour et du mois
#jour=$(printf "%02d" $jour)
#mois=$(printf "%02d" $mois)
# Calcul de la date voulue
newdate=$(date -d "$annee-$mois-$jour $delai day $avant" '+%d/%m/%Y')
# Réponse de la fonction
echo $newdate
return 0
}
echo "Fonction calculdate :"
echo "--> Quelle est la date 5 jours après le 30/04/2015 ? (calculdate -j 30 -m 4 -a 2015 -d 5)"
calculdate -j 30 -m 04 -a 2015 -d 5
calculdate -j 20 -m 03 -a 2014 -d 4
exit 0
Abou33
Hors ligne
#2 Le 19/05/2015, à 13:04
- pingouinux
Re : Utilisation du getopts dans une fonction (Bash/ksh)
Bonjour,
Je n'ai pas ksh pour tester, mais en bash, il suffit de remplacer
calculdate() {
...........................
}
par
calculdate() (
...........................
)
La fonction est alors exécutée dans un sous-shell.
Hors ligne
#3 Le 19/05/2015, à 15:30
- credenhill
Re : Utilisation du getopts dans une fonction (Bash/ksh)
hello
essayer
...
OPTIND=1
while getopts :j:m:a:d:s: c
...
Hors ligne
#4 Le 19/05/2015, à 16:36
- abou33
Re : Utilisation du getopts dans une fonction (Bash/ksh)
Je ne connaissais pas cette astuce... C'est très intéressant.
Merci à tous pour toutes vos réponses.
Abou33
Bonjour,
Je n'ai pas ksh pour tester, mais en bash, il suffit de remplacercalculdate() { ........................... }
par
calculdate() ( ........................... )
La fonction est alors exécutée dans un sous-shell.
Hors ligne