从Bash中的命令输出

时间:2017-07-15 11:22:14

标签: bash ping

我只是想写一个小脚本来查看某些IP地址是否在线作为我的想法的链接,我根本不知道什么,但我想知道是否任何人都可以帮助我。它的IP地址是2次,如果结果是

--- 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的输出并使用它来确定回显的内容?

1 个答案:

答案 0 :(得分:3)

您可以使用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所以它不会打印匹配的行