我有一个perl脚本,现在可以在windows命令行中运行(安装了ActivePerl)。它发送命令以在电源控制器(智能电源板)上打开/关闭端口。我有它的设置,所以我采取了几个命令行参数。设备的IP地址以及我要在该设备上执行的电源操作。即10.0.40.1 on应该在打开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,也不会匹配“on”“off”操作。我不需要评估后者,我只是在他们的测试中发表声明。
我的脚本打印变量,它们确实显示,但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来说是全新的。
答案 0 :(得分:0)
脚本的相关部分
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