Odpowiedzi:
Użyj [[
konstrukcji warunkowej bash i preferuj konwencję podstawiania poleceń $(
<command> )
. Dodatkowo [[
zapobiega dzieleniu słów na wartości zmiennych, dlatego nie ma potrzeby cytowania bitu zastępowania poleceń.
if [[ $(netstat -lnp | grep ':8080') = *java* ]]; then
echo "Found a Tomcat!"
fi
Inną alternatywą jest po prostu przetestowanie samego statusu wyjścia grep
, który zwróci false (1), jeśli nie było dopasowania, i true (0), jeśli było, nie używając [
polecenia.
if netstat -lntp | grep ':8080.*java' > /dev/null; then
echo "Found a Tomcat!"
fi
Przekierowanie do / dev / null ma na celu zapobieganie również drukowaniu znalezionej linii na ekranie.
Możesz zrobić bardziej precyzyjne, ale proste, dopasowanie z awk.
if netstat -lnp | awk '$4 ~ /:8080$/ && $7 ~ /java/ {exit(0)} END {exit(1)}'; then …
Aby ściślej dopasować strukturę polecenia, przenośny sposób dopasowywania symboli wieloznacznych na łańcuchu w powłoce polega na case
konstrukcji.
case "$(netstat -lnp | grep ':8080')" in
*java*) echo "Found a Tomcat!";;
esac
Kolejny przykład z prawdziwego świata :)
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
zrobić? Czy to niestandardowa funkcja lub alias w twoim systemie?
usr/bin/HEAD → lwp-request
. I wydaje się, że to żądanie lwp . Nie jestem pewien, jak do tego doszedłem (na pewno nie ręcznie), czy domyślnie wszystko tam jest. Nie wydaje się być małymi literami usr/bin/head
, jak również .
-q
opcję grep zamiast przekierowywania do / dev / null. Dzięki-q
grep nic nie wypisuje i przestaje szukać po pierwszym dopasowaniu.