【问题标题】:assign substring to variable without using echo不使用 echo 将子字符串分配给变量
【发布时间】:2018-06-27 12:51:07
【问题描述】:

我有一个正在运行的 SNMP pass 脚本,出于某种我还不明白的原因,在脚本中额外使用 echo 会导致脚本无法执行。我现在的确切问题是我需要从变量REQ 中获取一个子字符串,并将其分配给另一个变量。下面是一种理论上可行的方法,但由于使用echo,在我的情况下不起作用。

DGROUP_NODE=`echo $REQ | cut -d. -f3`

还有其他方法可以做到这一点,而不会破坏正在阅读脚本的任何内容吗?我注意到printf 也有同样的问题,尽管频率较低。 (这个问题也让我无法使用echoprintf 来调试我的代码...)

注意事项:echo 导致执行脚本出现问题时,不会返回任何错误(关于脚本)。我只收到No Such Instance currently exists at this OID,它告诉我脚本没有运行,导致我的 OID 树没有被构建。

如果我在 SNMP 之外运行脚本,它会按预期工作。

【问题讨论】:

  • RET != REQ,这是什么?而且您几乎总是希望使用echo 引用变量使用情况,因此echo "$REQ" 可能会解决您的问题。祝你好运。
  • 应该是REQ。我已经尝试添加引号,但问题在于echo 本身。该脚本在直接从终端运行时运行良好。

标签: sh echo snmp


【解决方案1】:

例如,如果我只想要 PEN:

TREE=.1.3.6.1.4.1.8072.2.255
CHOP=.1.3.6.1.4.1.
PEN=${TREE##*$CHOP} # remove $CHOP from beginning (## = longest match from beginning)
PEN=${PEN%%.*} # keep everything before first period (%% = longest match from end)

输出:

8072

在此处了解有关此方法的更多信息:extract part of a string

【讨论】:

    【解决方案2】:

    使用set +x 然后再次运行。我确定问题是$RET 是空的。

    【讨论】:

    • set +x 在终端运行之前?
    • 当我这样做时:$ set +x $ snmpwalk -v2c -cpublic localhost .1.3.6.1.4.1.(PEN) 我遇到同样的问题:MIB::module = No Such Instance currently exists at this OID
    • 你应该在 bash 中查看管道和重定向......这将进入 stderr。
    • $REQ 不能为空,因为它紧跟在case 中。仅当添加其他 echo 语句并通过 SNMP 运行脚本时才会出现此问题。如果我在 SNMP 之外运行脚本,它会按预期工作。
    • 好的,会调查的。
    【解决方案3】:

    在您的代码中用 $ 将 echo 括起来,如下所示:

    DGROUP_NODE=$(echo $REQ | cut -d. -f3)
    

    【讨论】:

    • 代码需要工作。 echo 的视觉缺失是不够的。
    • 我更新了代码,抱歉我不得不测试它。你是对的。
    • 错误:.snmp/pass_script_backup/passScript: 41: .snmp/pass_script_backup/passScript: 3: not found“41”是脚本中的行,“3”是从 $REQ 检索到的值。它似乎在寻找一个名为“3”的变量
    • registered debug token ucd-snmp/pass, 1 pcilib: Cannot open /proc/bus/pci pcilib: Cannot find any working access method. pcilib: pci_init failed Turning on AgentX master support. Error opening specified endpoint "" Server Exiting with code 1
    猜你喜欢
    • 1970-01-01
    • 2011-01-20
    • 2019-02-08
    • 2013-02-23
    • 2019-12-05
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    相关资源
    最近更新 更多