Wie kann ich in einer Bash-Zeile einen Exit-Status von 0 zurückgeben, wenn die Ausgabe von /usr/local/bin/monit --version
nicht genau enthält, 5.5
und einen Exit-Status von 1, wenn dies der Fall ist?
Wie kann ich in einer Bash-Zeile einen Exit-Status von 0 zurückgeben, wenn die Ausgabe von /usr/local/bin/monit --version
nicht genau enthält, 5.5
und einen Exit-Status von 1, wenn dies der Fall ist?
Antworten:
! /usr/local/bin/monit --version | grep -q 5.5
( grep
Gibt den Exit-Status 0 zurück, wenn eine Übereinstimmung gefunden wird, und andernfalls 1. Die -q
Option "leise" weist an, keine gefundene Übereinstimmung zu drucken. Mit anderen Worten, grep
das einzige, was Sie möchten, ist die Rückgabe -Wert. Der !
am Anfang kehrt den Exit-Status der gesamten Pipeline um.)
Bearbeitet, um hinzuzufügen: Alternativ grep
können Sie schreiben , wenn Sie dies in "pure Bash" tun möchten (anstatt anzurufen ):
[[ $(/usr/local/bin/monit --version) != *5.5* ]]
( [[...]]
wird in §3.2.4.2 "Bedingte Konstrukte" des Bash-Referenzhandbuchs erläutert . *5.5*
ist genau wie in Fileglobs: null oder mehr Zeichen plus 5.5
plus plus null oder mehr Zeichen.)
/usr/local/bin/monit --version
Fehlschlags wiederzugeben?
monit --version
Wert anzeigen , während er noch mit dem Status 1 beendet wird?
monit --version; monit --version | grep -q 5.5
; aber ich vermute, du wolltest verwenden grep -q
anstatt nackt grep
? In diesem Fall könnten Sie etwas vereinfachen monit --version | grep -q 5.5 || (monit --version; false)
. Und - monit --version
druckt jemals mehrere Zeilen? Wenn nicht, können Sie auf einfach vereinfachen ! monit --version | grep -v 5.5
.
[ $(/usr/local/bin/monit --version) == "5.5" ]
zB-1: auf Erfolg prüfen
[ $(/usr/local/bin/monit --version) == "5.5" ] && echo "OK"
zB-2: auf Fehler prüfen
[ $(/usr/local/bin/monit --version) == "5.5" ] || echo "NOT OK"
oder, um nur zu überprüfen, ob die Ausgabe Folgendes enthält 5.5
:
[[ $(/usr/local/bin/monit --version) =~ "5.5" ]] || echo "NOT OK"
[[ "5a5" =~ "5.5" ]] && echo yes
druckt nichts als [[ "5a5" =~ 5.5 ]] && echo yes
ja drucken. Die zitierte Version funktioniert in zsh, aber nicht in bash.