Wie kann ich in einer Bash-Zeile einen Exit-Status von 0 zurückgeben, wenn die Ausgabe von /usr/local/bin/monit --versionnicht genau enthält, 5.5und 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 --versionnicht genau enthält, 5.5und einen Exit-Status von 1, wenn dies der Fall ist?
Antworten:
! /usr/local/bin/monit --version | grep -q 5.5
( grepGibt den Exit-Status 0 zurück, wenn eine Übereinstimmung gefunden wird, und andernfalls 1. Die -qOption "leise" weist an, keine gefundene Übereinstimmung zu drucken. Mit anderen Worten, grepdas 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 grepkö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.5plus plus null oder mehr Zeichen.)
/usr/local/bin/monit --versionFehlschlags wiederzugeben?
monit --versionWert 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 -qanstatt nackt grep? In diesem Fall könnten Sie etwas vereinfachen monit --version | grep -q 5.5 || (monit --version; false). Und - monit --versiondruckt 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 yesdruckt nichts als [[ "5a5" =~ 5.5 ]] && echo yesja drucken. Die zitierte Version funktioniert in zsh, aber nicht in bash.