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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/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