Обратите внимание, что это личное мнение; воспринимайте это с недоверием.
Если команда умещается, скажем, в 80 символов, используйте один вкладыш -. С длинными командными строками трудно работать. Существует также проблема повторения, см. #2
Если вам нужно запустить команду (s )более одного раза, используйте сценарий. В противном случае используйте один вкладыш -при условии соблюдения условия #1.
Вы также можете проверить наличие открытого tcp-порта 22 с помощью nmap.
nmap -p 22 192.168.1.0/24 -oG - | grep -oP "Host: \K[^ ]+(?=.* 22/open/tcp.*)"
Добро пожаловать в 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 :, для каждой проблемы есть множество решений