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

私の答え:すべてのテストが失敗したときにのみ失敗を確認するにはどうすればよいですか? 1つのテストが成功したら、別のテストをスキップできます。

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

関連情報