GNU/Linux >> Linux の 問題 >  >> Linux

If、else は grep にパイプされたコマンドに基づく

問題は、すべてを [ 内に配置していることです 、つまり test 指図。さらに、あなたの grep の使い方

必要なのは:

if prlctl list --info ubuntu-vm | grep -q "State: running"; then
   echo 'machine is running'
else
   echo 'machine is not running'
fi

-q の使い方に注意してください grep への引数として . STDOUT には何も書き込まず、一致が見つかった場合は 0 のステータスで終了し、そうでない場合は 0 以外のステータスで終了します。


「クリーン」ではありませんが、質問が達成しようとしたことに近い代替チェックです。

[ を覚えておいてください その核心は単なるコマンドです。他のすべてのコマンドと同様に、常に特定の数のパラメーターを受け入れ、0 (成功) または 1 (失敗) の終了ステータスで終了します。たとえば、2 つの文字列を比較する場合、構文は [ です。 、文字列 1、== 、文字列 2、] .

現在、これを if として使用しています 状態:

[ prlctl list --info ubuntu-vm | grep State == "State: running" ]

しかし、それはいくつかの点であいまいです。どのように [ 左側には実行するコマンドがあり、固定文字列ではないことを知っていますか? == であることをどうやって知るのでしょうか grep の単なる引数ではなく、文字列比較演算子です ? | であることをどうやって知るのでしょうか? コマンドを [ prlctl list --info ubuntu-vm に分割するのではなく、左側の値の一部です と grep State == "State: running" ] ?

したがって、左側も引用する必要があります。また、出力を比較したいので そのコマンドでは、世界の "prctl list --info..." 自体ではなく、$(…) が必要です。 オペレーター:

[ "$(prlctl list --info ubuntu-vm | grep State)" == "State: running" ]

Linux
  1. Grepコマンドを使用してファイル内のテキストを検索する方法

  2. Command Grepを使用して検索しますか?

  3. 開発者向けの10の実用的なGrepコマンドの例

  1. Linuxgrepコマンドの使用方法

  2. Linuxgrepコマンド

  3. grep:コマンドが見つかりません

  1. パイプコマンドはどのような順序で実行されますか?

  2. Linuxgrepコマンドを使用する

  3. デフォルトの色オプションをgrep