2013-10-30 3 views
0

나는 while 루프를 사용하여 용어에 대한 웹 링크를 말리려고합니다. "or"를 추가해야하므로 시간이 셀 수 있으므로 페이지가있는 경우 결코 오지 않는다. 단지 스크립트를 무기한 연기하지 않는다. 여기 내가 가지고있는 것은 작동하지 않습니다.While 루프 도움말 bash

count=0 
while [ $count -lt 5 -o `curl -silent -m 2 10.10.10.10:7001 | grep myterm | wc -l` -lt 1 ]; do 
echo "Waiting for it to start" 
count=$(($count + 1)) 
sleep 5 
done 
echo "started" 

내 컬의 일을 알고 페이지가 최대이며, 5 번을 통해 루프 경우 카운트 부분은 잘 작동 할 때 1을 반환, 그것은 while 루프를 종료하고 (내가 그것을 떠납니다하지 어떻게 시작 말한다 , 단지 예). 그러나 그것이 처음 실행될 때, 그것은 1보다 작지 않은 내 컬 = 1을보고, while 루프를 끝내야합니다. 내가 뭘 잘못하고 있는거야? ??

편집 : 내가 왜 이런 식으로하는지 설명하기 위해 누군가가 왜 나쁜 습관인지/대신 무엇을해야하는지 설명 할 수 있습니다.

jboss 서비스를 시작합니다. 이 서비스는 시작하는 데 3 분에서 6 분 정도 걸릴 수 있습니다. 그래서 나는 2 가지 일을해야합니다. 시작될 상태 페이지 (성공적으로 시작된시기를 알려주는 가장 좋은 방법)와 8 분 이상이 걸리면 확인을 중지하여 다음 서비스로 넘어갈 수 있는지 확인하십시오. 생각? 당신이 뭘 하려는지

+1

당신은 많은 것을 "잘못"하고 있습니다 ("좋지 않은 습관"이라고 이해하십시오). –

+0

시간 초과를 찾으십니까? http://stackoverflow.com/questions/687948/timeout-a-command-in-bash-without-unnecessary-delay – freitass

+0

잠시 동안의 상태가 _ 또는 _ 조건임을 이해 했습니까? –

답변

1

아직 5 회 실패를 시도하지 않은 반면 을 계속 시도합니다. 그러나 당신은 그것을 쓰지 않았습니다.

count=0 
nb=0 
while [ $count -lt 5 ]; do 
    nb=$(curl -silent -m 2 10.10.10.10:7001 | grep myterm | wc -l) 
    if [ $nb -ge 1 ]; then 
    echo "Started" 
    exit 0 
    fi 
    echo "Waiting for it to start..." 
    count=$(($count + 1)) 
    sleep 5 
done 
echo "Didn't start after $count tries" 
exit 1 
+0

이것은 나를 위해 일했습니다. 결국 나는 -o에서 -a로 코드를 변경하고 잘 동작한다. 나는 내 자신의 조건을 오해하고 있었다고 생각한다. 나는 왜 그것을 얻고 작동합니다. 매우 감사합니다. – cashman04