IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Matcher un fichier au format crontab


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Par défaut 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"
    Exemple voici mon fichier "mon_file_param"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 savez vous s'il existe nativement sous unix/linux de quoi faire cela
    Merci de votre aide
    @Argoet

  2. #2
    Membre chevronné
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Par défaut Des fois que cela intéresse quelqu’un
    Une Solution à défaut j'ai réinventer l'eau tiède

    Oui , Oui c'est perfectible

    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
    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 : 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
    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)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Wed Jan 15 13:49:26 MET 2014
    TEST1 1
    TEST2 0
    TEST3 0
    TEST4 1

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lecture de fichier au format xls via un prog C++
    Par lepoutho dans le forum C++
    Réponses: 9
    Dernier message: 08/09/2005, 10h23
  2. Lecture de fichier au format XML ??
    Par nico0007 dans le forum Langage
    Réponses: 1
    Dernier message: 07/07/2005, 15h40
  3. Réponses: 22
    Dernier message: 24/04/2005, 16h49
  4. Charger fichiers au format milkshape
    Par ryu20 dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/04/2005, 18h26
  5. [Fichier] génération format DOS
    Par Alexr dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 13/01/2005, 17h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo