Nmap проверяет, открыт ли порт в bash

Это былоошибкой в ​​gtk3, но уже исправлено. Если вы обновите систему и перезапустите ее, буфер обмена снова заработает.

1
12.08.2017, 17:10
3 ответа

Проблема в том, что [[$NMAP | grep "Host is up" -ne ""]]очень далек от корректного синтаксиса bash. Сообщения об ошибках не говорят вам, как именно это исправить, но они намекают на то, что что-то серьезно не так.

Чтобы проверить, содержит ли строка подстроку, вы можете либо использовать оператор ==в условном выражении, или конвейер через grep (, который не включают условное выражение ). С grep вы не запускаете $NMAPкак команду, вы хотите передать это как входные данные для grep, поэтому вам нужно echoего в канал. Передайте -qв grep, так как вас интересует только его статус возврата, а не вывод.

if echo "$NMAP" | grep "Host is up"  && echo "$NMAP" | grep "closed"; then …

С условным выражением:

if [[ $NMAP == *"Host is up"* || $NMAP == *"closed"* ]]; then …

Обязательно прочтите Запутался в операторах [[ vs [ vs (vs ((, которые объясняют условные выражения и то, что они не являются единственным способом проверить истинность условия. Кроме того, прочтите Почему мой сценарий оболочки забивается пробелами или другими специальными символами?

2
27.01.2020, 23:14
nmap -p 1700 router.eu.thethings.network

Будет напечатано «Host is up», если сеть хоста работает и на порту ничего не прослушивается. Используйте ncвместо:

if nc -w1 -z router.eu.thethings.network 1700; then
  echo "Port is listening"
else
  echo "Port is not listening"
fi
6
27.01.2020, 23:14

Существует пример отображения Host is up, когда grepуспех и Host is down, когда grepничего не возвращает:

NMAP=$(nmap -p 1700 router.eu.thethings.network)
(NMAP$ | grep "Host is up") &>/dev/null && echo "Host is up" || echo "Host is down"
0
27.01.2020, 23:14

Теги

Похожие вопросы