Возвращает значение только из IP-адреса nmap и передает его в цикл в Bash

Обратите внимание, что это личное мнение; воспринимайте это с недоверием.

  1. Если команда умещается, скажем, в 80 символов, используйте один вкладыш -. С длинными командными строками трудно работать. Существует также проблема повторения, см. #2

  2. Если вам нужно запустить команду (s )более одного раза, используйте сценарий. В противном случае используйте один вкладыш -при условии соблюдения условия #1.

  3. Это очень субъективно, но да, я рассматриваю shell, Perl или awk в качестве -инструментов для одного -лайнера.
  4. См. #1, #2, #3.
1
27.11.2018, 03:17
2 ответа

Вы также можете проверить наличие открытого tcp-порта 22 с помощью nmap.

nmap -p 22 192.168.1.0/24 -oG - | grep -oP "Host: \K[^ ]+(?=.* 22/open/tcp.*)"
2
27.01.2020, 23:31

Добро пожаловать в unix.stackexchange!

xargsздесь твой друг.

Но сначала некоторые изменения в вашем скрипте:

$ cat test.sh
#!/bin/bash
echo "# This script checks if a remote device is alive"
va=$1 # passing it as an argument is the right thing to do here
echo "Checking Device "$va
if [ $(nc -z "$va" 22; echo $?) -eq 0 ]; then
    echo $va" is Online !"
else
    echo "Cannot proceed with remote connection device "$va" is Offline !"
fi

И теперь xargsмагия(%будет заменяться каждым адресом при каждом звонке):

$ nmap -sP 172.20.10.1-2 | awk '/is up/ {print up}; {gsub (/\(|\)/,""); up = $NF}' |xargs -I % bash test.sh %
# This script checks if a remote device is alive
Checking Device 172.20.10.1
Cannot proceed with remote connection device 172.20.10.1 is Offline !
# This script checks if a remote device is alive
Checking Device 172.20.10.2
Connection to 172.20.10.2 port 22 [tcp/ssh] succeeded!
172.20.10.2 is Online !

Вы также можете заменить bash test.sh %на echo ">>>%<<<", чтобы поэкспериментировать, что тогда произойдет.

Однако ответ Ipor Sircer короче для реализации.

Но, как всегда в Unix :, для каждой проблемы есть множество решений

0
27.01.2020, 23:31

Теги

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