Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在perl脚本中将CLI参数组合为变量_Perl_Command Line Interface_Snmp - Fatal编程技术网

如何在perl脚本中将CLI参数组合为变量

如何在perl脚本中将CLI参数组合为变量,perl,command-line-interface,snmp,Perl,Command Line Interface,Snmp,我正在尝试编写一个基本上执行cli命令的脚本,如: snmpget-v1-cxxxxxx-Ovq xx.xx.xx.xxx.1.3.6.1.2.1.1.8.0 其中xxxxx是密码,xx.xx.xx.xxx和IP通常返回: 49:22:12:15.00 我的剧本是: #!/usr/local/bin/perl #snmpget -v 1 -c xxxxx -Ovq xx.xx.xx.xxx .1.3.6.1.2.1.1.8.0 $SNMP_GET_CMD = "snmpget -v1 -c

我正在尝试编写一个基本上执行cli命令的脚本,如:

snmpget-v1-cxxxxxx-Ovq xx.xx.xx.xxx.1.3.6.1.2.1.1.8.0

其中xxxxx是密码,xx.xx.xx.xxx和IP通常返回:

49:22:12:15.00

我的剧本是:

#!/usr/local/bin/perl

#snmpget -v 1 -c xxxxx -Ovq xx.xx.xx.xxx .1.3.6.1.2.1.1.8.0

$SNMP_GET_CMD = "snmpget -v1 -c xxxxx-Ovq";
$SNMP_TARGET = "xx.xx.xx.xxx";

my $sysORLastChange = '${SNMP_GET_CMD} ${SNMP_TARGET} .1.3.6.1.2.1.1.8.0';
chomp($sysORLastChange);
print("${SNMP_TARGET} as an Input Line Reading of ${sysORLastChange}\n");
输出为:

xx.xx.xx.xxx作为输入行读取${SNMP\u GET\u CMD}${SNMP\u TARGET}.1.3.6.1.2.1.1.8.0

它应返回以下内容:

xx.xx.xx.xxx作为49:22:12:15.00的输入行读数


我在脚本中使用的语法有问题吗?

在Perl中,使用双引号将另一个变量插入字符串中。在单个带引号的字符串中使用其他变量定义
$sysORLastChange
时,如下所示:

my $sysORLastChange = '${SNMP_GET_CMD} ${SNMP_TARGET} .1.3.6.1.2.1.1.8.0';
…正在逐字分配字符串(即内部变量未展开)

若要更正此问题,请使用双引号为变量赋值,这会将内部变量插入其值中:

my $sysORLastChange = "${SNMP_GET_CMD} ${SNMP_TARGET} .1.3.6.1.2.1.1.8.0";
如果要实际执行字符串,可以使用
qx()
运算符,也称为“backtick”样式引号:

my $sysORLastChange = qx(${SNMP_GET_CMD} ${SNMP_TARGET} .1.3.6.1.2.1.1.8.0);

# or...

my $sysORLastChange = `${SNMP_GET_CMD} ${SNMP_TARGET} .1.3.6.1.2.1.1.8.0`;

请参见。

我认为OP希望实际执行
snmpget
命令,将结果插值到变量中。要执行插值字符串,请将双引号更改为
qx(…)
@stevieb Ok,我没有注意到实际的错误是使用
'
而不是
`
。细节。。。