Created: 2010-01-31 16:47 Updated: 2010-01-31 16:47

Há alguns dias atrás, precisei criar um pequeno mecanismo de contagem de tempo que me desse a hora inicial, a hora final e o tempo de corrido, em segundos. Eu precisava disso para um treinamento de memorização que exige que façamos uma série de cálculos simples e anotemos o tempo diariamente.

Pensei em usar algo pronto, mas por preguiça de procurar na Internet (é tão difícil procurar no Google, não é mesmo?...) resolvi fazer um pequeno script.

Observe que este script não é tão preciso, pois o seu algoritmo é bastante simples e eu não estava preocupado com precisão: o que eu precisava era algo um pouco mais simples de usar do que o meu velho relógio de pulso analógico (de ponteiros mesmo!).

O script é muito simples de usar: basta executá-lo que a contagem do tempo inicia. Ao terminar sua tarefa, pressione ENTER para que o mesmo se encerre e mostre o resultado: a hora inicial, a hora final e o tempo decorrido.

Depois de terminado, olhei para o script e disse: nossa, que coisa mais simples e achei-o até inútil. No entanto, ele supriu a minha necessidade. Talvez sirva para mais alguém que, como eu, que goste de telinhas de terminal, scripts etc (tem maluco para tudo!).

Eis um exemplo de execução do script:

$ cronometro.sh
Starting counting...
Sun Jan 31 12:24:03 BRST 2010
Press ENTER to stop counting...
Elapsed time: 329s
Elapsed time: 329s
Counting stopped
Sun Jan 31 12:29:32 BRST 2010
------------------------------------------
Start time..: Sun Jan 31 12:24:03 BRST 2010
End time....: Sun Jan 31 12:29:32 BRST 2010
Elapsed time: 329s (5'29")
------------------------------------------

O código fonte é o seguinte:

    #!/bin/bash
    echo "Starting counting... $(date)"
    START=$(date +%s)
    END=$(date +%s)
    echo "Press ENTER to stop counting..."
    DONE=0

    while [ "$DONE" == "0" ] ; do
      read -t 1 x
      if [ "$?" == "0" ] ; then
        DONE=1
      fi
      END=$(date +%s)
      let ETIME=${END}-${START}
      echo -n -e "
      Elapsed time: ${ETIME}s"
    done

    echo -n -e "
    Counting stopped $(date)"
    echo
    MIN=0
    SEC=0

    let MIN=${ETIME}/60
    let SEC=${ETIME}%60
    echo "------------------------------------------"
    echo "Start time..: $(date --date @${START}"
    echo "End time....: $(date --date @${END})"
    echo "Elapsed time: ${ETIME}s (${MIN}'${SEC}")"
    echo "------------------------------------------"

Até mais,

Marião