这个while循环如何限制为最多10次重试?
#!/bin/sh
while ! test -d /somemount/share/folder
do
echo "Waiting for mount /somemount/share/folder..."
sleep 1
done
答案 0 :(得分:13)
保留一个柜台:
#!/bin/sh
while ! test -d /somemount/share/folder
do
echo "Waiting for mount /somemount/share/folder..."
((c++)) && ((c==10)) && break
sleep 1
done
答案 1 :(得分:3)
您还可以使用for
循环并在成功时将其退出:
for try in {1..10} ; do
[[ -d /somemount/share/folder ]] && break
done
问题(在其他解决方案中也存在)是,一旦循环结束,你就不知道它是如何结束的 - 是找到目录,还是计数器耗尽了?
答案 2 :(得分:2)
我会评论,但我没有足够的分数。无论如何我想要贡献。 因此,即使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
答案 3 :(得分:1)
您可以使用until
(而不是“ 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)
注意:
condition="[[ .. ]]"
,然后使用until eval $condition
使其更通用。 echo $ {((COUNT ++))在打印时增加计数器。
如果在函数内部运行,请使用“返回1”代替“退出1”。