尝试将以下Perl one-liner集成到shell脚本中。此代码在Perl脚本中工作,但不能作为从shell脚本执行的单行程序。
我尝试用真正的主机名替换$host
但没有运气。
#!/bin/ksh
hosts="host1 host2 host3"
PERL=/usr/bin/perl
# Check to see if hosts are accessible.
for host in $hosts
do
#echo $host
$PERL -e 'use Net::Ping; $timeout=5; $p=Net::Ping->new("icmp", $timeout) or die bye ; print "$host is alive \n" if $p->ping($host); $p->close;'
done
答案 0 :(得分:9)
shell中的单引号会阻止$ host被解释。因此,您可以根据需要停止并重新启动单引号:
perl -MNet::Ping -e 'if (Net::Ping->new("icmp", 5)->ping("'$host'")) {print "'$host' is alive\n"}'
或者,您可以将主机作为参数传递 - 请参阅其他答案。
答案 1 :(得分:1)
尝试替换$host
:
$PERL -e 'use Net::Ping; $timeout=5; $p=Net::Ping->new("icmp", $timeout) or die bye ; print "$host is alive \n" if $p->ping($host); $p->close;'
带有$ARGV[0]
的,第一个命令行参数:
$PERL -e 'use Net::Ping; $timeout=5; $p=Net::Ping->new("icmp", $timeout) or die bye ; print "$ARGV[0] is alive \n" if $p->ping($ARGV[0]); $p->close;' $host
答案 2 :(得分:0)
如果要使用Perl,请使用Perl解释器运行脚本。
#!/usr/bin/env perl -w
use Net::Ping;
$timeout=5;
$p=Net::Ping->new("icmp", $timeout) or die bye ;
@hosts=qw/localhost 10.10.10.10/;
foreach my $host (@hosts) {
print "$host is alive \n" if $p->ping($host);
}
$p->close;
否则,您也可以直接从shell
使用ping
命令
#!/bin/bash
for hosts in host1 host2 host3
do
if ping ...... "$hosts" >/dev/null ;then
.....
fi
done