如何将 CLI 参数组合为 perl 脚本中的变量
How to combine CLI arguments as variables within a perl script
我正在尝试编写一个基本上执行如下 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 通常 returns:
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
它应该return如下:
xx.xx.xx.xxx as an Input Line Reading of 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`;
我正在尝试编写一个基本上执行如下 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 通常 returns:
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
它应该return如下:
xx.xx.xx.xxx as an Input Line Reading of 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`;