Bash скрипт для разбора вывода telnet - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь создать скрипт переключения, который читает значение, полученное через 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 голосов
/ 19 октября 2018

Допустим, вы не хотите использовать сторонние инструменты:

Сначала вы должны получить результат telnet раз в раз в переменной, скажем,

telnetStatusResult=$(ID0Status)

Затем,чтобы иметь одну строку для каждой пары (id, status), вы можете использовать tr и sed следующим образом:

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

Edit => объяснения этой строки сценария:

  • tr инструкция позволяет объединить все строки в одну
  • инструкция sed позволяет разбить одну строку на несколько строк, каждый тип которых находится в коме','
  • таким образом, вы получаете информацию о каждой паре (ID, статус) в одной независимой строке

В конце концов, вы можете извлечь статус для каждого идентификатора и выполнить соответствующийкоманда, например

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

Edit => объяснения этой строки сценария:

  • для каждой строки, инструкция sed просто извлекает значение idи значение status и форматирует его, чтобы получить информацию, разделенную точкой с запятой

Таким образом, у вас будет что-то вроде:

0;String1
1;String2

Тогда вы можете зациклить эти пары и выполнить соответствующее действие.

Дайте мне знать, если этого достаточночтобы решить вашу проблему.

...