Eu precisava de um cronômetro que iniciasse no começo do script e terminasse no final.
time yourprogram.sh
:, que Marius Cotofana explicou
Eu precisava de um cronômetro que iniciasse no começo do script e terminasse no final.
time yourprogram.sh
:, que Marius Cotofana explicou
Respostas:
Se você quer a duração em segundos, no topo use
start=$SECONDS
e no final
duration=$(( SECONDS - start ))
Você pode usar o time
comando interno do Linux . Na página do manual:
time COMMAND [argumentos]
time determina quais informações serão exibidas sobre os recursos usados pelo COMMAND a partir da string FORMAT. Se nenhum formato for especificado na linha de comandos, mas a variável de ambiente TIME estiver configurada, seu valor será usado como o formato.
Para cronometrar o cleanup.sh
script, use:
$ time cleanup.sh
time
você está usando. hackernoon.com/...
Sei que essa é uma pergunta bastante antiga, mas é dessa maneira que faço para qualquer coisa quando quero / preciso saber quanto tempo levou para ser executado.
O Bash possui um timer de segundos embutido na forma de uma variável interna chamada SECONDS
(consulte: aqui para outras variáveis internas)
Coloque SECONDS=0
antes do que você está verificando o tempo de execução. Ele precisa estar atrás de qualquer entrada do usuário para obter um bom resultado; portanto, se você estiver solicitando informações, coloque-a 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ê deseja apenas saber o tempo em segundos, pode simplificar o acima para:
echo "Completed in $SECONDS seconds"
Como um 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
date +%T -d "1/1 + $SECONDS sec"
(limitada a menos de 24 horas, mas você pode adaptar para adicionar dias também)
#!/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}'
@anask faça uma solução inteligente para esta resposta, só recomendo usar o nativo $SECONDS
para criar uma nova
awk -v t=$SECONDS 'BEGIN{t=int(t*1000); printf "Elapsed Time (HH:MM:SS): %d:%02d:%02d\n", t/3600000, t/60000%60, t/1000%60}'
O objetivo da printf
divisão e é converter os segundos decorridos na unidade correspondente Horas, Mins, Segs, respectivos.
time
comando (time ./script.sh), para imprimir o horário atual, use odate
comando e assim por diante.