Antworten:
Verwenden Sie das bash- [[
bedingte Konstrukt und bevorzugen Sie die $(
<command> )
-Befehlssubstitutionskonvention. Zusätzlich [[
verhindert somit von Variablenwerten Wort Spaltung besteht keine Notwendigkeit, den Befehl Substitution Bit zu zitieren ..
if [[ $(netstat -lnp | grep ':8080') = *java* ]]; then
echo "Found a Tomcat!"
fi
Eine andere Alternative besteht darin, einfach den Exit-Status von sich grep
selbst zu testen, der bei fehlender Übereinstimmung false (1) und bei fehlender Übereinstimmung true (0) zurückgibt, indem der [
Befehl nicht verwendet wird .
if netstat -lntp | grep ':8080.*java' > /dev/null; then
echo "Found a Tomcat!"
fi
Die Umleitung zu / dev / null soll verhindern, dass die gefundene Zeile auch auf dem Bildschirm ausgegeben wird.
Sie können präziser und dennoch einfacher mit awk zusammenarbeiten.
if netstat -lnp | awk '$4 ~ /:8080$/ && $7 ~ /java/ {exit(0)} END {exit(1)}'; then …
Um die Struktur Ihres Befehls genauer abzugleichen, können Sie den Platzhalterabgleich für eine Zeichenfolge in einer Shell auf übliche Weise mit dem case
Konstrukt durchführen.
case "$(netstat -lnp | grep ':8080')" in
*java*) echo "Found a Tomcat!";;
esac
Ein weiteres Beispiel aus der Praxis :)
if [[ $(HEAD mycompany-intranet.com | grep '200\ OK' | wc -l) = "1" ]]; then
echo doing some intranet settings (proxy, etc)
else
echo doing some work-at-home settings (proxy, etc)
fi
HEAD
das? Ist das eine benutzerdefinierte Funktion oder ein Alias auf Ihrem System?
usr/bin/HEAD → lwp-request
. Und die LWP-Anfrage scheint diese zu sein . Ich bin mir nicht sicher, wie ich dazu gekommen bin (nicht manuell sicher), oder ob es standardmäßig alles gibt. Es scheint auch Kleinbuchstaben usr/bin/head
zu geben .
-q
Option grep anstelle von / dev / null. Mit-q
gibt grep nichts aus und bricht die Suche nach dem ersten Treffer ab.