[bash] Bash : 한 줄에 If / Else 문

프로세스 (라고 가정 some_process)가 서버에서 실행되고 있는지 확인하려고 합니다. 그렇다면 echo 1, 그렇지 않으면 echo 0.

이것은 내가 사용하는 명령이지만 부분적으로 만 작동합니다 (아래 자세한 정보 참조). 스크립트를 한 줄에 작성해야합니다.

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

참고 :[s] 에이 some_proces[s]방지하는 것 grep자체를 반환에서.

some_process실행 중이 면 "1"반향이 발생합니다. 그러나 some_process실행 중이 아니면 아무 것도 에코되지 않습니다.



답변

명시 적으로 확인할 필요가 없습니다 $?. 그냥 해:

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

이것은 에코 실패에 의존하므로 확실히 보장되지는 않습니다. 이것을 작성하는보다 안정적인 방법은 다음과 같습니다.

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무시 grepps출력과 동시에 라인을 계산합니다.

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


답변

다음 &&||같이 and 연산자를 최대한 활용할 수 있습니다 .

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


답변

pgrep -q some_process && echo 1 || echo 0

여기에 더 많은 oneliners


답변