我相信我有这样的正确。我可以打印变量没问题。将vriables传递给ups检查脚本时没有发生任何事情?
#!/usr/bin/perl
open FILE, "upslist.txt";
while ($line=<FILE>){
if ($line=~/^(.*?),(.*?)$/){
#print "ups:$1 string:$2\n";
do 'check_snmp_mgeups-0.1.pl -H $1 -C $2';
}
}
upslist.txt
#ups
ups1.site,upsstring1
ups2.site,upsstring1
ups3.site,upsstring2
ups4.site,upsstring3
感谢您的帮助。
答案 0 :(得分:5)
你在这里使用单引号,这会禁止插值:
do 'check_snmp_mgeups-0.1.pl -H $1 -C $2';
此外,您可能希望在此使用system
,而不是do
。
system( "check_snmp_mgeups-0.1.pl", "-H", $1, "-C", $2 ) == 0
or die "system call to check_snmp_mgeups-0.1.pl failed: $?";
(已编辑使用system
的列表表单,or
而不是||
。我的C ++正在展示。)
答案 1 :(得分:0)
您可以使用local
的{{1}}副本执行此操作:
@ARGV
但如果您正在认真尝试将while ($line=<FILE>){
if ($line=~/^(.*?),(.*?)$/){
#print "ups:$1 string:$2\n";
local @ARGV = ("-H", $1, "-C", $2);
do 'check_snmp_mgeups-0.1.pl';
}
}
脚本中的某些功能集成到主脚本中,请考虑将check_snmp_mgeups-0.1.pl
重新设计为可重复使用的模块,您可以将其导入脚本并访问通过子程序调用而不是笨重的check_snmp_mgeups-0.1.pl
机制来实现功能。
答案 2 :(得分:0)
你可能在这里混合引号。你需要使用`而不是':
#!/usr/bin/perl
open FILE, "upslist.txt";
while ($line=<FILE>){
if ($line=~/^(.*?),(.*?)$/){
#print "ups:$1 string:$2\n";
my $result = `check_snmp_mgeups-0.1.pl -H $1 -C $2`;
}
}