Qual é a duração de um processo que começa às 10:00:05 e termina às 10:01:24?
Quanto tempo passou entre 2013-08-06 23:17:34 e 2013-08-07 06:20:03?
Podemos descobrir a resposta a essas perguntas e muito mais, convertendo as strings de data / hora de início e término em carimbos de data / hora Unix usando date
(segundos desde a época). Então, subtrair o carimbo de data / hora de início do final (usando expr
) nos dá a duração em segundos.
Aqui está um script de shell simples que demonstra a técnica:
timestamp(){
date -j -f "%F %T" $* +%s
}
starttime=$(timestamp $1)
endtime=$(timestamp $2)
duration=$(expr $endtime - $starttime)
echo "Duration (seconds): $duration"
Alimentar nossos exemplos com o script é assim:
./duration.sh 2013-08-0623:17:34 2013-08-0706:20:03
Duration (seconds): 25349
./duration.sh 2013-08-0610:00:05 2013-08-0610:01:24
Duration (seconds): 79
Barra lateral: observe que comprimimos a data e a hora juntas 2013-08-0610:10:24
,, ao chamar o script. Isso ocorre porque o bash separa os argumentos da linha de comando por espaços. Nossa timestamp
função não se importa, porém, porque date
remove os espaços em branco da máscara e da entrada antes da transformação.