Se você quiser a duração em segundos, no topo use
start=$SECONDS
e no final
duration=$(( SECONDS - start ))
Eu precisava de um temporizador que comece no início do script e pare no final.
Você pode usar o comando time
interno do Linux. Na página do manual:
time COMMAND [arguments]
time determines which information to display about the resources used by the COMMAND from the string FORMAT. If no format is specified on the command line, but the TIME environment variable is set, its value is used as the format.
Para cronometrar o script cleanup.sh
, use:
$ time cleanup.sh
Eu percebo que essa é uma pergunta muito antiga, mas é assim que faço para qualquer coisa quando quero / preciso saber quanto tempo levei para executar.
Coloque SECONDS=0
antes do que você está verificando o tempo de execução de. Ele precisa ser depois de qualquer entrada do usuário para obter um bom resultado, por isso, se você está solicitando informações, coloque-o após o (s) prompt (s).
Em seguida, coloque isso no final do que você está verificando:
if (( $SECONDS > 3600 )) ; then
let "hours=SECONDS/3600"
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)"
elif (( $SECONDS > 60 )) ; then
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $minutes minute(s) and $seconds second(s)"
else
echo "Completed in $SECONDS seconds"
fi
Se você quer saber apenas o tempo em segundos, você pode simplificar o acima para:
echo "Completed in $SECONDS seconds"
Como exemplo:
read -rp "What's your name? " "name"
SECONDS=0
echo "Hello, $name"
if (( $SECONDS > 3600 )) ; then
let "hours=SECONDS/3600"
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)"
elif (( $SECONDS > 60 )) ; then
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $minutes minute(s) and $seconds second(s)"
else
echo "Completed in $SECONDS seconds"
fi
#!/bin/bash
start=$(date +%s)
#
# do something
sleep 10
#
#
end=$(date +%s)
seconds=$(echo "$end - $start" | bc)
echo $seconds' sec'
echo 'Formatted:'
awk -v t=$seconds 'BEGIN{t=int(t*1000); printf "%d:%02d:%02d\n", t/3600000, t/60000%60, t/1000%60}'
Tags bash