В одной строке bash, как мне вернуть статус завершения 0, когда вывод /usr/local/bin/monit --version
не содержит ровно 5.5
и статус выхода 1, когда он делает?
Как проверить (в одной строке), если вывод команды содержит определенную строку?
Ответ 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