Einzeiler, um zu sehen, ob grep etwas zurückgegeben hat?

Einzeiler, um zu sehen, ob grep etwas zurückgegeben hat?

Ich versuche herauszufinden, ob es sich bei einem Gerät um ein ThinkPad handelt oder nicht, indem ich Folgendes verwende:

sudo dmidecode | grep ThinkPad

Ich möchte, dass das Endergebnis „true“ oder „false“ (oder 1/0) zurückgibt.

Ich denke, die Lösung könnte etwa so aussehen:

sudo dmidecode | grep -c ThinkPad | test xargs -gt 0

Aber ich bin nicht sicher, wie ich es xargshier richtig verwende.

Antwort1

Fügen Sie einfach die Exit-Statusprüfung danach hinzu grep. Standardmäßig wird immer der Exit-Status vom letzten Befehl der Pipeline abgerufen:

sudo dmidecode | grep -q ThinkPad; echo $?

Verwenden Sie es -q, um jegliche Ausgabe zu unterdrücken, grepda wir nur am Beendigungsstatus interessiert sind.


Sie können bei Bedarf die Befehlsgruppierung verwenden, dies ist hier jedoch etwas überflüssig:

sudo dmidecode | { grep -q ThinkPad; echo $? ;}

Antwort2

ifWenn Sie dies als Shell-Skript mit einer Prüfung verwenden möchten , verwenden Sie einfach -qdas von heemayl vorgeschlagene:

if sudo dmidecode | grep -q Thinkpad
then
    echo "I'm a Thinkpad"
fi

Da der ifBlock den Beendigungsstatus des Befehls prüft, können wir uns grepdirekt auf den Beendigungsstatus verlassen, anstatt $?ihn auszudrucken und mit etwas anderem zu vergleichen.

Antwort3

Inspiriert vonHeemayls Antwort:

sudo dmidecode | grep -q ThinkPad && echo true || echo false

Dies gibt „true“ zurück, wenn ThinkPad von grep gefunden wird, andernfalls „false“.

Antwort4

sudo dmidecode | grep -c ThinkPad | xargs test 0 -lt

Sie müssen den Befehl xargsund testdessen Operanden neu anordnen, um das gewünschte Ergebnis zu erzielen. Dies gibt einen wahren Status zurück, wenn ThinkPad-Zeilen ungleich Null (>0) enthalten.

Alternativ können Sie, wenn Sie die Operandenreihenfolge des Testbefehls beibehalten möchten, Folgendes tun:

sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0

Überprüfen Sie anschließend in beiden Befehlen den $?Wert der Variablen, um das Schicksal von greps Erfolg/Misserfolg wie folgt zu bestimmen:

if sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0; then
   echo "success hooray!"
else 
   echo nothing
fi

verwandte Informationen