인쇄하고 싶어요방화벽-cmd--상태변수의 상태 - $STAT
그런 다음 $STAT 변수를 "실행되지 않음" 문자열과 비교합니다.
그러나 변수 내부에 공백이 있기 때문에 비교는 false를 반환합니다.
Bash에서 주기적 만료를 수행하는 방법을 제안하십시오.
따라서 변수에 "실행되지 않음"이 포함되어 있는지 확인하여 에코를 통해 "실행되지 않음"을 인쇄할 수 있습니다.
# firewall-cmd --state
not running
STAT=` firewall-cmd --state `
echo $STAT
not running
[[ $STAT = "not running" ]] && echo "not running"
no output
답변1
이것은 잘 작동합니다:
$ stat=$(echo "not running")
$ [[ $stat = "not running" ]] && echo yes
yes
그러나 변수에 선행 또는 후행 공백이 있으면 작동하지 않습니다. 그러나 패턴 일치 또는 정규식 일치를 사용하여 재정의할 수 있습니다.
$ stat=$(echo " not running ")
$ [[ $stat = *"not running"* ]] && echo yes
yes
$ [[ $stat =~ "not running" ]] && echo yes
yes
둘 다 변수에서 문자열을 검색합니다 not running
. 첫 번째 별표는 선행 또는 후행 문자를 명확하게 나타냅니다. 두 번째는 기본적으로 문자열의 어느 곳에서나 일치하는 항목을 찾는 정규식 일치입니다.
정규식을 사용하여 선행 또는 후행 공백을 명시적으로 일치시키려면 가장 쉬운 방법은 정규식을 변수에 넣는 것입니다. $pattern
이어야 한다인용되지 않음특정 조건에서.
$ pattern="^ *not running *$"
$ [[ $stat =~ $pattern ]] && echo yes
yes
(여기에는 임의의 공백이 아닌 추가 공백 문자만 있을 수 있다고 가정합니다.)
답변2
따옴표를 사용해야 합니다.
출력이 이면 명령은 firewall-cmd --state
변수 를 문자열로 설정한 다음 실행을 시도합니다 .not running
STAT=$( firewall-cmd --state )
STAT
not
running
당신이하고 싶은 일은 :
STAT="$( firewall-cmd --state )"
변수를 사용하지 않고 이 모든 작업을 한 번에 수행할 수 있습니다.
if [[ "not running" = "$( firewall-cmd --state )" ]]; then
echo "It's not running"
else
echo "It's running"
fi