2013-02-18 6 views
1

테스트 할 조건이 있습니다. 변수 A를 변수 B와 같게하려고합니다. A가 B와 같지 않으면 연속해서 몇 번의 테스트를 거쳐야 할 것입니다.하지만 10 번 이상 시도하지 않으려 고합니다.bash while while while

A=1 
B=2 

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

그래서 분명히 그건 그냥 이제까지 곧, 내가 시도의 수를 제한하려면 동일한 B 언제든지하지 않을 그냥 경우 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

+0

글쎄, 그건별로 중요하지 않지만, 너희들도 도와 줘서 기뻤다. 나는 동기화가 시작되는 시점과 끝나는 시점 사이에 변경 될 수있는 일부 데이터를 동기화하고있다. 그것은 나쁜 것입니다. 모든 것을 그대로 유지해야하므로 동일한 바이트 크기를 나타내는 두 개의 rsync가 연속적으로 필요합니다. 이 작업을 수동으로 수행하면 uparrow를 몇 번이나 빨리 눌러 원래대로 되돌려 야합니다. 내가 10 번 시도한 후에 그것을 얻을 수 없다면 뭔가 잘못되었다. –

답변

0
A=1 
B=2 

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

내가 제대로 이해한다면 너는 너무 많은 루프를하고 싶지는 않지만 하나의 루프는 2 개의 파괴 조건을 갖고 싶어한다.

+0

그 코드는 it 루프를 영원히하지 않는 것처럼 보입니다. A를 B와 같게하기 위해 최대 10 회 시도한 다음 경고 이메일이나 다른 것을 보내 주어야합니다 (이를 결정할 필요가 있음). 물론, 제 4 회 시도 나 제 5 회 등에서 A가 B와 같으면 그 시점에서 멈추고 싶습니다. –

+0

@ummm .... 제 편집을보세요. 이것은 당신이 염두에두고있는 것입니까? – user000001

+0

여전히 루프를 반복하는 것처럼 보이지만 작동하는 다른 답변이 있습니다. 감사합니다! –

0

while (및 기타 많은 컴파운드 명령)은 합법적으로 중첩 될 수 있습니다. 당신의 논리는 당신이 성취하고자하는 것에 대해 옳지 않습니다.

n= 
while [[ $a != "$b" && ++n -le 10 ]]; do 
    echo 'hi there' 
done 
순전히 숫자 비교에 대한

, [[[은 배쉬에서 사용할 수 없습니다.

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

많은 가능성이 있습니다. 비 숙련 된 POSIX Bourne 쉘과의 호환성이 필요한 경우가 아니면 expr 또는 백틱을 사용하지 마십시오.

+0

그것은 단지 아름다웠다. 이제 어떻게 작동하는지 볼 필요가 있습니다. :) –