Подтвердить что ты не робот

Как проверить (в одной строке), если вывод команды содержит определенную строку?

В одной строке bash, как мне вернуть статус завершения 0, когда вывод /usr/local/bin/monit --version не содержит ровно 5.5 и статус выхода 1, когда он делает?

4b9b3361

Ответ 1

! /usr/local/bin/monit --version | grep -q 5.5

(grep возвращает статус выхода 0, если он находит совпадение, и 1. В противном случае параметр -q, "quiet", указывает, что он не печатает совпадения, которые он находит, другими словами, он сообщает grep, что единственное, что вам нужно, это его возвращаемое значение. ! в начале инвертирует статус выхода для всего конвейера.)

Отредактировано для добавления: Альтернативно, если вы хотите сделать это в "чистом Bash" (вместо вызова grep), вы можете написать:

[[ $(/usr/local/bin/monit --version) != *5.5* ]]

([[...]] объясняется в & sect; 3.2.4.2 "Условные конструкции" справочного руководства Bash. *5.5* аналогичен файловым файлам: ноль или более символов плюс 5.5, плюс ноль или более символов.)

Ответ 2

[ $(/usr/local/bin/monit --version) == "5.5" ] 

eg-1: проверить успех

[ $(/usr/local/bin/monit --version) == "5.5" ] && echo "OK"

eg-2: проверьте наличие сбоя

    [ $(/usr/local/bin/monit --version) == "5.5" ] || echo "NOT OK"

или, чтобы просто проверить, содержит ли вывод 5.5:

[[ $(/usr/local/bin/monit --version) =~ "5.5" ]] || echo "NOT OK"

Ответ 3

Проверьте возвращаемое значение grep:

sudo service xyz status | grep 'not' &> /dev/null
if [ $? == 0 ]; then
   echo "whateveryouwant"
fi

Я бы порекомендовал cron, он отлично работает со стеком SALT