linux - 仅当 ping 中断时 Bash 才继续

标签 linux bash loops if-statement

我正在尝试创建一个仅在 ping 无响应时才会继续的脚本。

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

这是我的尝试;

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 上找到的东西,但根本无法工作。

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

非常感谢任何帮助,谢谢。

最佳答案

试试这个:

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"

关于linux - 仅当 ping 中断时 Bash 才继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42650751/

相关文章:

linux - 如何使用Linux命令将 '1.jpg'等文件夹的所有文件重命名为 '1 hello.jpg'?

loops - elisp: do 子句语法错误

c++ - 我的循环不会循环

将 ARP 表复制到数组

linux - 订阅/sys 中的文件

c - 在名称管道开放系统的情况下是阻塞调用还是读写?

Bash:以字符串格式设置环境变量

linux - 如何检查bash脚本中$1是否包含特殊字符?

linux - 打印大于两个字段的行

c++ - 头尾打印比检查结束或开始更有效吗?