📜  bash 运行直到成功或超时 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:29:35.877000             🧑  作者: Mango

Bash 运行直到成功或超时 - Shell-Bash

在编写 Shell 脚本时,有时需要等待某个操作完成后才能继续执行下面的操作。但是,某些操作可能不一定能够立即完成,需要等待一段时间。为了避免程序进入无限等待状态,我们可以在脚本中添加等待超时机制。

等待命令成功

下面是一个等待命令成功的示例:

#!/bin/bash
while ! command; do
    sleep 1
done

这个脚本会不断执行 command 命令,如果命令执行失败,则等待 1 秒钟,然后再次执行,直到命令成功为止。

等待一段时间

如果要等待一段时间而不是一直等待直到命令成功,可以使用 sleep 命令。例如,下面的脚本等待 10 秒钟:

#!/bin/bash
sleep 10
echo "done"
等待超时

如果我们想要等待某个操作完成,但是又不希望程序进入无限等待状态,可以使用超时机制。下面是一个等待命令成功或超时的示例:

#!/bin/bash

TIMEOUT=10  # 超时时间为 10 秒钟
INTERVAL=1  # 检查间隔为 1 秒钟

start=$(date +%s)  # 记录开始时间

while true; do
    if command; then
        break  # 如果命令成功,退出循环
    fi

    # 检查是否超时
    now=$(date +%s)
    elapsed=$(($now - $start))
    if [[ $elapsed -ge $TIMEOUT ]]; then
        echo "Timeout after ${TIMEOUT}s."
        exit 1
    fi

    sleep $INTERVAL  # 等待间隔
done

这个脚本会不断执行 command 命令,如果命令执行失败,则等待 1 秒钟,然后再次执行,直到命令成功或超时为止。如果超时,则脚本会输出错误信息并退出。

总结

在编写 Shell 脚本时,等待命令成功或等待一段时间是非常常见的操作。通过加入超时机制,我们可以避免程序进入无限等待状态,增加脚本的健壮性。