2013-02-18 60 views
1

我有一个条件来测试。我希望变量A等于变量B.它可能会在A等于B之前快速连续地进行一些测试。不过,我不希望它尝试超过10次。bash while while

A=1 
B=2 

while [ $A != $B ] 
do 
    echo "hi there" 
done 

所以,很显然,这只是要不断循环,除非一个永远等于B.以防万一是不会等于乙很快,我想限制的尝试次数。我在想这样的事情:

A=1 
B=2 

COUNT=0 
while [ "$COUNT" -le 10 ] 
do 
    while [ $A != $B ] 
    do 
     echo "hi there" 
     COUNT=`expr $COUNT + 1` 
    done 

done 

我在这里找到类似问题的答案,但不是这个。 谢谢!

+0

什么是修改'A'和/或'B',可以使他们平等? – chepner 2013-02-18 22:21:40

+0

嗯,不是那么重要,但是因为你们非常乐意帮助我......我正在同步一些数据,这些数据在同步开始和结束时间之间会发生变化。这是一件坏事。我需要确保整个事情完好无损,所以我需要两行显示相同字节大小的rsyncs。如果我手动执行此操作,我必须快速回击几次,才能使其完好无损。如果10次尝试后我无法得到它,那么出现问题。 – 2013-02-18 23:45:23

回答

0
A=1 
B=2 

COUNT=0 
while [ "$COUNT" -le 10 ] || [ $A != $B ] 
do 
    echo "hi there" 
    COUNT=`expr $COUNT + 1` 
done 

如果我理解正确,你不想做太多的循环,但一个循环有两个突破条件。

+0

该代码似乎没有做到这一点 - 永远循环。我需要它尝试最多10次才能使A等于B,然后可能会向我发送警告电子邮件或其他内容(需要确定)。当然,如果我在第四次尝试或第五次尝试时让A等于B,我想在那一刻停下来。 – 2013-02-18 21:57:16

+0

@ummm ....看看我的编辑。这是你想到的吗? – user000001 2013-02-18 22:08:31

+0

似乎仍然循环,但我得到了另一个有效的答案,谢谢! – 2013-02-18 22:20:40

0

while(和许多其他复合命令)可以合法嵌套。你的逻辑并不完全适合你想要完成的事情。

n= 
while [[ $a != "$b" && ++n -le 10 ]]; do 
    echo 'hi there' 
done 

对于纯粹数值比较,[[[不应在击使用。

for ((n = 0; a != b && ++n <= 10;)); do 
    ... 

有很多可能性。顺便说一句,除非您需要与古代的非POSIX Bourne shell兼容,否则绝对不要使用expr或反引号。

+0

那真是太美了。现在我需要看看它是如何工作的:) – 2013-02-18 22:14:44