bash + compara a variável com espaços

0

Eu quero imprimir o status firewall-cmd --state na variável - $ STAT

e, em seguida, compare a variável $ STAT com a string "não em execução"

mas Comparison get false, é porque os espaços dentro da variável

por favor, conselhos sobre como fazer isso expirar regularmente

então eu vou checar se "não está rodando" contém na variável então vai imprimir o "não rodando" pelo echo

#  firewall-cmd --state
   not running
   STAT=' firewall-cmd --state '
   echo $STAT
   not running
   [[ $STAT = "not running" ]] && echo "not running"

   no output 
    
por yael 02.11.2017 / 18:51

2 respostas

1

Isso funciona bem:

$ stat=$(echo "not running")
$ [[ $stat = "not running" ]] && echo yes
yes

No entanto, se você tiver espaços iniciais ou finais na variável, isso não funcionará. Mas você poderia usar uma correspondência de padrão ou uma correspondência de expressão regular para cobrir isso:

$ stat=$(echo " not running ")
$ [[ $stat = *"not running"* ]] && echo yes
yes
$ [[ $stat =~ "not running" ]] && echo yes
yes

Ambos pesquisam a string not running dentro da variável. Os asteriscos no primeiro explicam explicitamente os caracteres iniciais ou finais. A segunda é a correspondência de regex que, por padrão, procura uma correspondência em qualquer lugar da string.

Para coincidir com os espaços iniciais ou finais explicitamente com um regex, é mais fácil colocar o regex em uma variável. $pattern deve estar sem aspas no condicional.

$ pattern="^ *not running *$"
$ [[ $stat =~ $pattern ]] && echo yes
yes

(Eu assumi apenas possíveis caracteres de espaço extra aqui, não espaços em branco arbitrários.)

    
por 02.11.2017 / 19:22
1

Você precisa usar aspas.

Se a saída de firewall-cmd --state for not running , o comando STAT=$( firewall-cmd --state ) definirá a variável STAT como a string not e tentará executar running .

O que você quer fazer é:

STAT="$( firewall-cmd --state )"

Você pode fazer tudo isso de uma vez sem usar uma variável:

if [[ "not running" = "$( firewall-cmd --state )" ]]; then
    echo "It's not running"
else
    echo "It's running"
fi
    
por 02.11.2017 / 19:00