Ответы:
Используйте [[условную конструкцию bash и предпочитайте соглашение о подстановке команд $(<command> ). Кроме того, [[предотвращает разбиение слов по значениям переменных, поэтому нет необходимости заключать бит подстановки в команду.
if [[ $(netstat -lnp | grep ':8080') = *java* ]]; then
echo "Found a Tomcat!"
fi
Другой альтернативой является простое тестирование состояния выхода самого grepсебя, которое вернет false (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? Это пользовательская функция или псевдоним в вашей системе?
-qопцию grep вместо перенаправления в / dev / null. С помощью-qgrep ничего не выводится и прекращает поиск после первого совпадения.