실행된 명령의 출력에서 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."