【问题标题】:shell script : array related issueshell脚本:数组相关问题
【发布时间】:2012-11-06 13:57:21
【问题描述】:

使用 linux 2.6.18..

/bin/bash -version
GNU bash, version 1.14.7(1)

(snmpwalk 命令在控制台中提供输出,如下所示)

33
4232
5342
632
45342
23342
3243

我正在使用 shell 脚本从 snmp 中 grep 数据并尝试将其添加到数组中。但无法解决以下问题...

#!/bin/bash
OID="1.3.6.1.2.1.2.2.1"

declare -a index=$(snmpwalk -v 2c -c public -Oqv localhost ${OID}.1) 
declare -a upload=$(snmpwalk -v 2c -c public -Oqv localhost ${OID}.10) 
declare -a download=$(snmpwalk -v 2c -c public -Oqv localhost ${OID}.11)

echo "retrieved ${#index[@]} elements"
echo "#${index[3]}: up=${upload[2]} down=${download[2]}"

输出:

 + declare -a index=1 2
    j2.sh: 4: j2.sh: declare: not found

(所以我不能使用'declare')

第二种方式

#!/bin/bash

    OUTPUT1=$(snmpbulkwalk -Oqv -c public -v 2c localhost
    1.3.6.1.4.1.21067.4.1.1.1 2> /dev/null)
    i=1
    index=1
    upload=1
    download=1
    for LINE in ${OUTPUT1}
        do
            index=$LINE

        OUTPUT2=$(snmpget -Oqv -c public -v 2c localhost 1.3.6.1.4.1.21067.4.1.1.10.$i 2> /dev/null)
        OUTPUT3=$(snmpget -Oqv -c public -v 2c localhost 1.3.6.1.4.1.21067.4.1.1.11.$i 2> /dev/null)
            upload=$OUTPUT2
            download=$OUTPUT3
            i=`expr $i + 1`
        done

它为 bettelnack 提供大量数据...

3ra 方法:

#!/bin/bash
OUTPUT=$(snmpbulkwalk -Oqv -c public -v 2c localhost
1.3.6.1.4.1.21067.4.1.1.1 2> /dev/null)
i=0
index[3000]=0
for LINE in ${OUTPUT} ; do
    index[$i]=$LINE
    i=`expr $i + 1`

done

这里index[1],index[2]……没有找到

【问题讨论】:

    标签: bash shell snmp


    【解决方案1】:
    declare -a index=$(snmpwalk -v 2c -c public -Oqv localhost ${OID}.1) declare -a upload=$(snmpwalk -v 2c -c public -Oqv localhost ${OID}.10) declare -a download=$(snmpwalk -v 2c -c public -Oqv localhost ${OID}.11)
    

    您为什么要在一行中完成所有这些操作?在单独的行上执行此操作,它应该可以工作。

    declare -a index=$(snmpwalk -v 2c -c public -Oqv localhost ${OID}.1)
    declare -a upload=$(snmpwalk -v 2c -c public -Oqv localhost ${OID}.10)
    declare -a download=$(snmpwalk -v 2c -c public -Oqv localhost ${OID}.11)
    

    如果这不起作用,您使用的是哪个版本的 Bash?你从/bin/bash --version 得到什么?

    【讨论】:

    • 另外两个选项:用分号分隔命令,或者在同一命令中声明所有三个变量:declare -a index=$(...) upload=$(...) download=$(...)
    • 我已经在单独的行中完成了。它只是在这里粘贴错误..对不起..但是我的 bash 不支持“声明”或任何类型的正常数组声明....你能帮我吗?
    • /bin/bash -version GNU bash, version 1.14.7(1) {I can't upgrade bash version in my server}
    • @user95711 认真的吗?重击 1.14?我找不到一直追溯到 Bash 2 的发行说明,当时添加了 declare -a 支持,但 Bash 2.05 是 released in 2001。您正在使用超过 11 年的 Bash 版本。无论如何,您使用的 Bash 版本太旧,无法支持数组。你到底想做什么?如果您描述了您要解决的问题,我可能会描述您如何在不使用数组的情况下完成它。
    • 实际上与我一起工作的组织在过去 11 年中就有了它的烤箱 linux 版本。使用这个脚本,我正在从“net-snmp”模块中获取一些数据,而不是通过这个答案,我想更新不同的“RRD”图。所以值和图表太大了,“SNMPGET(一个一个地检查所有数据)”给了我瓶颈。因此,使用“SNMPWALK”,我可以一次获取所有数据并将其存储在某个软件中......所以在它之后我可以根据我的需要获取它们
    猜你喜欢
    • 2022-10-24
    • 2023-03-06
    • 2011-05-07
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2018-09-11
    • 2011-01-06
    相关资源
    最近更新 更多