2017-07-19 42 views
1

我想编写一个脚本,就像基本上执行CLI命令:如何在Perl脚本中CLI参数组合作为变量

snmpget -v 1 -c xxxxxx-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 as an Input Line Reading of ${SNMP_GET_CMD} ${SNMP_TARGET} .1.3.6.1.2.1.1.8.0

应该返回如下:

xx.xx.xx.xxx as an Input Line Reading of 49:22:12:15.00

是否有与我在脚本中使用的语法什么问题?

回答

1

在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()运营商,也称为 “反引号” 式行情:

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`; 

perlopPerl Quote and Quote-like Operators

+1

我认为OP要实际*执行* snmpget命令,将* result *插入到变量中。 – chepner

+1

要执行插入的字符串,请将双引号更改为“qx(...)”。 – dgw

+0

答复已更新。谢谢! – stevieb

相关问题