2013-03-08 34 views
0

我正在嘗試編寫一個工具來檢查現有PTR記錄的IP地址,然後如果沒有PTR記錄,請執行ping以查看它是否響應。Perl:檢查特定文本的標準輸出並執行一個操作

然後,如果沒有響應,它應該打印一條消息說

這是我到目前爲止所。

#!/usr/bin/perl 
$ping = "100%"; 
use warnings; 
while (defined($line = <>)) { 
    chomp($line); 
    print `nslookup $line`; 
    if ("NXDOMAIN") { 
     print `ping -c 1 -w 2.0 $line`; 
     if ($ping) { 
      print "IP Address '$line' is available.\n" 
     } 
    } 
} 

我似乎無法工作的是if語句,如果文本NXDOMAIN在輸出中執行ping。然後,如果ping的文本包含$ ping,它將打印下面一行。

print "IP Address '$line' is available.\n" 

任何援助將不勝感激。 謝謝!

+2

你應該使用[已寫入多個模塊]的一個(http://search.cpan.org/search?query=nslookup&mode=all) – carandraug 2013-03-08 14:39:18

回答

0

您需要存儲您的命令返回的值:

# THIS CODE IS UNTESTED, but should get the idea across. 
my $nslookupOut = `nslookup $line`; 
print $nslookupOut; 
if ($nslookupOut =~ /NXDOMAIN/) { 
    my $pingOut = `ping -c 1 -w 2.0 $line`; 
    print $pingOut; 
    if ($pingOut =~ /$ping/) { 
     ... 
    } 
} 
+0

這正是我需要的。這對於我學習Perl很有幫助。謝謝!! – user2148750 2013-03-08 15:11:54

0

$ping不是undef。所以if條件總是返回true!

如果您從該特定IP獲得否定響應,則需要設置$ping變量。

1

你應該使用內置的Perl庫做你的需要。下面是如何使用Perl來實現你的平安例如:

use Net::Ping; 

my @list = ("10.0.0.1", "10.0.0.2", "10.0.0.3"); 

foreach my $addr (@list) { 
    my $p = Net::Ping->new(); 
    print "IP Address '$addr' is not responsive.\n" if !$p->ping ($addr); 
    $p->close(); 
    } 
相關問題