嘗試從bmp中將snmpget的輸出轉換爲數組。 目的是查詢SAN設備的SNMP狀態。 SNMPGET命令行是如下從snmpget輸出到bash陣列
# /usr/bin/snmpget -v2c -Oqv -c public nas.mynetwork.lcl .1.3.6.1.4.1.9804.3.1.1.2.1.30.0 .1.3.6.1.4.1.9804.3.1.1.2.1.39.0
,其輸出是一樣
"P4500G2"
"12 600GB SAS 3.0Gbps drives"
我打算用這一個腳本,所以我讓整個命令行的變量。這是腳本,將其輸出發送到一個新的數組變量,然後遍歷數組。從上面的腳本
# Paths and options
SNMPGET='/usr/bin/snmpget'
SNMPOPTIONS='-v2c -Oqv -c public'
SNMPHOST='nas.mynetwork.lcl'
SNMPOID1='.1.3.6.1.4.1.9804.3.1.1.2.1.30.0'
SNMPOID2='.1.3.6.1.4.1.9804.3.1.1.2.1.39.0'
# Run the command, strip quotes and leave output in variable SNMPREPLY
SNMPREPLY=($($SNMPGET $SNMPOPTIONS $SNMPHOST $SNMPOID1 $SNMPOID2 | tr -d '"'))
# Check what's in the array
for index in ${SNMPREPLY[*]}
do echo $index
done
輸出是這
P4500G2
12
600GB
SAS
3.0Gbps
drives
正如你所看到的報價是正確不見了如預期,但是從SNMPGET每句話都放在一個單獨的數組項。這不是目的,而是將每個輸出行保存爲一個單獨的數組項。
試圖查看bash IFS變量,但無論如何都無法使其工作。
我在做什麼錯?
謝謝,這工作。 我不完全理解第一個代碼塊,以及它爲什麼起作用。但是會研究它並嘗試理解。乍一看,我認爲它是逐行讀取$ SNMPGET輸出並將其附加到snmpreply變量。尼斯。 – tompaah
我將擴展使用進程替換語法('<(...)')。 – chepner