ksh, executa a ação ao atingir o valor máximo de loop

1

Eu estou olhando para escrever um pequeno script de shell korn fazendo 5 testes (aguardando algum tempo antes de cada um) e, em seguida, se todos falharem, executando uma ação.

Eu estava procurando fazer algo como:

    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

Você tem alguma idéia de como eu poderia fazer isso de uma maneira melhor? Parece um pouco redundante ...

    
por user1058398 21.05.2014 / 14:43

3 respostas

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

Se você testar por complemento, muitas vezes você pode fazer muito mais com um teste.

    
por 12.02.2015 / 19:13
0

Você pode evitar verificar novamente o $status da seguinte forma:

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
    
por 26.06.2014 / 09:38
0

Minha resposta aceita no SO: Se você quiser apenas ver uma falha quando todos os testes falharem? Quando você pode pular os outros testes quando um teste é bem sucedido, você pode usar

test1 || sleep 3 && \
   test2 || sleep 3 && \
   test3 || sleep 3 && \
   test4 || sleep 3 && \
   test5 || exit 1
    
por 12.02.2015 / 16:08

Tags