GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wenn, sonst basierend auf dem an grep geleiteten Befehl

Das Problem ist, dass Sie alles in [ einfügen , also die test Befehl. Außerdem Ihre Nutzung von grep ist kaputt.

Alles, was Sie brauchen, ist:

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

Beachten Sie die Verwendung von -q als Argument für grep . Es schreibt nichts nach STDOUT und beendet sich mit einem Status von 0, wenn die Übereinstimmung gefunden wird, und andernfalls ungleich Null.


Eine alternative Überprüfung, weniger "sauber", aber näher an dem, was die Frage erreichen wollte.

Denken Sie daran, [ im Kern ist es nur ein Befehl. Es akzeptiert immer eine bestimmte Anzahl von Parametern und beendet sich wie alle anderen Befehle mit dem Exit-Status 0 (Erfolg) oder 1 (Fehler). Wenn Sie beispielsweise zwei Zeichenfolgen vergleichen, lautet die Syntax [ , Zeichenfolge 1, == , Zeichenfolge 2, ] .

Im Moment verwenden Sie dies als if Bedingung:

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

Aber es ist in mehrfacher Hinsicht mehrdeutig. Wie würde [ Wissen Sie, dass Sie auf der linken Seite einen auszuführenden Befehl und keine feste Zeichenfolge haben? Woher weiß es, dass == ist der Zeichenfolgenvergleichsoperator und nicht nur ein Argument für grep ? Woher weiß es, dass | ist Teil des linken Werts, anstatt den Befehl in [ prlctl list --info ubuntu-vm zu trennen und grep State == "State: running" ] ?

Also muss auch die linke Seite zitiert werden. Außerdem möchten Sie die Ausgabe vergleichen dieses Befehls, statt der Welten "prctl list --info..." selbst, benötigen Sie den $(…) Betreiber:

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

Linux
  1. So verwenden Sie den Linux-Grep-Befehl

  2. So verwenden Sie den Grep-Befehl, um Text in Dateien zu finden

  3. In welcher Reihenfolge werden weitergeleitete Befehle ausgeführt?

  4. grep:Befehl nicht gefunden

  5. Grep-Standardfarboption

So schließen Sie den Grep-Befehl unter Linux aus

So verwenden Sie den grep-Befehl unter Debian 10

So verwenden Sie grep unter Linux

Grep-Befehl in Linux (mit Beispielen)

Grep-Befehl unter Linux/UNIX

Verwendung des grep-Befehls unter Linux