2013-02-18 59 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