在bash脚本中将snmpbulkwalk输出分配给关联数组

时间:2015-02-24 22:14:20

标签: arrays bash associative-array net-snmp

我搜索了高低的答案,但解决方案继续逃避我。以下是我在本地服务器上运行的snmpbulkwalk的结果。

snmpbulkwalk -v2c -Oqs -m EGT-VIPr-TRx -c <community> <ip> egtViprOutputMuxSecDestPort | sed -e 's/egtViprOutputMuxSecDestPort\.//g'
Output
1 2001
4 2002
5 2003
8 2004

我的目标是将此输出分配给bash中的关联数组(ex array[1]=2001, array[4]=2002, ...)。下面是我在过去将snmpbulkwalk输出分配给标准数组时使用的代码。但是我对关联数组没有成功。

declare -A array
array=($(snmpbulkwalk -v2c -Oqs -m EGT-VIPr-TRx -c <community> <ip> egtViprOutputMuxSecDestPort | sed -e 's/egtViprOutputMuxSecDestPort\.//g'))
echo ${array[1]}

Output
array: 1: must use subscript when assigning associative array
array: 2001: must use subscript when assigning associative array
array: 2: must use subscript when assigning associative array
array: 2002: must use subscript when assigning associative array
array: 3: must use subscript when assigning associative array
array: 2003: must use subscript when assigning associative array
array: 4: must use subscript when assigning associative array
array: 2004: must use subscript when assigning associative array

非常感谢任何协助。

1 个答案:

答案 0 :(得分:0)

我找到了一个可行的解决方案,我发布了答案供将来参考。经过多次试验和错误,while read循环完成了我的最终目标。

declare -A array

while read id value; do
        array[$id]=$value
done < <(snmpbulkwalk -v2c -Oqs -m EGT-VIPr-TRx -c <community> <ip> egtViprOutputMuxSecDestPort | sed -e 's/egtViprOutputMuxSecDestPort\.//g')

echo ${array[1]}

Output
2001

我在将snmpbulkwalk的输出读取到我的循环中的语法方面有些挣扎,但上面的代码在我的场景中完美运行。