印刷したいファイアウォール-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
。最初のアスタリスクは、先行文字または末尾文字を明確に示しています。 2番目は基本的に、文字列のどこにでも一致するものを見つける正規表現の一致です。
正規表現を使用して先行または末尾のスペースを明示的に一致させるには、最も簡単な方法は正規表現を変数に入れることです。$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