2017-07-19 41 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

相關問題