Convertendo um loop de código para funcionar

0

Eu quero repetir um comando por 5 vezes com um intervalo de 20 segundos. Eu quero que este comando seja passado como um parâmetro de método. Como fazer isso? E uma vez que a função é escrita como passar o valor para a função?

Eu quero que meu código atual seja convertido em uma função que usa um conjunto de parâmetros. Como escrever e chamar essa função no meu script de shell?

Meu código atual é assim:

  trialNumber=0
    until [ $trialNumber -ge 5]  
     do
        ssh $USERID@$HOST $SCRIPT_LOCATION/runme.sh   # This line is my command and it may very with number of parameters or command itself.
       [ $? -eq 0 ] && break
      trialNumber=$[$trialNumber+1]
      sleep 20
   done

(O código acima é incorporado em muitos lugares e eu quero movê-lo para uma função).

    
por java_enthu 19.08.2013 / 13:04

1 resposta

3
retry() {
  trialNumber=$1 delay=$2; shift 2
  while [ "$trialNumber" -gt 0 ]; do
    "$@" && return
    ret=$?
    sleep "$delay"
    trialNumber=$(($trialNumber - 1))
  done
  return "$ret"
}

retry 5 20 ssh "$USERID@$HOST" "$SCRIPT_LOCATION/runme.sh"

Embora o último sleep em caso de falha não seja necessário. Pode ser melhor como:

retry() {
  trialNumber=$1 delay=$2; shift 2
  until "$@"; do
    ret=$?
    trialNumber=$(($trialNumber - 1))
    [ "$trialNumber" -gt 0 ] || return "$ret"
    sleep "$delay"
  done
}
    
por 19.08.2013 / 13:28