将bash while循环限制为10次重试
如何将此while循环限制为最多10次重试将bash while循环限制为10次重试,bash,Bash,如何将此while循环限制为最多10次重试 #!/bin/sh while ! test -d /somemount/share/folder do echo "Waiting for mount /somemount/share/folder..." sleep 1 done 保留柜台: #!/bin/sh while ! test -d /somemount/share/folder do echo "Waiting for mount /somemount/sh
#!/bin/sh
while ! test -d /somemount/share/folder
do
echo "Waiting for mount /somemount/share/folder..."
sleep 1
done
保留柜台:
#!/bin/sh
while ! test -d /somemount/share/folder
do
echo "Waiting for mount /somemount/share/folder..."
((c++)) && ((c==10)) && break
sleep 1
done
您还可以使用
for
循环,并在成功时退出该循环:
for try in {1..10} ; do
[[ -d /somemount/share/folder ]] && break
done
问题(也存在于其他解决方案中)是,一旦循环结束,您就不知道它是如何结束的-是找到了目录,还是计数器耗尽了?我会发表评论,但我没有足够的分数来说明这一点。无论如何,我都想贡献自己的力量。 因此,即使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
您可以使用带有计数器限制的
直到(而不是“while!”…break):
COUNT=0
ATTEMPTS=10
until [[ -d /somemount/share/folder ]] || [[ $COUNT -eq $ATTEMPTS ]]; do
echo -e "$(( COUNT++ ))... \c"
sleep 1
done
[[ $COUNT -eq $ATTEMPTS ]] && echo "Could not access mount" && (exit 1)
注:
- 就像将计数器设置为变量一样,您可以设置var
条件=“[..]]”
,并使用直到eval$condition
使其更通用
- echo$((COUNT++)在打印时增加计数器
- 如果在函数内部运行,请使用“返回1”而不是“退出1”
((x++);如果[[x-eq 10]];那么break;fi
可以执行((c++)和((c==10))如果你不打算声明和/或取消设置变量<代码> C <代码>,那么你应该考虑把整个循环放在一个子shell或一个函数中。这不会是一样的吗?你怎么知道它是如何结束你的答案的?“JIDD:它会的。这就是为什么我使用了”和“也”。“.啊,对了,误读了,对不起!您可以添加[[-d/somemount/share/folder]]&&break&&echo“已成功装载”
来解决此问题:)@user3442743-中断必须是最后一个,否则将无法打印(即[[condition]]&&echo“已通过”&&break