【问题标题】:Return value of ping [duplicate]ping的返回值[重复]
【发布时间】:2015-12-26 00:55:15
【问题描述】:

我已经完成了一个名为 hosts.txt 的文件,其中包含一些网站,以使用脚本测试每个网站上的 ping。我想用我的脚本做的是我想遍历包含不同网站的每一行,它应该判断网站是打开还是关闭(通过测量每个网站上的 ping 命令)

我的问题是我真的不知道如何获取 ping 命令的返回值,所以如果网站启动,它应该说“找到网站名称”或未找到。我一直在研究,也试过了!命令和 if 语句中的不同方式,但它们似乎都不起作用。

我的代码:

#!/bin/bash
echo
echo "Monitoring hosts from file hosts.txt ..."
echo
echo
egrep -v '^(#|$)' hosts.txt | while read line; do #put the egrep value
#which is the lines in hosts.txt, and loop through each one of them

        if [ ping $line ];then
        echo "$line is up"

        else
        echo "$line is not up"
        fi

done

echo

【问题讨论】:

标签: bash if-statement return-value


【解决方案1】:

您需要使用$? 特殊变量。

例如:

ping $line
pingResponse = $?

if [ $pingResponse -eq 0 ];then
    echo "$line is up"
else
    echo "$line is not up"
fi

【讨论】:

  • 因为如果我在循环中输入 ping $line,它当然会首先循环遍历这些行,你知道如何阻止它循环并直接进入 if 语句吗?我尝试了 ping -c 1 $line 并且它有效,但它显示 ping 以及文本“line is up”,但我只想显示文本。我也试过 ping -c 0 $line 但没用。
  • 只需将ping if 放入循环中即可。
  • 我确实已经将它们放在了循环中(如果我没有误解的话)。 egrep -v '^(#|$)' hosts.txt |而读线;做 #put egrep 值 #which 是 hosts.txt 中的行,然后循环遍历每一行 ping $line pingResponse=$? #sets return value to pingRespons if [ $true ];then echo "$line --> is up" 但它首先运行 ping $line,这是它不应该做的。
  • 为什么不先ping?如果您不这样做,那么$pingResponse 的 ping 值将变为 $line 的前一个值。我认为目前的逻辑是正确的。如果不是,那么我认为您将不得不在一个新问题中解释您的问题。
【解决方案2】:

您可以测试布尔值,例如:

[[ `ping  $line` ]]

.

   #!/bin/bash
    echo
    echo "Monitoring hosts from file hosts.txt ..."
    echo
    echo
    egrep -v '^(#|$)' hosts.txt | while read line; do #put the egrep value
    #which is the lines in hosts.txt, and loop through each one of them

            if [[ `ping $line` ]];then
            echo "$line is up"

            else
            echo "$line is not up"
            fi

    done

【讨论】:

  • 但是,这不适用于我在 hosts.txt 中的所有网站。它显示“线路已上线”。 while循环可能有问题
  • 我尝试了几个不正确的网站,如“www.67yuoi.com”,并按预期工作.......hmmm......
  • 我的错误,我在语句中使用'而不是`,但是现在当我这样尝试时,输出在显示第一行“从文件hosts.txt监控主机... ” 。我今天开始使用 bash 脚本,因此我没有那么有经验,但我尽力解决问题。
  • 我会建议您是否使用 ping -c 5 其中 -c 表示 ping 的次数。如果您不指定此选项,它将继续无限地 ping 一个网站,而不是退出这样您就可以确定它是否成功.....
  • 我尝试使用 -c 1 并且它可以工作,但是对于那些不存在的网站,它还会打印一条错误消息“ping:未知主机 www.67yuoi.com”。但我认为代码很好,因为它可以完成工作。最后一件事,如果您能通过编辑您的第一条评论或回答此评论来解释布尔值的工作原理,我将不胜感激。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
  • 2018-03-01
  • 2023-03-06
  • 2021-12-05
相关资源
最近更新 更多