首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl:检查特定文本的标准输出并执行操作

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

Stack Overflow用户
提问于 2013-03-08 22:24:58
回答 3查看 176关注 0票数 0

我正在尝试编写一个工具来检查现有PTR记录的IP地址,如果没有PTR记录,则执行ping以查看其是否响应。

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

这就是我到目前为止所拥有的。

代码语言:javascript
复制
#!/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,它将打印以下行。

代码语言:javascript
复制
print "IP Address '$line' is available.\n"

任何帮助都将不胜感激。谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-08 22:34:58

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

代码语言:javascript
复制
# 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
EN

Stack Overflow用户

发布于 2013-03-08 23:26:19

您应该使用perl的内置库来完成所需的工作。下面是一个如何使用perl实现ping的示例:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2013-03-08 22:34:52

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

如果从该特定IP获得否定响应,则需要设置$ping变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15296195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档