我有一个perl脚本,该脚本现在可以从Windows命令行运行(已安装ActivePerl)。它发送命令以打开/关闭电源控制器(智能配电盘)上的端口。我进行了设置,以便使用几个命令行参数。设备的IP地址以及我要对该设备执行的电源操作。即10.0.40.1开启应打开IP 10.0.40.1的设备,或者打开电源控制器中的相应端口。
我有一个if elseif语句,它将评估传递给脚本的IP地址并确定哪个电源控制器和哪个端口合适。唯一的其他操作是端口,并且该操作已合并,因此,如果设备在控制器的端口3上并且传递的操作为“ on”,则新变量将变为3on。这是脚本的其余部分所理解的,并且是新手,将其保持不变很容易。
问题:当我从Windows运行此命令时
perl Lpower.pl 10.0.30.15上
要么
Lpower.pl 10.0.30.15在
问题在于,这样做的目的是允许另一个应用程序在我的客户端上调用脚本。另一个应用程序是一块网络管理软件。通过受支持的自定义GUI扩展,我能够为每个受管理的设备在菜单中添加项目。我有一个用于“开机”,另一个用于“关机”。我将其指向客户端计算机本地路径的Lpower脚本,它被调用并运行,它也按预期传递参数,但是我的if语句不起作用。它不会在任何IP上匹配,也不会在“开”,“关”操作上匹配。我不需要评估后者,我只是在他们的陈述中进行测试。
我的脚本打印了变量,但确实显示了这些变量,但是if语句不起作用。似乎没有添加前导空格或任何东西。
这是相关部分的代码片段:
# $language = "PerlScript"
# $interface = "1.0"
#!c:\perl64\bin\perl -w -CA
...
print STDERR "UserUtil $version\n\n";
my ($ipaddr, $onoff) = @ARGV;
print "$ipaddr $onoff\n";
if ($onoff eq "off") {print "it matched off"}
if ($ipaddr eq "10.0.40.1") {
$epc='10.0.30.92';
$port='1';
}
elsif ($ipaddr eq "10.0.40.105") {
$epc='10.0.30.92';
$port='2';
}
elsif (($ipaddr eq "10.0.40.100") || ($ipaddr eq "10.0.40.101")) {
$epc='10.0.30.92';
$port='3';
}
...
else {print "no matches found"}
$oper="$port$onoff";
$base='http://'.$auth.'@'.$epc.'/';
print "$epc $oper $ipaddr";
cmd($oper) && die "Unknown Command $_\n";
其中有一些用于调试的打印语句。CLI的输出看起来像这样(并且可以正常工作,端口按预期方式打开/关闭):
10.0.30.15 off
it matched off10.0.30.93 1off 10.0.30.15
从网络应用程序调用(在我的客户端上启动脚本)
10.0.30.15 on
Unknown Command
no matches found 10.0.30.15 off
为什么会有所不同?我可以采取什么措施来强制正确处理传递的参数?如果我没有看错,它们应该是UTF-8编码的字符串,那么该应用程序是否可以发送不同的内容,因此if语句会中断?
还有一张便条。该应用程序直接调用脚本并传递参数,但不调用perl可执行文件,我的环境知道如何处理pl脚本。不知道这是否有所作为。
任何帮助深表感谢。我确实在远处有一些编码,但是从没从事过,对perl来说是全新的。
脚本的相关部分
my ($ipaddr, $onoff) = @ARGV;
print "$ipaddr $onoff\n";
if ($ipaddr eq "10.0.40.1") { print "matched\n"; }
else {print "no matches found\n"}
运行为
perl power.pl 10.0.40.1 off
印刷品:
10.0.40.1 off
matched
运行为
perl power.pl "10.0.40.1 off" #two words as one arg
版画
10.0.40.1 off
no matches found
当您添加
use strict;
use warnings;
my ($ipaddr, $onoff) = @ARGV;
print "$ipaddr $onoff\n";
if ($ipaddr eq "10.0.40.1") { print "matched\n"; }
else {print "no matches found\n"}
将打印:
Use of uninitialized value $onoff in concatenation (.) or string at power.pl line 5.
10.0.40.1 off
no matches found
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句