Perl:检查特定文本的标准输出并执行操作

时间:2013-03-08 14:24:58

标签: linux perl dns ping

我正在尝试编写一个工具来检查现有PTR记录的IP地址,然后如果没有PTR记录就会ping一下,看看它是否响应。

然后,如果没有回复,它应该打印一条消息

这是我到目前为止所做的。

#!/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"

非常感谢任何帮助。 谢谢!

3 个答案:

答案 0 :(得分:1)

你应该使用perl的内置库来做你需要的。以下是如何使用perl实现ping的示例:

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();
    }

答案 1 :(得分:0)

$ping不是unf。所以if条件总是返回true!

如果您从特定$ping收到否定回复,则需要设置IP变量。

答案 2 :(得分: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/ ) {
        ...
    }
}