명령 실행 결과에 따라 if 문을 실행하는 방법

명령 실행 결과에 따라 if 문을 실행하는 방법

실행된 명령의 출력에서 ​​IF 문을 실행하려고 합니다. 이것이 내가 시도한 것이지만 작동하지 않습니다. 누구든지 이 작업을 수행하는 올바른 방법을 알고 있습니까?

if [ "`netstat -lnp | grep ':8080'`" == *java* ]; then
  echo "Found a Tomcat!"
fi

편집: 종료 코드를 캡처하여 이를 수행할 수 있는 방법이 있는지 궁금합니다.

답변1

bash [[조건부 구성을 사용하고 $(<command> )명령 대체 규칙을 선호합니다. 또한, [[변수 값의 단어 분할을 방지할 수 있으므로 명령 대체 비트를 인용할 필요가 없습니다.

if [[ $(netstat -lnp | grep ':8080') == *java* ]]; then
  echo "Found a Tomcat!"
fi

답변2

또 다른 대안은 명령을 사용하지 않고 단순히 자체 종료 상태를 테스트하여 grep일치하는 항목이 없으면 false(0이 아님)를 반환하고 일치하는 항목이 있으면 true(0)를 반환하는 것입니다 [.

if netstat -lntp | grep -q ':8080.*java'; then
    echo "Found a Tomcat!"
fi

답변3

더욱 간단하고,

netstat -lntp | grep ':8080.*java' > /dev/null && command

딱 한 가지만 하고 싶다면.

답변4

내 음악 플레이어가 열려 있는지, 그리고 열려 있을 때 노래가 재생되는지 확인하는 스크립트에서 수행하는 작업은 다음과 같습니다.

rbstatus=$(rhythmbox-client --print-playing)

pgrep -x rhythmbox >/dev/null && if [ "$rbstatus" = "-" ]; then
   echo "No music playing"
else
   rhythmbox-client --print-playing
fi || echo "Music player is Closed."

관련 정보