Récupérer des données dans plusieurs fichiers

Récupérer des données dans plusieurs fichiers - Perl - Programmation

Marsh Posté le 23-05-2013 à 11:08:47    

Bonjour,
 
Voilà, je voudrais savoir comment faire pour lire plusieurs fichiers et ainsi se servir de leurs donnée dans mon script. Qu'il le lise un a un ou tous en même temps cela n'a pas trop d'importance.
Enfaite se sont des fichiers avec des adresses IP, j'ai besoins qu'il se connecte à chacune d'elle.
 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5. use feature qw(say);
  6. use English qw(-no_match_vars);
  7. use Net::Telnet::Cisco;
  8. use Net::Telnet;
  9.  
  10. # donnée persistente avec une closure
  11. {
  12. my $i;
  13. my $today = join "-", map {$_ + (0, 1, 1900)[$i++]}(localtime)[3..5];
  14. sub today { return $today; }
  15. }
  16.  
  17. my $backup = {host => '192.***.**.*', dir => 'cisco', dir2 => 'HP', dir3 => 'linksys'};
  18. my $cisco = {host=> undef, log => 'R2T', pass => 'bonjour', enapass=> 'cisco'};
  19. my $HP = {host => undef, log => 'R2T', pass => 'bonjour'};
  20. my $LK = {host => undef, log => 'R2T', pass => 'bonjour'};
  21. ########Ouverture du fichier ##############"
  22. open(my $fh, '<', '/var/lib/rancid/all/router.db'); # le fichier où ce trouve un partie des adresses IP, Comment rajouter d'autre fichier???
  23. foreach (<$fh> ) {
  24. if (/([0-9.]{1,})\:cisco/)
  25. {      
  26. $cisco->{host}=$1;
  27. &BackupCiscoSwitch($cisco, $backup);
  28. }
  29.  
  30. elsif (/([0-9.]{1,})\:hp/)
  31. {
  32.   $HP->{host} = $1;
  33.   &BackupHpSwitch($HP, $backup);
  34. }
  35. elsif (/([0-9.]{1,})\:linksys/)
  36. {      
  37. $LK->{host}=$1;
  38. &BackupLinkSwitch($LK, $backup);
  39. }
  40.  
  41. }
  42. close($fh);
  43. #backup pour switch cisco
  44. sub BackupCiscoSwitch($$) {
  45.  my ($cisco, $backup)  = (shift, shift);
  46. say $cisco->{host};
  47.  
  48.  my $session = Net::Telnet::Cisco->new(Host => $cisco->{host}, errmode => sub {&error});
  49.  print "   login : ";
  50.  if ($session->login( $cisco->{log}, $cisco->{pass}) ) {
  51.       print "Ok\n";
  52.        # Enable mode
  53.        print "   enable mode : ";
  54.  
  55.        if ($session->enable($cisco->{enapass}) ) {
  56.                print "Ok\n";
  57.                $session->cmd("copy run tftp://".$backup->{host}.'/'.$backup->{dir}.'/'.$cisco->{host}.'-'.today().".cfg\n\n\n" );
  58.                $session->close;
  59.                }
  60.                else
  61.                {
  62.                print "Failed\n";
  63.                }
  64.        }
  65.        else
  66.        {
  67.        print "Failed\n";
  68.        }
  69.  
  70. }
  71. #backup pour switch HP procurve
  72. sub BackupHpSwitch ($$) {
  73. my ($HP, $backup)  = (shift, shift);
  74. say $HP->{host};
  75.  
  76. my $session = new Net::Telnet( Timeout =>10, Telnetmode => 0, errmode => sub {&error}, Dump_Log => "logit.txt" );
  77. $session->open($HP->{host});
  78. $session->print('') if $session->waitfor('/Press any key to continue/') == 1;
  79. print "   login : ";
  80.     #$session->dump_log("logit.txt" );
  81.  $session->print($HP->{log}) if ($session->waitfor('/Username:/') == 1);
  82.  $session->print($HP->{pass}) if ($session->waitfor('/Password:/') == 1);
  83.   say "Ok";
  84. $session->dump_log("logit.txt" );
  85.  $session->cmd("copy running-config tftp ".$backup->{host}.' '.$backup->{dir2}.'/'.$HP->{host}.'-'.today().".cfg\n\n\n" ) if ($session->waitfor('/#/') == 1);    
  86. $session->close;
  87. }
  88. #bachup pour switch Linksys
  89. sub BackupLinkSwitch($$)
  90.    {
  91.       my ($LK, $backup) = (shift, shift);
  92.  
  93.       say $LK->{host};
  94.  
  95.       my $session= new Net::Telnet (Timeout=>5, Telnetmode=>0, errmode => sub {&error});
  96.  
  97.     #$session->dump_log("logit.txt" );
  98.       $session->open($LK->{host});  sleep (1);
  99.       $session->print('') if ($session->waitfor('/Execute/') == 1);    
  100.       print "   login : ";
  101.     sleep (1);
  102.       $session->print($LK->{log});  
  103. sleep (1);
  104.       $session->print($LK->{pass});
  105. sleep (1);
  106.       $session->put("\e" );  
  107. sleep (1);
  108.       $session->put("\t" );
  109.       $session->put("\n" );
  110. sleep (1);
  111.       $session->put("\n" );  
  112.       $session->put("\cZ" );
  113. sleep (1);
  114.       $session->print('lcli');
  115. sleep (2);
  116.       $session->print($LK->{log}) if ($session->waitfor('/User Name:/') == 1);
  117.         $session->print($LK->{pass}) if ($session->waitfor('/Password:/') == 1);
  118.       say "Ok";
  119. sleep (1);
  120.       $session->cmd("copy startup-config tftp://".$backup->{host}.'/'.$backup->{dir3}.'/'.$LK->{host}.'-'.today().".cfg\n\n\n" ) if ($session->waitfor('/#/') == 1);
  121.  
  122. $session->close;
  123.    }
  124. sub error {
  125. print "connexion échoué\n";
  126. }


 
Merci
PA

Reply

Marsh Posté le 23-05-2013 à 11:08:47   

Reply

Marsh Posté le 23-05-2013 à 11:24:55    

Ben il y a aucun problème:
 
En parallèle:
open my $fh1, '/........../fichier1';
open my $fh2, '/........../fichier2';
open my $fh3, '/........../fichier3';
...
close $fh1;
close $fh2;
close $fh3;
 
et en succession:
my @filenames = ('/........../fichier1', '/........../fichier2', '/........../fichier3');
foreach my $filename (@filenames) {
open my $fh, $filename;
...
close $fh;
}
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 23-05-2013 à 11:48:14    

Impeccable!! Merci gilou! ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed