Відповіді:
Використовуйте [[
умовну конструкцію 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 нічого не виводить і припиняє пошук після першого матчу.