Вывод команды проверки ошибок скрипта Bash - PullRequest
0 голосов
/ 22 октября 2019

У меня есть скрипт bash, который я хочу проверить вывод команды Linux. Команда: sudo supervisorctl status

Обычный вывод выглядит следующим образом:

0: tuxtunnel                        RUNNING   pid 563, uptime 11 days, 5:04:19
1: util_pkt_logger                  STOPPED   Oct 11 01:20 PM
2: watchdog                         EXITED    Oct 11 12:03 PM

Моя первая попыткаскрипта bash читает эти выходные данные команды и помещает каждую строку в массив, к сожалению, когда я проверяю, содержится ли строка в этом результате, кажется, что она пытается выполнить проверку как команду. Мой сценарий выглядит следующим образом

    echo "its stopped"
x=$(sudo supervisorctl status)
SAVEIFS=$IFS
IFS=$'\n'
x=(${x})
IFS=$SAVEIFS
for(( i=0; i<${#x[@]}; i++ ))
do
    echo "$i: ${x[$i]}"
    if [$x[$i]] =~"STOPPED" #check if array contains this string
    then
        echo "its stopped"
    fi
done


 exit 0

Когда я пытаюсь выполнить проверку, когда все идет наперекосяк, я новичок в сценариях bash, поэтому любая помощь будет принята с благодарностью. Я пытаюсь увидеть, содержит ли строка слово STOPPED

Ответы [ 4 ]

1 голос
/ 22 октября 2019

Вместо того, чтобы читать весь вывод supervisorctl в одну переменную и затем манипулировать переменной IFS, чтобы разбить строки, попробуйте читать по одной строке за раз. Кроме того, вместо совпадения STOPPED в любом месте строки, ищите его только в столбце состояния.

Попробуйте это:

#!/bin/bash

while read line; do
  echo ${line}
  fields=( ${line} )
  if [ ${fields[2]} == "STOPPED" ]; then
    echo "It's stopped."
  fi
done < $(sudo supervisorctl status)
0 голосов
/ 23 октября 2019

Это была проблема в скобках. Это исправило это: if [["$ {x [$ i]}" = ~ "STOPPED"]] благодаря Гордону Дэвиссону

0 голосов
/ 23 октября 2019

утилита gawk, которую мы можем использовать. Пожалуйста, обратитесь по URL https://unix.stackexchange.com/questions/94047/shell-script-to-print-rows-if-there-is-a-value-in-column-2

cat testout 0: tuxtunnel RUNNING pid 563, время безотказной работы 11 дней, 5:04:19 1: util_pkt_logger ОСТАНОВЛЕНО 11 октября 01:20 PM 2: watchdog EXITED 11 октября 12:03 PM 3: TEST_log ОСТАНОВЛЕН ОКТЯБРЯ 1 ОКТЯБРЯ 11:11 AM

gawk '$ 3 == "STOPPED" {print $ 0}' testout 1: util_pkt_logger ОСТАНОВЛЕН 11 октября 13:20 PM 3:TEST_log ОСТАНОВЛЕН ОКТЯБРЯ 1 ОКТЯБРЯ 11:11

0 голосов
/ 23 октября 2019

Вам не нужно идти на некоторое время. Вы можете использовать awk для решения этой проблемы.

#!/bin/bash

sudo supervisorctl status | awk '{if ($6 == "STOPPED") print $2" is Stopped";}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...