GNU/Linux >> Znalost Linux >  >> Linux

If, else na základě příkazu přesměrovaného do grep

Problém je v tom, že to všechno dáváte do [ , tj. test příkaz. Navíc vaše použití grep je rozbitý.

Vše, co potřebujete, je:

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

Všimněte si použití -q jako argument pro grep . Nezapíše nic do STDOUT a skončí se stavem 0, pokud je nalezena shoda, a jinak nenulovou.


Alternativní kontrola, méně „čistá“, ale blíže tomu, čeho se otázka snažila dosáhnout.

Pamatujte, že [ v jádru je jen příkaz. Vždy přijímá určitý počet parametrů a ukončí se buď se stavem ukončení 0 (úspěch) nebo 1 (selhání), stejně jako všechny ostatní příkazy. Když například porovnáváte dva řetězce, syntaxe je[ , řetězec 1, == , řetězec 2, ] .

Právě teď to používáte jako if podmínka:

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

Ale je to v několika ohledech nejednoznačné. Jak by [ víte, že vlevo máte příkaz ke spuštění a ne pevný řetězec? Jak to může vědět, že == je operátor porovnání řetězců, spíše než jen argument pro grep ? Jak to může vědět, že | je součástí hodnoty na levé straně, spíše než oddělení příkazu do [ prlctl list --info ubuntu-vm a grep State == "State: running" ] ?

Takže levá strana musí být také citována. Také proto, že chcete porovnat výstup tohoto příkazu, spíše než samotný světový "prctl list --info...", potřebujete $(…) operátor:

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

Linux
  1. Jak používat příkaz Grep k vyhledání textu v souborech

  2. Použít příkaz Grep a vyhledat?

  3. Použijte příkaz Linux grep

  1. Jak používat Linuxový příkaz grep

  2. grep:příkaz nenalezen

  3. Výchozí barevná možnost Grep

  1. V jakém pořadí se spouštějí zřetězené příkazy?

  2. 10 praktických příkladů příkazů Grep pro vývojáře

  3. Linuxový příkaz grep