ksh, 루프 최대값에 도달하면 작업 수행

ksh, 루프 최대값에 도달하면 작업 수행

나는 5개의 테스트를 실행하고(각 테스트 전에 잠시 대기) 모든 테스트가 실패하면 작업을 수행하는 작은 korn 쉘 스크립트를 작성하고 싶습니다.

나는 비슷한 일을 생각하고 있습니다 :

    for i in {1..5}
    do
       "doMyTest"             #it fills a variables "status" (but can unfortunately fails)
       if [ "$status" ]; then #if status is filled then we can leave the loop
          break
       fi
       sleep 3                #else wait some time before doing another try
    done

    if [ -z "$status" ]; then
       exit 1
    fi

... then the rest of my program

내가 어떻게 하면 더 나은 방법으로 할 수 있는지 아시나요? 좀 중복되는 것 같군요...

답변1

set --
while [ "$(($#>5))" -eq "-${#status}" ]
do    "test"; ${status:+":"} sleep 3
      set '' "$@"
done

보완적으로 테스트하면 단일 테스트로 더 많은 작업을 수행할 수 있는 경우가 많습니다.

답변2

$status다음을 수행하면 이중 확인을 피할 수 있습니다.

for i in {1..5}
do
   "doMyTest"                 #it fills a variables "status" (but can unfortunately fails)
   if [ -n "$status" ]; then  #if status is filled then we can leave the loop
      break
   elif [ $i -eq 5 ]; then
       exit 1                 #all the tests failed, exiting
   fi
   sleep 3                    #else wait some time before doing another try
done

답변3

내 대답: 모든 테스트가 실패할 때만 실패를 확인하려면 어떻게 해야 합니까? 하나의 테스트가 성공하면 다른 테스트를 건너뛸 수 있습니다.

test1 || sleep 3 && \
   test2 || sleep 3 && \
   test3 || sleep 3 && \
   test4 || sleep 3 && \
   test5 || exit 1

관련 정보