Matcher un fichier au format crontab
	
	
		Hello et meilleurs Vœux pour cette nouvelle année 2014.
Je souhaite faire une fonction script shell qui analyse un fichier de parametrage au format "crontab" :roll:
Exemple voici mon fichier "mon_file_param" 
	Code:
	
1 2 3 4
   | #Format = minute(s) hour(s) day(s) month(s) weekday(s) Check_Param
0,15,30,45 3 * * * TEST1
0 * * 1,3,5,7,9,11 * TEST2
0 5 * * 1-4 TEST3  | 
 Si il est 3h15 et que je lance ma_fonction avec le parametre TEST1 le resultat sera 1 (car cela match avec le parametrage)
Idem
Si il est 8h00 et que l'on est sur un mois impaire : le resultat de ma_fonction avec le parametre TEST2 sera aussi 1  (car cela match avec le parametrage)
Idem
Si il est 5h00 et que l'on est un mardi : le resultat de ma_fonction avec le parametre TEST3 sera aussi 1  (car cela match avec le parametrage)
dans le cas contraire je renvoi 0 .
Avant de réinventer le fil à couper le beurre :aie: savez vous s'il existe nativement sous unix/linux de quoi faire cela 
Merci de votre aide 
@Argoet
	 
	
	
	
		Des fois que cela intéresse quelqu’un
	
	
		Une Solution  :mouarf:  à défaut j'ai réinventer l'eau tiède :zoubi::roll:8O:calim2::mrgreen::D
Oui , Oui c'est perfectible :oops:
	Code:
	
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
   | cat Mon_Fichier_De_Parametrage 
# -----------------------------------------------------------------
# Parametrage des Recherches (Base sur le format Crontab)
# Format = minute(s) hour(s) day(s) month(s) weekday(s) Check_Param
# weekday 0=Dimanche 1=Lundi 2=Mardi 3=Mercredi 4=Jeudi 5=Vendredi 6=Samedi
# -----------------------------------------------------------------
# -- Exemple Du Mardi au Dimanche Entre 13h30 et 13h50 Pour TEST1
# -----------------------------------------------------------------
30-50 13 * * 0,2,3,4,5,6 TEST1
# -----------------------------------------------------------------
# -- Exemple Le Lundi entre 7h00 et 7h20 Pour TEST2
# -----------------------------------------------------------------
00-20 7 * * 1 TEST2
# -----------------------------------------------------------------
# -- Exemple Le Lundi entre 0h00 et 6h59 pour TEST3
# -----------------------------------------------------------------
* 00-06 * * 1 TEST3
# -----------------------------------------------------------------
# -- Exemple entre 13h et 14h59 tous les Mercredi
# -----------------------------------------------------------------
* 13,14 * * 3 TEST4  | 
 Le script 
	Code:
	
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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
   | #!/bin/ksh
 
FILE_PARAM=Mon_Fichier_De_Parametrage
 
# ------------------------------------------------------------------------------
# -- Recherche renvoi 0 (Pas Trouve) ou 1 (Trouve)
# -- En fonction du fichier de parametrage $FILE_PARAM          
# -- Tous les elements doivent matcher     
# --  A  Savoir  : La minute , L'heure , Le Jour du Mois , Le Mois , Le Jour de la semaine et le parametre
# ------------------------------------------------------------------------------
Recherche()
{
   WS="$1"
   if [ -f $FILE_PARAM ]
   then
      cat $FILE_PARAM | grep -v "#" | sed "s/\*/ALL/g" | while read LGN_PARAM
      do
         # ---------------------------------------------------------
         # -- Extraction et decoupage des parametres  
         # ---------------------------------------------------------
         set -A PARAM `echo ${LGN_PARAM}`
         SRV_PARAM=`echo $LGN_PARAM | cut -d " " -f6-`
         G_TROUVE=`echo $WS | grep "${SRV_PARAM}" | wc -l`
         # ----------------------------------------------------------
         # -- Check Minute / Heure / Jour / Mois / Jour Semaine / et le Parametre  (G_TROUVE = 1)
         # ----------------------------------------------------------
         if [ $(Check ${V_MIN} ${PARAM[0]}) -eq 1 -a \
              $(Check ${V_HEU} ${PARAM[1]}) -eq 1 -a \
              $(Check ${V_DAY} ${PARAM[2]}) -eq 1 -a \
              $(Check ${V_MOI} ${PARAM[3]}) -eq 1 -a \
              $(Check ${V_JSM} ${PARAM[4]}) -eq 1 -a \
              ${G_TROUVE} -eq 1 ]
         then
             echo 1
             return
         fi
      done
      echo 0
   else
      echo 0
   fi
}
 
# ---------------------------------------------------------
# -- Fonction Check (Lance par Recherche) 
# -- On verifie si P1 (Chiffre unique) match avec P2(Une Chaine de chiffre ou "ALL" )
# ---------------------------------------------------------
# -- P2 est gere avec les formes suivantes
# --   ALL                   : Toutes Les valeurs
# --   10                    : Uniquement 10
# --   (Virgule) 10,20,30,40 : Soit 10 ou 20 ou 30 ou 40
# --   (Tiret)  10-50        : Compris entre 10 et 50
# ---------------------------------------------------------
Check()
{
  P1=$1
  P2=$2
 
  # -------------------------------
  # - On verifie P2 Avec le Format "ALL"
  # -------------------------------
  if [ "$P2" = "ALL" ]
  then
    echo 1
    return
  fi
 
 
  # -------------------------------
  # - On verifie P2 avec le Format avec ","
  # -------------------------------
  V=`echo $P2 | grep "\," | wc -l`
  if [ $V -eq 1 ]
  then
    set -- `echo $P2 | sed "s/\,/ /g"`
 
    while [ $# -gt 0 ]
    do
        if [ $1 -eq $P1 ]
        then
           echo 1
           return
        fi
        shift
    done
    echo 0
    return
  fi
  # -------------------------------
  # - On verifie P2 avec le Format avec "-"
  # -------------------------------
  V=`echo $P2 | grep "\-" | wc -l`
  if [ $V -eq 1 ]
  then
    D=`echo $P2 | cut -d "-" -f1`
    F=`echo $P2 | cut -d "-" -f2`
 
    if [ $P1 -ge $D -a $P1 -le $F ]
    then
       echo 1
       return
    fi
    echo 0
    return
  fi
 
  # -------------------------------
  # - On verifie P2
  # -------------------------------
  if [ $P2 -eq $P1 ]
  then
    echo 1
    return
  fi
 
  echo 0
}
 
V_MIN=`date +"%M"`
V_HEU=`date +"%H"`
V_DAY=`date +"%d"`
V_MOI=`date +"%m"`
V_JSM=`date +"%u"`
 
 
date
echo "TEST1 $(Recherche "TEST1")"
echo "TEST2 $(Recherche "TEST2")"
echo "TEST3 $(Recherche "TEST3")"
echo "TEST4 $(Recherche "TEST4")" | 
 Execution (Un Mercredi à 13:49) :aie:
	Code:
	
1 2 3 4 5
   | Wed Jan 15 13:49:26 MET 2014
TEST1 1
TEST2 0
TEST3 0
TEST4 1  |