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

Langage Perl Discussion :

Question sur une variable d'un script


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 65
    Par défaut Question sur une variable d'un script
    Bonjour,

    J'aurais voulu savoir à quoi correspondais le $1 dans ce script (il permet de savoir si le fichier à plus de un jour, et il permet également de savoir si il n'y a pas de fichiers copiés) J'ai l'impression que cette variable est magique et sa m'énerve vraiment de pas comprendre comment elle peux arriver à tout faire. Je vous laisse juger par vous même :



    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
    #
    #						0 : OK
    #						1 : WARNING
    #						2 : CRITICAL
    #
    #     
    #
    # ====================================================================================
    #
    # PARAMETRES D'APPEL : rien
    #
    # ====================================================================================
     
    use strict;
     
    my $FicLog = "";
     
    my $Infile = 'C:\applinat\Nagios\plugins\local\am_check_pabxcav.ini';
    open IN, "< $Infile" or die "Can't open $Infile : $!";
    ($FicLog) = <IN>;
    chomp($FicLog);
     
    # Date et Heure du Jour
    my ($sec,$min,$hour,$day,$mon,$year,$wday,$yday) = localtime();
    $mon++;
    $year += 1900;
    my $Date_W=sprintf("%02d/%02d/%04d",$day,$mon,$year);
     
    if (!open(LOG, $FicLog)) {
    	print "ERREUR !!! IMPOSSIBLE D'OUVRIR LE FICHIER: $FicLog";
    	exit 2;
    }
     
    while (<LOG>) {
      chomp;
      if (/ERREUR/) {
        print "$_";
        exit 2;
      } elsif (/DEBUT DE LA COPIE DES SAUVEGARDES DU PABX CAV.*(..\/..\/....)/) {
        # Control de la date
        if ($1 ne $Date_W) {
          print "LE FICHIER LOG A PLUS D'UN JOUR - VERIFIER LA TACHE PLANIFIE SUR LE SERVEUR";
          exit 2
        }
      } elsif (/([0-9]+) fichier/) {
      	if ($1 eq "0") {
      		print "AUCUN FICHIER N'A ETE COPIE";
      		exit 1;
      	}
      } elsif (/FIN DE LA COPIE DES SAUVEGARDES DU PABX DU CAV/) {
      	print "$_";
      	exit 0;
      }
    }
    close (LOG);
    print "PROBLEME SUR LA RECUPERATION DES SAUVEGARDES PABX DU CAV SUR LE W11130113BCKCAV";
    exit 2;

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    La variable $1 est effectivement magique (à effet de bord devrait-on dire). Elle résulte de l'évaluation d'une expression régulière contenant des parenthèses capturantes. La variable $1 contient la première valeur capturée, $2, la deuxième, etc...

    Il existe un moyen d'éviter l'emploi de ces variables "automatique" et "à effet de bord" (c'est à dire qui sont modifiées par des instructions autres que l'affectation explicite), car il suffit d'enchainer deux évaluation d'expressions régulières pour perdre les valeurs $1, $2, de la première après la seconde. Au lieu d'écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      } elsif (/DEBUT DE LA COPIE DES SAUVEGARDES DU PABX CAV.*(..\/..\/....)/) {
        # Control de la date
        if ($1 ne $Date_W) {
          print "LE FICHIER LOG A PLUS D'UN JOUR - VERIFIER LA TACHE PLANIFIE SUR LE SERVEUR";
          exit 2
        }
      } elsif (/([0-9]+) fichier/) {
          if ($1 eq "0") {
              print "AUCUN FICHIER N'A ETE COPIE";
              exit 1;
          }
    écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      } elsif (my ($date) = /DEBUT DE LA COPIE DES SAUVEGARDES DU PABX CAV.*(..\/..\/....)/) {
        # Control de la date
        if ($date ne $Date_W) {
          print "LE FICHIER LOG A PLUS D'UN JOUR - VERIFIER LA TACHE PLANIFIE SUR LE SERVEUR";
          exit 2
        }
      } elsif (my ($fichier) = /([0-9]+) fichier/) {
          if ($fichier eq "0") {
              print "AUCUN FICHIER N'A ETE COPIE";
              exit 1;
          }

  3. #3
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 65
    Par défaut
    et je ne dois pas déclarer les variables date et fichier ? Ce langage est vraiment bizarre il devine ce qu'on veux faire sans rien lui dire c'est un peu bizarre là. La le script détecte que le fichier à plus d'un jour et renvoi à une erreur de type 2, moi je voudrais que cela sois deux jours mais étant donné que je n'assimile pas que faudrait t-il faire pour qu'il détecte que le fichier a plus de deux jour ? Je pense que je comprendrais mieux après ça. (il faut que je garde ces variable à effet de bord par contre sa m'est imposé c'est pour sa que j'aimerais les comprendre)

  4. #4
    Mr6
    Mr6 est déconnecté
    Membre émérite

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 608
    Par défaut
    Comme tout langage, il ne fait que ce qu'on lui dit
    En l'occurence que lui dis-tu ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    # Date et Heure du Jour
    my ($sec,$min,$hour,$day,$mon,$year,$wday,$yday) = localtime();
    $mon++;
    $year += 1900;
    my $Date_W=sprintf("%02d/%02d/%04d",$day,$mon,$year);
    Tu récupères la date actuelle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      } elsif (/DEBUT DE LA COPIE DES SAUVEGARDES DU PABX CAV.*(..\/..\/....)/) {
    Pendant la lecture de ton fichier de log tu captures des infos de date (enfin on espère, ca pourrait être le nom d'un serveur Domino aussi, mais c'est un autre débat...).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($1 ne $Date_W) {
          print "LE FICHIER LOG A PLUS D'UN JOUR - VERIFIER LA TACHE PLANIFIE SUR LE SERVEUR";
          exit 2
    Tu compares la(les) date capturée à la date courant pour déterminer si tu es bien sur le bon jour.

    Si tu veux passer à 2 jours de rétention, quelle variable vas-tu modifier ? Celle que tu captures ou celle qui est fixe ?
    Que devient ton test de date ? Est-il toujours bon en l'état ? Doit-il être adapté ?

    @+
    Mr6

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Citation Envoyé par aurelien13008 Voir le message
    et je ne dois pas déclarer les variables date et fichier ?
    En perl, la déclaration n'est pas obligatoire (sauf à utiliser le module strict, ce qui est fortement recommandé). Cela dit, je l'ai bien déclaré, directement dans le if. En perl, comme d'ailleurs dans d'autres langages, il est possible de déclarer une variable à peut près n'importe où dans le code, et pas uniquement en début de bloc comme dans le C K&R.
    Ce langage est vraiment bizarre il devine ce qu'on veux faire sans rien lui dire c'est un peu bizarre là.
    C'est aussi là tout son charme

    Pour le reste, Mr6 t'a fait une très bonne explication de texte.

  6. #6
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 65
    Par défaut
    Je vois ce que tu veux dire Mr6, mais le soucis et c'est là que sa se complique c'est que je n'ai pas le fichier de log qui servait à l'utilisation de ce script, mais je dois l'adapter pour un nouveau fichier de log qui comporte des similitude, mais la date de la sauvegarde qui doit être comparé à la date local se trouve dans ce fichier de log sous la forme : SAUVEGARDE LE 7/10/2010 A 10:37
    Et je n'ai pas l'impression que ce script capture la date de la sauvegarde dans le fichier log, en fait je ne vois pas à quel moment il capture la date du fichier log : je vois très bien qu'il capture la date de l'ordinateur donc la date local :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    # Date et Heure du Jour
    my ($sec,$min,$hour,$day,$mon,$year,$wday,$yday) = localtime();
    $mon++;
    $year += 1900;
    my $Date_W=sprintf("%02d/%02d/%04d",$day,$mon,$year);
    Mais la date du fichier log est juste représenté par un $1, $1 ne représente pas la date de la création du fichier log. Pour résumer, ou dans ce script la date de la création du fichier log est capturé, elle est comparé a la date local certe, mais ou est elle capturé ? Là est ma question.

  7. #7
    Mr6
    Mr6 est déconnecté
    Membre émérite

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 608
    Par défaut
    Allons allons, un petit effort !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $Infile = 'C:\applinat\Nagios\plugins\local\am_check_pabxcav.ini';
    Tu lis ta conf Nagios
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ($FicLog) = <IN>;
    ...
    if (!open(LOG, $FicLog)) {
        print "ERREUR !!! IMPOSSIBLE D'OUVRIR LE FICHIER: $FicLog";
    Puis tu lis le contenu du fichier de log qui est déclaré dans ta conf.
    Tu parcours ton fichier de log ligne par ligne à la recherche entre autres de l'info suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    } elsif (/DEBUT DE LA COPIE DES SAUVEGARDES DU PABX CAV.*(..\/..\/....)/) {
    et lorsque tu la trouves tu captures dans $1 et tu compares avec la date du jour.

    C'est plus clair dit comme ca ?

    @+
    Mr6

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

Discussions similaires

  1. question simple sur une variable date
    Par xavier_dcf dans le forum Débuter
    Réponses: 2
    Dernier message: 14/02/2013, 15h53
  2. [MySQL] Question sur les Variables dans une requête php-Mysql
    Par rvtoulon dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/02/2012, 12h06
  3. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  4. Envoi d'une variable en shell script sur php
    Par Ponchi dans le forum Langage
    Réponses: 3
    Dernier message: 07/02/2006, 13h54
  5. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59

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