首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅当ping关闭时,Bash才继续

问仅当ping关闭时,Bash才继续
EN

Stack Overflow用户
提问于 2017-03-07 22:24:02
回答 2查看 2.1K关注 0票数 0

我正在尝试创建一个脚本,该脚本仅在pinging没有响应时才会继续。

我遇到了两个主要问题。一个是它需要2个CTL-C命令来结束脚本,另一个问题是脚本永远不会结束,需要终止。

以下是我的尝试;

代码语言:javascript
复制
rc=0
until [ $rc -gt 0 ]
do
      ping 69.69.69.69 > /dev/null 2>&1
      rc=$?
done

## Here will be the rest of code to be executed

我觉得上面的这个非常接近,因为它需要2个CTL-C命令并继续。这是我在SO上找到的一些东西,但根本就不能工作。

代码语言:javascript
复制
counter=0
while [ true ]
do
  ping -c 1 69.69.69.69 > /dev/null 2>&1
    if [ $? -ne 0 ] then
        let "counter +=1"
    else
        let "counter = 0"
    fi
    if [ $counter -eq 10 ] then
        echo "Here should be executed once pinging is down"
    fi
done

非常感谢您的帮助,谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-07 22:38:13

试试这个:

代码语言:javascript
复制
while ping -c 1 -W 20 "$host" >& /dev/null
do
  echo "Host reachable"
  sleep 10  # do not ping too often
done
echo "Host unreachable within 20 seconds"
票数 3
EN

Stack Overflow用户

发布于 2017-03-07 22:41:33

这有几个问题:首先,if语句是错误的,使用以下格式

代码语言:javascript
复制
if [ $? -ne 0 ] then;

或此其他格式

代码语言:javascript
复制
if [ $? -ne 0 ]
then

其次,我怀疑您的ping命令没有超时

代码语言:javascript
复制
ping -c 1 -w 2 69.69.69.69 > /dev/null 2>&1

可能会有帮助

第三,您的循环将继续递增计数器,即使在10之后。

代码语言:javascript
复制
while [ $counter -le 10 ]

如果在x秒后ping超时而没有任何响应,您会对执行某项操作感到满意,那么可以将其全部压缩(在下面的示例中为10秒):

代码语言:javascript
复制
ping -c 1 -w 10 69.69.69.69 >/dev/null 2>&1 || echo "run if ping timedout without any response"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42650751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档