[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Cálculo de tempo
From: |
Arkanon |
Subject: |
Re: [shell-script] Cálculo de tempo |
Date: |
Fri, 1 Oct 2010 18:13:58 -0300 |
Em 1 de outubro de 2010 15:22, Allan da Silva Donega
<address@hidden>escreveu:
> Gostaria de saber se alguém tem algum script para fazer cálculo de
> tempo de
> execução.
>
> Exemplo:
>
> Meu script começa a execução num horário e termina em outro.
>
> Gostaria de um cálculo que fizesse datafim - datainicio
>
Eu tenho usado esse script (que é antigo, mas eu documentei agora):
<http://arkanon.pastebin.com/9jYc2qYt>
$ cat deltat
#!/bin/bash
# DeltaT
# - Contagem de tempo entre processos
# - Precisão de segundos
# - Pode ser usado para contagem "aninhada" de tempo
# - Aceita uma quantidade "offset" opcional de segundos
# - Devolve:
# a hora e o timestamp de início e fim da contagem
# a variação de tempo em hh:mm:ss e em segundos
#
# Arkanon <address@hidden>
# 2010/03/18 Qui 15:54:42 BRS
#
# EXEMPLO
#
# Um script com:
#
# time_1=$(deltat start)
#
# echo "sleeping 3s..."
# sleep 3
#
# time_2=$(deltat start)
# read -p "prompt: " p
# echo -e "\nyou said: $p\n"
# time_2=$(deltat stop "$time_2")
# echo -e "$time_2\n"
#
# time_1=$(deltat stop "$time_1")
# echo -e "$time_1"
#
# Devolve:
#
# sleeping 3s...
# prompt: oi
#
# you said: oi
#
# OFFSET 0
# START [2010/10/01 Sex 18:00:25 BRS] 1285966825
# END [2010/10/01 Sex 18:00:26 BRS] 1285966826
# DELTA 00:00:01 1
#
# OFFSET 0
# START [2010/10/01 Sex 18:00:22 BRS] 1285966822
# END [2010/10/01 Sex 18:00:26 BRS] 1285966826
# DELTA 00:00:04 4
fmt="[%Y/%m/%d %a %H:%M:%S %Z]\t%s"
now=$(date +'%m/%d/%Y %H:%M:%S')
ts=$(date -d "$now" +"%s")
point=$1
if [ "$point" = "start" ] && ( [ $# = 1 ] || [ $# = 2 ] )
then
[ $# = 2 ] && offset=$2 || offset=0
echo -e "OFFSET $offset"
echo -e " START "$(LANG=pt_BR date -d "$now" +"$fmt")
else
offset=$(echo "$2" | grep "OFFSET" | cut -f2)
ts0=$(echo "$2" | grep "START" | cut -f3)
if [ "$point" = "stop" ] && [ $# = 2 ] && [ "$ts" -ge "$ts0" ]
then
diffts=$[$ts-$ts0+$offset]
time_t=$diffts
time_s=$[$time_t%60]
time_t=$[$time_t/60]
time_m=$[$time_t%60]
time_h=$[$time_t/60]
[ $time_s -le 9 ] && time_s="0$time_s"
[ $time_m -le 9 ] && time_m="0$time_m"
[ $time_h -le 9 ] && time_h="0$time_h"
delta="$time_h:$time_m:$time_s"
echo "$2"
echo -e " END "$(LANG=pt_BR date -d "$now" +"$fmt")
echo " DELTA $delta $diffts"
else
echo 'Usage: var=`deltat start [ts offset]`; cmd[; cmd; ...];
var=`deltat stop "$var"`; echo $var'
fi
fi
# [EOF]
--
(o_ ------------------ __o
//\ address@hidden _`\<,
V_/_ --- www.lsd.org.br (_)/(_)
---------------------------------
[As partes desta mensagem que não continham texto foram removidas]