Bash脚本来解析telnet输出

时间:2018-10-19 01:45:49

标签: bash telnet

我正在尝试创建一个切换脚本,该脚本读取通过telnet获取的值,然后执行命令以将同一值更改为其他值。

if / then语句很简单:

if [ $(ID0Status) = "String1" ]
then
command1
elif [ $(ID0Status) = "String2" ]
then
command2
fi

在这里,检查ID0Status以查看返回了什么字符串。我不确定的部分是如何实际获取该信息。要手动获取信息,请执行以下操作:

telnet localhost port

一旦我进入,我会输入:

get-status

此时,输出具有以下结构:

[
    {
        "id": "0"
        "status": "String1"
    },
    {
        "id": "1"
        "status": "String2"
    }
]

因此,我需要一种方法来找到status的值,其中id = 0,返回字符串,并将其定义为ID0Status变量。

我从哪里开始?

1 个答案:

答案 0 :(得分:1)

承认,您不想使用第三方工具:

首先,您应该一次在一个变量中获得一次telnet结果

telnetStatusResult=$(ID0Status)

然后,要为每对(id,status)对使用一行,可以这样使用tr和sed:

telnetStatusResult=$(ID0Status |tr -d '\n' |sed -e 's/,/\n/g')

编辑=>此脚本行的说明:

  • tr 指令允许将所有行合并为一个
  • sed 指令允许将单行拆分为多行,每种类型都有一个逗号','
  • 这样,您可以在一条独立的线上获得每个(ID,状态)夫妇信息

最终,您可以提取每个ID的状态,并执行相应的命令,例如

telnetStatusInfoSet=$( echo "$telnetStatusResult" |sed -e 's/^.*id[ ":]*\([^"]*\)".*status[ ":]*\([^"]*\)".*$/\1;\2/' )

编辑=>此脚本行的说明:

  • 对于每行, sed 指令仅提取id的值和status的值,并将其格式化以分号分隔的信息

这样,您将得到类似的东西:

0;String1
1;String2

然后,您可以循环这些对,并执行相应的操作。

让我知道是否足以解决您的问题。