Ответы:
Используйте [[
условную конструкцию 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. С помощью-q
grep ничего не выводится и прекращает поиск после первого совпадения.