2013-06-05 5 views
40

Ich schreibe ein Shell-Skript, und ich versuche zu überprüfen, ob die Ausgabe eines Befehls eine bestimmte Zeichenfolge enthält. Ich denke, dass ich wahrscheinlich Grep benutzen muss, aber ich weiß nicht wie. Weiß jemand?Überprüfen, ob die Ausgabe eines Befehls eine bestimmte Zeichenfolge in einem Shell-Skript enthält

+0

Muss der Befehl ausgeführt werden, nachdem die gesuchte Ausgabezeichenfolge generiert wurde, oder kann er zu diesem Zeitpunkt sofort geschlossen werden? (Ihre zwei Antworten unterscheiden sich in dieser Hinsicht in ihrer Semantik). –

Antwort

27

Testen der Rückgabewert von grep:

./somecommand | grep 'string' &> /dev/null 
if [ $? == 0 ]; then 
    echo "matched" 
fi 
+1

Danke! Das hat funktioniert. – user1118764

+2

Nur beachten Sie, dass zwischen der schließenden eckigen Klammer und der 0 ein Leerzeichen stehen muss. Ich kann das nicht bearbeiten. –

+1

Dieser Code funktioniert nicht bei allen POSIX-Shells: Der POSIX-Standard erfordert nur '=' als Vergleichsoperator, nicht '=='; siehe http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html –

86

Testing $? ist ein Anti-Muster

if ./somecommand | grep -q 'string'; then 
    echo "matched" 
fi 
+0

Danke dafür. – maxtuzz

+0

nette Arbeit hier! – marcusshep

+0

Perfekt danke, das hat einen Reiz für das, was ich machen wollte, funktioniert. – MitchellK

Verwandte Themen