2017-07-15 88 views
0

我只是想写一个小脚本来查看某些IP地址是否在线,作为我的一个想法的链接,但我根本不知道什么bash,想知道有没有人能帮助我。这是有一个IP地址ping通的2倍,如果结果是说从Bash中的命令中获取输出

--- 127.0.0.1 ping statistics --- 
2 packets transmitted, 0 received, 100% packet loss, time 1007ms 

我会把它想echo "OFFLINE"去到执行ping下一个IP地址,而如果结果是说

--- 127.0.0.1 ping statistics --- 
2 packets transmitted, 2 received, 0% packet loss, time 1001ms 

我希望得到echo "ONLINE"并继续到下一个IP地址。

那么是否有任何方法来获取ping的输出并使用它来确定回显?

回答

2

您可以使用ping的退出状态。如果能ping通目标,将返回0(即成功),否则返回1。所以,你可以做

if ping -c 2 -q host1 &>/dev/null; then 
    echo "ONLINE" 
else 
    echo "OFFLINE" 
fi 

,但如果你想捕捉的命令,你可以使用命令替换像

ping_output="$(ping -c2 host1)" 

其中命令的内部$(...)输出将被保存在变量的输出,这里命名ping_output

,或者如果你想使用grep,看看是否出现串在输出中你可以管它:

if ping -c 2 host1 | grep -q " 0% packet loss"; then 
    echo ONLINE 
else 
    echo OFFLINE 
fi 

我们使用-q到grep,所以它不会打印匹配

+0

这解决了我的问题行了,谢谢。 – John