Script de cronômetro simples

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 coriddo, 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