Bash: оператор If / Else в одной строке



Я пытаюсь проверить, если процесс (предположим, что это называется some_process) работает на сервере. Если это так, то эхо 1, иначе Эхо 0.



это команда, которую я использую, но она работает только частично (подробнее ниже). Обратите внимание, что мне нужно написать скрипт в одну строку.



ps aux | grep some_proces[s] > /tmp/test.txt && if [ $? -eq 0 ]; then echo 1; else echo 0; fi


Примечание: The [s] на some_proces[s] - предотвратить grep вернуться сама.



если some_process работает, потом "1" получает Эхо, что нормально. Однако, если some_process не работает, ничего не отозвалось.

683   4  

4 ответов:

нет необходимости явно проверять $?. Просто сделайте:

ps aux | grep some_proces[s] > /tmp/test.txt && echo 1 || echo 0 

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

if ps aux | grep some_proces[s] > /tmp/test.txt; then echo 1; else echo 0; fi

&& значит "и в случае успеха"; путем размещения if оператор в правой части его, вы гарантируете, что он будет работать только если grep возвращает 0. Чтобы исправить это, используйте ; вместо:

ps aux | grep some_proces[s] > /tmp/test.txt ; if [ $? -eq 0 ]; then echo 1; else echo 0; fi

(или просто использовать разрыв строки).

использовать grep -vc игнорировать grep на ps вывод и подсчет строк одновременно.

if [[ $(ps aux | grep process | grep -vc grep)  > 0 ]] ; then echo 1; else echo 0 ; fi

вы можете в полной мере использовать && и || операторы вроде этого:

ps aux | grep some_proces[s] > /tmp/test.txt && echo 1 || echo 0

для исключения самого grep, вы также можете сделать что-то вроде:

ps aux | grep some_proces | grep -vw grep > /tmp/test.txt && echo 1 || echo 0

Comments

    Ничего не найдено.