이 스크립트는 잘 실행됩니다.
stat1=$(systemctl list-units --type=service | grep gravity | grep gcr | awk {'print $1'} | xargs systemctl status | grep Active | awk {'print $2'})
echo "$stat1"
if [ $stat1 == 'active' ]
then
echo " >> Gravity service is running ..."
else
echo " >> Gravity service not running ..."
fi
이건 아니야
stat2=$(gravity status | grep status | awk {'print $3'})
echo "$stat2"
if [ $stat2 == 'active' ]
then
echo " >> Gravity service is running ..."
else
echo " >> Gravity service not running ..."
fi
이들 사이의 유일한 차이점은 이 스크립트의 stat 변수에 대한 입력은 흰색이고 다른 하나는 녹색이라는 것입니다. 또한 if [[ ]]를 사용하고 stat var의 ''를 ""로 변경해 보았지만 작동 방법을 이해하도록 도와주세요.
이것을 시도했습니다 :
결과는 동일하게 유지됩니다.
답변1
is-active
다음 쿼리 를 사용하는 것이 좋습니다.systemctl
systemctl is-active gravity
현재 서비스 상태를 반환하거나 다음을 수행합니다.
sytemctl --quiet is-active gravity
0
활성 상태이고 0이 아닌 경우 종료합니다. 이는 다음을 사용할 수 있음을 의미합니다.
if sytemctl --quiet is-active gravity; then
echo " >> Gravity service is running ..."
else
echo " >> Gravity service not running ..."
fi
~에서수동:
활성 모드에서...
지정된 장치 중 활성 상태(즉, 실행 중)가 있는지 확인합니다. 하나라도 활성화되어 있으면 종료 코드 0을 반환하고, 그렇지 않으면 0이 아닌 값을 반환합니다. --quiet를 지정하지 않으면 현재 장치 상태도 표준 출력으로 인쇄됩니다.
이제 질문 자체로 넘어갑니다.
녹색은 문자열의 일부로 전달되므로 일치가 실패합니다. 이것을 다음과 비교해보세요:
if [ "$(echo 1 | grep --color=yes 1)" = 1 ]
then echo equal
else echo different
fi
#different
if [ "$(echo 1 | grep --color=no 1)" = 1 ]
then echo equal
else echo different
fi
#equal
[ stra == strb ]
테스트를 통해 첫 번째 사례가 어떻게 다른지, 두 번째 사례가 동일한지 확인하세요.정확히문자열을 일치시킵니다.
정규식 일치를 수행하면 이 문제를 피할 수 있습니다.
if [[ $(echo 1 | grep --color=yes 1) =~ 1 ]]
then echo equal
else echo different
fi
#equal
그러나 정규식은 색상 코딩과 일치할 수 있습니다(그러나 "active"와 같은 단어의 경우에는 일치하지 않음). NET [[ ]]
에서 확장된 테스트가 어떻게 필요한지 참고하세요 bash
.
예를 들어 일부 프로그램은 색상을 파이프에 전달하지 않을 만큼 똑똑 grep
하지만 강제로 수행할 수도 있습니다.
echo 1 | grep 1 | cat -A
1$
echo 1 | grep 1 --color=yes | cat -A
^[[01;31m^[[K1^[[m^[[K$
1
짙은 붉은 색이 이렇게 생겼습니다 . 자세히 알아보기여기 색깔이 이상해.