我想用脚本检索所有连接的主机:
for i in {1..9}
do
ping -c 1 -w 1 8.8.8.$i | grep ' 0%'
done
所以我想使用 if 添加条件,这将测试每个 ping (使用管道 grep )的输出是否为是否为空,如果它不为空,则主机已启动。
干杯
p.s:我想避免使用文件
答案 0 :(得分:1)
使用ping
返回码确定机器的状态。
for i in {1..9}
do
ping_status=$(ping -c 1 8.8.8.$i &> /dev/null && echo success || echo fail)
if [ $ping_status = success ]
then echo 'machine is up and running'
else
echo 'machine is down'
fi
done
答案 1 :(得分:1)
只需检查ping命令的状态:
for i in {1..9}
do
if ping -c 1 -w 1 8.8.8.$i >/dev/null; then
echo "$i alive";
else
echo "$i dead"
fi
done
答案 2 :(得分:0)
How to set a variable to the output from a command in Bash?
for i in {1..9}
do
out="$(ping -c 1 -w 1 8.8.8.$i | grep ' 0%')"
if [ -z "$out" ]; then
# output empty
fi
done
答案 3 :(得分:0)
你可以在case / esac中使用glob匹配。这避免了昂贵的前叉grep
。
for i in {1..9}; do
case $(ping -c 1 8.8.8.$i) in
(*" 0%"*)
echo something
;;
(*)
echo something else
;;
esac
done
答案 4 :(得分:0)
您可以像GNU Parallel
这样快速地执行此操作:
parallel -j 64 -k 'ip=8.8.8.{}; ping -c 1 -t 1 $ip >/dev/null 2>&1; [ $? -eq 0 ] && echo $ip' ::: {1..254}
或者您可以像这样使用nmap
:
nmap -sP 8.8.8.* | tr -d "()" | awk '/Nmap scan report/{h=$NF} /Host is up/{print h}'