如何在while循环中检查bash函数的结果是否是特定的字符串



(我不是linux爱好者(,我想在服务更新(大约需要10分钟(时检查服务的状态,以确保它成功。我使用一个函数来运行状态命令,同时循环如下:

get_status() { echo ...my command runs here and return the statue; }

我可以简单地获得类似$(get_status)的状态。现在我想看看情况如何并采取行动:

while $(get_status) == "PENDING"; do echo retrying... && sleep 5; done

我尝试过不同的方法,比如单括号/双括号,但无法使while比较正常工作?有人能帮忙吗?

while循环对比较测试一无所知。它只知道如何检查命令的退出状态,而$(get_status) == "PENDING"不是命令。所需的方括号用于test命令或bash条件表达式命令。

while test "$(get_status)" = "PENDING"; do

# [ is a synonym for test, with the added requirement that
# there be a final argument ] to complete the illusion of
# syntax.
while [ "$(get_status) = "PENDING" ]; do

while [[ $(get_status) == "PENDING" ]]; do

在前两种情况下,=优选作为test/[的正确等式运算符。在最后一种情况下,可以使用==,并且可以在$(get_status)周围去掉引号,因为在[[ ... ]]中的展开中不执行分词或文件名生成。(在所有三种情况下,引号都可以放在字面单词PENDING周围,但由于超出本问题范围的原因,对于[[ ... ]]内部的一些右侧自变量来说可能仍然是必要的。(

相关内容

最新更新