2017-08-24 10 views
1

ネットワークのホストからセンサデータを受信して​​いる次のスクリプトがあります。私が受け取っているデータは、outputと呼ばれる別の配列に格納されているので、ループが終了した後も配列出力の作業を続けることができます。現在、新しいセンサーデータが受信されるたびに、出力に保管されているデータを上書きする場合はループになります。シェルスクリプト:ループ出力を別のアレイに格納する

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について、どのようにシェルが配列にコマンド出力線のそれぞれを分割心配している場合、あなたはbash(V4.0以上Iの最近のバージョンで利用でき、mapfileコマンドにそれを残すことができます推測)

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

このようにループを実行すると、以前と同じように出力配列が実行されます。ただし、配列にを追加する場合は、を追加するだけで、コマンドを1回実行するだけで、これは適用されません。

+1

ご意見ありがとうございました。それはうまく動作しますが、あなたが言ったように、シェルはコマンドの出力を分割しています。これはatmの問題ではありません。また、あなたの地図ファイルの言及に感謝、良いと速い答え:) – RiftOut

関連する問題