test, если return true, если grep на выходе имеет строку в одной строке

Я просто хочу вернуть true или false, если служба запущена. Вот где я нахожусь, не в первую очередь, попробую, но сейчас при написании:

service iptables status | grep -qi "not running" 

Состояние sdtout для service iptables status при его остановке – iptables: Firewall is not running Когда я запускаю то, что я придумал, ничего не происходит в новой строке, что, я думаю, не является неожиданным, так как значение 0 истинно, а не 0 – false. Итак, мне нужно проверить, чтобы он работал, но я не уверен, что делать. Вот попытка:

 service iptables status | grep -qi "not running" || echo "stopped" 

поэтому, когда служба остановлена, я ожидал увидеть stopped но я не получил ничего, кроме новой строки.

 service iptables status | grep -qi "not running" && echo "stopped" 

Вам просто нужно заменить || с && . Одна запутанная вещь о сценариях оболочки заключается в том, что 0 истинно, а любое другое число ложно, напротив большинства других языков. Это происходит потому, что программы обычно возвращают 0 для успеха.

Мне также нужно добавить статус 2>&1 после статуса в качестве service на моих выводах distro в stderr, но не похоже, что это проблема для вас.

Если grep не видит соответствия, он вернет ненулевой код. Возврат 0 означает, что совпадение найдено. Вы, вероятно, хотите:

 service iptables status | grep -qi 'not running' && echo 'Stopped'