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

Programmation et administration système Perl Discussion :

IF avec 3 condtions


Sujet :

Programmation et administration système Perl

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 41
    Points : 12
    Points
    12
    Par défaut IF avec 3 condtions
    Bonjour à tous,

    Pour le besoin de mon script j'aimerai faire un if avec 3 conditions mais je bloque un peu là Mon if ne passe pas je passe directement vers mon else !

    Merci d'avance pour votre aide!
    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
    #!/usr/bin/perl
    use Net::Telnet;
     
    unless (open ($file, "switch.txt")) { die ("cannot open file Switch.txt\n"); } #fichier qui contient les adresses et noms des switchs
    unless (open ($logfile, ">>syslog.txt")) { die ("cannot open file Log.txt\n"); } #fichier qui contient les sessions telnet échouées
    
    while ($line = <$file>)
    {
        ($HOST,  $NAME, $CODE, $RADIUS) = split(/;/, $line);
     
            if ($TELNET->open($HOST) && $CODE eq 'switch' &&  $RADIUS eq 'yes' )
                {
                .
                .
                .
                .
                 .
     
                }
     
            else       
                {
                .
                .
                }
     
    }
     close ($file); 
    <>; #Garde la fenêtre ouverte après la fin de l'exécution du script

  2. #2
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    hum de nombreuses petites erreurs...

    Commence tes scripts par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/usr/bin/perl
    use strict;
    use warnings;
    cela devrait te signaler qqes erreurs déjà

    ensuite, quand crées ton objet TELNET ?
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    hum de nombreuses petites erreurs...

    Commence tes scripts par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/usr/bin/perl
    use strict;
    use warnings;
    cela devrait te signaler qqes erreurs déjà

    ensuite, quand crées ton objet TELNET ?
    Merci pour ta réponse,

    j'ajouterai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/usr/bin/perl
    use strict;
    use warnings;
    dans mon script

    Le Telnet passe bien, si je mets if ($TELNET->open($HOST) ,
    Voici mon programme au complet:

    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
     
    #!/usr/bin/perl
     
    use Net::Telnet;
     
    ########### DATE & TIME##############################################################################################
    ($sec,$min,$heure,$jour,$mois,$annee)= localtime time;
    $annee+=1900;
    $mois+=1;
    ###########OPENING FILE#############################################################################################
    unless (open ($file, "switch.txt")) { die ("cannot open file Switch.txt\n"); } #fichier qui contient les adresses et noms des switchs
    unless (open ($logfile, ">>syslog.txt")) { die ("cannot open file Log.txt\n"); } #fichier qui contient les sessions telnet échouées
    #############Variables################################################################################################
    $PROMPT='/.*[\$#:>\]\%] *$/';  #prend en compte n'importe caractéres du promp
    $TFTPSERVER='10.1.1.1.';
    $TELNET = new Net::Telnet (Timeout => 20, Errmode=>'return');
    $YES='yes';
    print("
    #####################################################################
    #####                   TFTP Bacbup is Started                 ######
    #####               Please don't close the window              ######
    #####################################################################\n");
    print $logfile("\n--------------------------------------- $jour/$mois/$annee $heure:$min:$sec ---------------------------------------\n");
    while ($line = <$file>)
    {
        ($HOST,  $NAME, $PASSSWITCH, $RADIUS) = split(/,/, $line);
     
            if ($TELNET->open($HOST) && $PASSSWITCH eq "switch" && $RADIUS eq "yes")
                {
                sleep 1;
                $TELNET->waitfor("Enter Ctrl-Y to begin.");
                $TELNET->put("\031") or die "=> cannot send Ctrl+Y \n=> ".$TELNET->errmsg."";
                sleep 1;
                $TELNET->print("********");
                sleep 1;
                $TELNET->print("*******");
                sleep 5;
                $TELNET->waitfor("IP Configuration/Setup...");
                $TELNET->print("c") or die "=> cannot send C \n=> ".$TELNET->errmsg."";
                sleep 1;
                $TELNET->waitfor("$PROMPT");
                $TELNET->print("enable") or die "=> cannot send enable \n=> ".$TELNET->errmsg."";
                sleep 1;
                $TELNET->waitfor("$PROMPT");
                $TELNET->print("copy running-config tftp filename $NAME.ac address $TFTPSERVER") or die "=> Echec de l'envoi copy running-config \n=> ".$TELNET->errmsg."";
                sleep 1;
                $TELNET->close;
                }
            else       
                {
                print $logfile ("cannot to make the backup for: $HOST $NAME at $jour/$mois/$annee $heure:$min:$sec\n");
                }
    }
    close ($file); 
    close ($logfile);
    print("
    ######################################################################
    #####                   TFTP Bacbup is Completed                 #####
    #####                 Please press any key to quit               #####
    ######################################################################");
    <>; #Garde la fenêtre ouverte après la fin de l'exécution du script

  4. #4
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    ($HOST, $NAME, $PASSSWITCH, $RADIUS) = split(/,/, $line);

    if ($TELNET->open($HOST) && $PASSWITCH eq "switch"
    erreur de frappe ?

    ce type d'erreur est signalé quand tu utilises strict et warnings
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    erreur de frappe ?
    Oui erreur de frappe ;-)

    depuis que j'ai mis use warning;

    j'ai ce message qui apparait:

    Name "main:ASSSWITCH" used only once: possible typo at C:\Perl\Scriptperl\TFTP
    .pl line 25.
    Name "main::YES" used only once: possible typo at C:\Perl\Scriptperl\TFTP.pl lin
    e 16.

  6. #6
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    $radius est-il à la fin de la ligne ?
    si oui as-tu pensé à éliminer les caractères de fin de ligne ?
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    $radius est-il à la fin de la ligne ?
    si oui as-tu pensé à éliminer les caractères de fin de ligne ?
    Bien vu! $radius est bien en fin de ligne, comment supprimes-tu les caractères de fin de ligne?

    J'ai supprimer la variable $YES="yes";

    J'ai toujours le message:
    Name "main:ASSSWITCH" used only once: possible typo at C:\Perl\Scriptperl\TFTP
    .pl line 25.

  8. #8
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    chomp existe pour ça !
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Cela fonctionne nickel, merci infiniment!
    Je n'aurai jamais trouvé sans ton aide ;-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    chomp($PASSSWITCH);
    chomp($RADIUS);
    print("$RADIUS");
    f ($TELNET->open($HOST) && $PASSSWITCH eq 'switch' && $RADIUS eq 'yes')
                {

  10. #10
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    pour le message d'erreur, c'est indiqué: ta variable n'est utilisée qu'une seule fois dans le script, et perl te demande s'il s'agit d'une erreur de frappe
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    pour le message d'erreur, c'est indiqué: ta variable n'est utilisée qu'une seule fois dans le script, et perl te demande s'il s'agit d'une erreur de frappe
    Merci pour l'info!
    Tout fonctionne parfaitement, plus qu'à tester mons cript sur plus de 100 switchs ;-)

    Résolu.

Discussions similaires

  1. Condtions sur jointures avec doctrine
    Par zakuza dans le forum Doctrine2
    Réponses: 3
    Dernier message: 14/07/2014, 12h32
  2. Réponses: 1
    Dernier message: 23/04/2012, 11h57
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 11h51
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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