ksh,达到循环最大值时执行操作

ksh,达到循环最大值时执行操作

我希望编写一个小的 korn shell 脚本来执行 5 个测试(在每个测试之前等待一段时间),然后,如果它们都失败,则执行一项操作。

我正在考虑做类似的事情:

    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

相关内容