【问题标题】:bash ping ip run command on reply [duplicate]回复时的bash ping ip运行命令[重复]
【发布时间】:2013-12-09 13:25:32
【问题描述】:

我想检查两个 IP 地址上的 ping 回复,如果它们都正常,那么我执行一个命令。

例如:

ping 8.8.8.8 on response do
ping 8.8.4.4 on response 
execute command

是否有一个简单的 bash 脚本来执行此操作?

【问题讨论】:

  • 不知道用什么 bash 语法

标签: linux bash scripting ping


【解决方案1】:

根据manpage on ping

如果ping 根本没有收到任何回复数据包,它将以代码 1 退出。如果同时指定了数据包计数和截止日期,并且在截止日期到达时收到的数据包少于计数,它也会以代码 1 退出。在其他错误时以代码 2 退出。否则以代码 0 退出。这使得可以使用退出代码来查看主机是否处于活动状态。

因此,您可以依靠退出代码来确定是否继续执行脚本。

【讨论】:

    【解决方案2】:
    ping 8.8.8.8 -c 1
    if [ $? = 0 ]
    then
      echo ok
    else
      echo ng
    fi
    

    使用-c 1 选项仅尝试一次ping。随意更改为任何数字。

    $? 是上一条命令的退出代码。你可以参考ping的退出代码。

    将上面的代码sn-p修改成你想要的。

    【讨论】:

    • if语句中直接使用ping命令比使用test更简单:if ping -c 1 8.8.8.8; then
    【解决方案3】:

    Bash 命令在主机启动时返回是或否。

    尝试访问一个不存在的网站:

    eric@dev ~ $ ping -c 1 does_not_exist.com > /dev/null 2>&1; echo $?
    2
    

    尝试访问一个确实存在的网站:

    eric@dev /var/www/sandbox/eric $ ping -c 1 google.com > /dev/null 2>&1; echo $?
    0
    

    如果它返回 0,则主机被评估为响应。如果不是零,则确定主机不可访问或已关闭。

    【讨论】:

      猜你喜欢
      • 2016-04-25
      • 1970-01-01
      • 2018-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多