shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RES: [shell-script] Calcular Hora


From: Rodolfo Villanova
Subject: RES: [shell-script] Calcular Hora
Date: Tue, 28 Sep 2004 12:13:29 -0300

Acho que o que o Linko quer é um script que faça cálculos de diferenças
entre horários.

Existem diversas formas de fazer o que o Linko deseja.
Eu elaborei uma solução para me avisar quando há atraso na chegada de um
determinado arquivo, estabelecido um intervalo de tolerância.
Aí vai minha pequena contribuição para o software livre.
Recortei o que me parece essencial para publicá-lo na lista, e ele pode ser
melhorado.
Não fiz testes da versão que coloquei abaixo, mas a versão integral funciona
bem, executado de hora em hora pela cron de ambientes Unix SunOs e True64.
Se necessário, com algumas adaptações, deve funcionar também em ambiente
Linux.

#!/bin/ksh
##################################################
# Monitora chegada de arquivo
##################################################

# Define o intervalo em minutos de tolerância no atraso de recebimento do
arquivo desejado
INTERVALO=180

HOJE_DIA=`date +%d`
HOJE_MES=`date +%m`
HOJE_ANO=`date +%Y`
HOJE_AMD=`date +%Y%m%d`
HOJE_HORA=`date +%H`
HOJE_MIN=`date +%m`
ARQ_LOG=/var/logs/ARQUIVO_$HOJE_AMD.log
DIRETORIO=/diretorio/qualquer

####################
correio ()
{
 echo "O último arquivo foi recebido às <$HH_ARQ> do dia <$DD_ARQ $MES_ARQ
$HOJE_ANO>" >> $ARQ_LOG
 mailx -s "Atraso no recebimento de arquivo address@hidden <
$ARQ_LOG
}

####################
#    Main
####################

# Obtem a hora e minuto de criação do + recente arquivo no diretório
MES_ARQ=`ls -ltr $DIRETORIO | tail -1 | tr -s " " " " | cut -d" " -f6`
DD_ARQ=`ls -ltr  $DIRETORIO | tail -1 | tr -s " " " " | cut -d" " -f7`
HH_ARQ=`ls -ltr  $DIRETORIO | tail -1 | tr -s " " " " | cut -d" " -f8`
HORA_ARQ=`echo $HH_ARQ | cut -d":" -f1`
MIN_ARQ=` echo $HH_ARQ | cut -d":" -f2`

if [ $HORA_ARQ -eq $HOJE_ANO ]; then
   echo "*** Não foi possível calcular atraso - arquivo mostrou o ano
($HORA_ARQ) ao invés do horário ***"
   exit
fi

# Verifica se o último arquivo foi recebido há mais tempo que o estabelecido
no INTERVALO
if [ $HOJE_HORA -eq $HORA_ARQ ]; then
     exit
elif [ $HOJE_HORA -eq 0 ]; then
     DIF_HORA=`expr 23 - $HORA_ARQ`
     DIF_MIN=`expr 60 - $MIN_ARQ`
     if [ `expr $DIF_HORA \* 60 + $DIF_MIN + $HOJE_MIN` -gt $INTERVALO ];
then
        correio
     fi
elif [ $HOJE_HORA -gt $HORA_ARQ ]; then
     DIF_HORA=`expr $HOJE_HORA - $HORA_ARQ - 1`
     DIF_MIN=`expr 60 - $MIN_ARQ`
     if [ `expr $DIF_HORA \* 60 + $DIF_MIN + $HOJE_MIN` -gt $INTERVALO ];
then
        correio
     fi
else
     correio    # com certeza, qualquer intervalo pré-estabelecido será bem
menor que 24 horas
fi
#### Zé Finit ####

Buenas, Linko.
Esse script proporcionou um bom exercício pros neurônios encontrar a solução
que eu precisava.
Cabe a ti, agora, encontrar uma outra que melhor se adeque ao que desejas
obter.

Abraço e boa sorte,
-----------------------
Rodolfo Gross Villanova

> -----Mensagem original-----
> De: Tiago F Bianchini [mailto:address@hidden]
> Enviada em: terça-feira, 28 de setembro de 2004 11:37
> Para: address@hidden
> Assunto: Re: [shell-script] Calcular Hora
>
> nao sei se te ajuda, se ha como aplicar na tua necessidade, mas o comando
> "time" te da o tempo decorrido pra executar determinado comando
> (ou script)
>
> exemplo:
> time ls
>
>
> Em Ter 28 Set 2004 11:28, linko_k escreveu:
> > Bom Dia,
> >
> >  Gostaria de saber como eu faço para clacular hora, exemplo:
> >
> >  - um processo começou as 13:59 e terminou as 17:39, como eu faço o
> >  calculo para saber o tempo que durou este processo ?
> >
> >  - outro exemplo: começou as 23:14 e terminou as 03:48
> >
> >
> >
> >  Obrigado,
> >  Linko




reply via email to

[Prev in Thread] Current Thread [Next in Thread]