2017-08-24 55 views
1

我收到了以下腳本,其中我從網絡中的主機接收傳感器數據。我收到的數據應該存儲在一個單獨的數組中,稱爲output,這樣我可以在循環結束後繼續使用數組輸出。當前是循環,如果每次接收到新的傳感器數據時都覆蓋存儲在輸出中的數據。Shell腳本:將回路輸出存儲在獨立陣列中

declare -a sensorData=(
    "1.3.6" #Data1 
    "1.3.6" #Data2 
) 

declare -a output=() 

for i in "${sensor[@]}" 
do 
    output=$(snmpget -v "snmpversion" -c "ipaddress" "$i") 
    echo $output 
done 

所以我從snmpget命令獲取值應存儲在陣列output英寸

回答

0

這個想法是正確的,但您只需將命令替換$(..)輸出包含在您定義的數組中。 +=運算符允許您在每次迭代中將snmpget輸出附加到數組。

output+=($(snmpget -v "snmpversion" -c "ipaddress" "$i")) 

然後您可以遍歷數組以獲取存儲的值。

for val in "${output[@]}"; do 
    printf "%s\n" "$val" 
done 

如果你擔心IFS和shell如何拆分每個命令輸出線入陣,你可以把它留給mapfile命令,可在最新版本的bash(V4.0以上我猜)

mapfile -t output < <(snmpget -v "snmpversion" -c "ipaddress" "$i") 

然後像以前一樣在輸出數組上運行循環。但是,如果您想附加到數組中,但這不適用,但只需運行一次該命令。

+1

非常感謝您的評論。它工作的很好,但正如你所說,shell正在分割命令輸出,這不是一個問題。另外感謝你的mapfile提及,好的和快速的回​​答:) – RiftOut