Відповіді:
Використовуйте [[умовну конструкцію bash і віддавайте перевагу конвенції про заміну команди $(<command> ). Крім того, [[запобігає розбиткові слів на змінні значення, тому немає необхідності цитувати біт підстановки команди.
if [[ $(netstat -lnp | grep ':8080') = *java* ]]; then
echo "Found a Tomcat!"
fi
Інша альтернатива - просто перевірити статус виходу самого grepсебе, який поверне помилковий (1), якщо не було збігу, а true (0), якщо такий був, не використовуючи [команду.
if netstat -lntp | grep ':8080.*java' > /dev/null; then
echo "Found a Tomcat!"
fi
Перенаправлення на / dev / null - це також для запобігання друку знайденої лінії на екрані.
Ви можете зробити більш точне, але просте, збігаючись з awk.
if netstat -lnp | awk '$4 ~ /:8080$/ && $7 ~ /java/ {exit(0)} END {exit(1)}'; then …
Щоб більш чітко відповідати структурі вашої команди, портативний спосіб узгодження підстановки на рядку в оболонці - це caseконструкція.
case "$(netstat -lnp | grep ':8080')" in
*java*) echo "Found a Tomcat!";;
esac
Ще один приклад у реальному світі :)
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? Це спеціальна функція чи псевдонім у вашій системі?
usr/bin/HEAD → lwp-request. І lwp-запит видається таким . Не впевнений, як я прийшов до цього (не впевнено вручну), якщо це все за замовчуванням. Там , як видається, в нижньому регістрі , usr/bin/head а також .
-qопцію grep замість перенаправлення на / dev / null. З-q, grep нічого не виводить і припиняє пошук після першого матчу.