从阵列上的所有设备打印结果

时间:2011-07-21 16:18:12

标签: perl

我只是编写这个脚本但是脚本只打印一个结果而不是所有设备的结果。我相信我的错误是在打印部分,但我无法弄清楚。

注意: - 主机文件有30个设备列表,但脚本仅打印最后一个设备的结果。

#!/usr/bin/perl

$host_file  = "/usr/local/bin/test/host2";

open (PACKETLOSS,"$host_file") or die "Cannot Open Extracted host file";

# Put Extracted data into an array

@extracted_array=<PACKETLOSS>;

chomp(@extracted_array);

foreach(@extracted_array) {
    @words = split;
    $host = $words[0];
}

$extracted_array[$ping_idx] = `/usr/sbin/ping -s -t 10 $host 56 2 2>&1`; 

$ping_idx++;

($packet_loss) = ($ping =~ m/packets received, (\d+)% packet loss/);

($round_trip) = ($ping =~ m/round-trip.*\(ms\).*min\/avg\/max\/stddev = \d+\.\d+\/(\d+\.\d+)\/.*/);

print " $host $round_trip ms Average Latency and $packet_loss Packet loss\n"; 

2 个答案:

答案 0 :(得分:1)

让你的foreach循环靠近代码的最底部。

foreach(@extracted_array) {
    @words = split;
    $host = $words[0];

    $extracted_array[$ping_idx] = `/usr/sbin/ping -s -t 10 $host 56 2 2>&1`; 

    $ping_idx++;

    ($packet_loss) = ($ping =~ m/packets received, (\d+)% packet loss/);

    ($round_trip) = ($ping =~ m/round-trip.*\(ms\).*min\/avg\/max\/stddev = \d+\.\d+\/(\d+\.\d+)\/.*/);

    print " $host $round_trip ms Average Latency and $packet_loss Packet loss\n"; 

}

答案 1 :(得分:0)

因为您正在关闭foreach然后执行操作。 IT应该

foreach(@extracted_array) 
 {
   @words = split; 
  $host = $words[0]; 
  $extracted_array[$ping_idx] = `/usr/sbin/ping -s -t 10 $host 56 2 2>&1`; 
  $ping_idx++; 
 ($packet_loss) = ($ping =~ m/packets received, (\d+)% packet loss/);  
 ($round_trip) = ($ping =~ m/round-trip.*\(ms\).*min\/avg\/max\/stddev = \d+\.\d+\/(\d+\.\d+)\/.*/); 
  print " $host $round_trip ms Average Latency and $packet_loss Packet loss\n";  
 }