限制bash while循环到10次重试

fre*_*rik 7 bash

这个while循环如何限制为最多10次重试?

#!/bin/sh
while ! test -d /somemount/share/folder
do
    echo "Waiting for mount /somemount/share/folder..."
    sleep 1
done
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 15

保持柜台:

#!/bin/sh

while ! test -d /somemount/share/folder
do
    echo "Waiting for mount /somemount/share/folder..."
    ((c++)) && ((c==10)) && break
    sleep 1
done
Run Code Online (Sandbox Code Playgroud)

  • 如果您不打算声明和/或取消设置变量`c`,那么您应该考虑将整个循环放在子shell或函数中. (3认同)

cho*_*oba 7

您还可以使用for循环并在成功时退出:

for try in {1..10} ; do
    [[ -d /somemount/share/folder ]] && break
done
Run Code Online (Sandbox Code Playgroud)

问题(也存在于其他解决方案中)是,一旦循环结束,您不知道它是如何结束的 - 目录是否找到,或者计数器是否耗尽?


小智 6

我想发表评论,但我没有足够的积分。无论如何我都想做出贡献。因此,即使 while 循环嵌套在另一个循环中,它也能正常工作。在中断之前,c 变量被重置为零。感谢 @anubhava 提出了最初的解决方案。

#!/bin/sh

while ! test -d /somemount/share/folder
do
    echo "Waiting for mount /somemount/share/folder..."
    ((c++)) && ((c==10)) && c=0 && break
    sleep 1
done
Run Code Online (Sandbox Code Playgroud)