如何在perl脚本中将CLI参数组合为变量
我正在尝试编写一个基本上执行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
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,我没有注意到实际的错误是使用'
而不是`
。细节。。。