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 не работает, ничего не отозвалось.
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