Coucou

J'essaye maintenant de faire un script qui ferait un ping sur une liste de noms de machines qui sont stockés dans un fichier texte sous cette forme :

machine1
machine2
machine3
...

Et qui me donnera le résultat dans un autre fichier texte, voici mon code mais le syntaxe n'est apparament pas bonne merci de me dire ou j'ai faux !


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
 
#!/opt/perl5/bin/perl -w
 
use strict;
 
## Vérification de l'existence et du type du paramètre passé au script
$ARGV=@ARGV;
if ($ARGV == 0) {print("\n\nPas de parametre en entree du script.\n\n",
                       "Veuillez lancer le script de cette facon:\n",
                       "  sous windows: perl -w script fichier_input\n",
                       "  sous unix:    ./script fichier_input\n\n");
                 exit;}
if (not -f $ARGV[0]) {print("\n\nLe fichier passe en parametre n'existe pas.\n\n",
                            "Veuillez verifier que le nom du fichier est exact et ",
                            "qu'il se trouve dans le meme repertoire que le script\n\n");
                      exit;}
 
#### Définitions des variables utilisées
my $output_file = "ping_it_res.txt";
my $ip;
 
#### Ouverture du fichier de résultat
open(RESULTAT,">$output_file") or die "Impossible de créer le fichier resultat: $!\n";
 
## recuperation date & heure
my ($sec,$min,$hour,$mday,$mon,$year) = (localtime(time))[0..6];
$mon=$mon+1; $year=$year+1900;
foreach ($mon,$mday,$hour,$min,$sec)  { $_ ='0'.$_ if ($_ < 10) }
 
print RESULTAT "Resultat des requêtes ping\n",
               "Test effectué le $mday/$mon/$year à $hour:$min:$sec\n\n";
 
#### Récupération des données dans le fichier de conf
open(LOAD_CONF,"$ARGV[0]") or die "\nProblème lors de l'ouverture du fichier de conf $ARGV[0]: $!\n\n";
 
while (<LOAD_CONF>) {
 
   if ( $_ !~  m/(^#|^$)/ ) {
     chomp;                  # Supprime les retours chariot
     if ( /\s$/ ) { chop; }  # Supprime le dernier espace de la ligne si present
     $ip = $_;
 
## vérification de la syntaxe du fichier de configuration
     if ( $ip !~ m/^ (RM|LB|CM|SD|AP|HB|SD|SF|WL|ST|SW|SR|RT|RS)|(^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$)/i ) { die "\nErreur de syntaxe: $ARGV[0] line : $.\n"; }
     my $nombre=`ping $ip -n 2 | grep -c "icmp"`;
     if ( $nombre == 0 )    { print "Le ping vers $ip N'A PAS ABOUTI\n";
                              print RESULTAT "KO: $ip\n"; }
     elsif ( $nombre == 2 ) { print "Le ping vers $ip a abouti\n";
                              print RESULTAT "ok: $ip\n"; }
     else { print "Problème lors du ping vers $ip\n";
            print RESULTAT "erreur: $ip - seul $nombre ping sur 2 a abouti\n"; }
 
   } # End if ^#
} # End While
 
close(LOAD_CONF);
close(RESULTAT);

Il me dit que la syntaxe de la ligne 1 du fichier que je mets en input n'est pas correct, alors qu'elle commence par RM comme selon les règles que j'ai établit !

Merci de m'aider