Cálculo de intervalo de tempo
Publicado por DAVISON MARCEL PASQUALINI (última atualização em 09/01/2010)
[ Hits: 19.265 ]
Download calctime2.sh (versão 2)
Este script calcula em segundos a diferença entre duas datas/horários. Considera mudança de ano, meses, ano bissexto... tudo! E ainda possui um modo interativo onde você o chama passando um parâmetro e ele chama outra rotina passando o resultado e os demais parâmetros que você informar.
Testado em Debian e Open Solaris.
Versão 2 - Enviado por DAVISON MARCEL PASQUALINI em 08/01/2010
Changelog: Se o seu sistema operacional possui a opção %s (para saber digite: date +%s), o script pode ser bem mais simples ... segue a versão 2.
#/bin/sh # ROTINA DE VARIACAO DE SEGUNDOS ENTRE DUAS DATAS # Codigo pertence a Comunidade # VOL (Viva o Linux) #------------------------------------------------------- # Primeira versao: Davison Pasqualini # 30/12/2009 fdmarp #------------------------------------------------------- # OPCOES #------------------------- INTERATIVO="n" # n - mostra a variacao de data # s - chama um script de passando o resultado em # $1 e toda a string passada inicialmente para # o calctime.sh quando este foi chamado. SCRIPT_ACT="seu_script.sh" # preencher apenas se for para chamar outro script # # ========================================================= mostra_resultado () { MENSAGEM="$resultado_final $guarda_linha" if [ "$INTERATIVO" = "s" ]; then sh $SCRIPT_ACT $MENSAGEM else echo "resultado: $resultado_final segundos" fi } data_inicial=$1 data_final=$3 hora_inicial=$2 hora_final=$4 dia1=`echo $data_inicial | cut -d"/" -f1` mes1=`echo $data_inicial | cut -d"/" -f2` ano1=`echo $data_inicial | cut -d"/" -f3` dia2=`echo $data_final | cut -d"/" -f1` mes2=`echo $data_final | cut -d"/" -f2` ano2=`echo $data_final | cut -d"/" -f3` hora1=`echo $hora_inicial | cut -d":" -f1` min1=`echo $hora_inicial | cut -d":" -f2` seg1=`echo $hora_inicial | cut -d":" -f3` hora2=`echo $hora_final | cut -d":" -f1` min2=`echo $hora_final | cut -d":" -f2` seg2=`echo $hora_final | cut -d":" -f3` guarda_linha=`echo $* | cut -d" " -f5-` verifica_bissexto () { verif1=`echo scale=3\;$ano_val/4 |bc | cut -d. -f2` if [ "$verif1" -eq 0 ]; then verifica_bissexto_p2 else bissexto="0" fi } verifica_bissexto_p2 () { verif2=`echo scale=3\;$ano_val/100 |bc | cut -d. -f2` if [ "$verif2" -eq 0 ]; then verifica_bissexto_p3 else bissexto="1" fi } verifica_bissexto_p3 () { verif3=`echo scale=3\;$ano_val/400 |bc | cut -d. -f2` if [ "$verif3" -eq 0 ]; then bissexto="1" else bissexto="0" fi } verifica_bissexto_p4 () { ano_val=`expr $ano_fim + 1` verifica_bissexto if [ "$bissexto" -eq 0 ]; then dias_count=`expr $dias_count + 28` else dias_count=`expr $dias_count + 29` fi } varia_ano () { dias_count=0 ano_val=$ano1 while [ "$ano_val" -le "$ano_fim" ]; do verifica_bissexto if [ "$bissexto" -eq 0 ]; then dias_count=`expr $dias_count + 365` else dias_count=`expr $dias_count + 366` fi ano_val=`expr $ano_val + 1` done varia_mes } varia_mes () { mes_val=1 while [ "$mes_val" -le "$mes_fim" ]; do case "$mes_val" in "1" | "3" | "5" | "7" | "8" | "10" | "12" ) dias_count=`expr $dias_count + 31` ;; "01" | "03" | "05" | "07" | "08" ) dias_count=`expr $dias_count + 31` ;; "4" | "04" | "6" | "06" | "9" | "09" | "11" ) dias_count=`expr $dias_count + 30` ;; "2" | "02" ) verifica_bissexto_p4 ;; * ) rotina_erro ;; esac mes_val=`expr $mes_val + 1` done varia_dia } varia_dia () { varia_hora=0 dias_count=`expr $dia_fim + $dias_count` varia_dias_data=`expr $dias_count \* 24 \* 60 \* 60` varia_hora=`echo $hora \* 3600 + $min \* 60 + $seg + $varia_dias_data | bc` } principal () { dia_fim=`expr $dia1 - 1` ano_fim=`expr $ano1 - 1` mes_fim=`expr $mes1 - 1` hora=$hora1 min=$min1 seg=$seg1 varia_ano res_1=$varia_hora dia_fim=`expr $dia2 - 1` ano_fim=`expr $ano2 - 1` mes_fim=`expr $mes2 - 1` hora=$hora2 min=$min2 seg=$seg2 varia_ano res_2=$varia_hora resultado_final=`expr $res_2 - $res_1` } rotina_erro () { clear echo " ----------------------------------------------------------------------- calctime.sh ----------------------------------------------------------------------- NOME calctime.sh DESCRICAO Rotina para calculo de intervalo de tempo. FORMATO calctime.sh DD/MM/YYYY HH:MM:SS DD/MM/YYYY HH:MM:SS ------------------- ------------------- data menor data maior ex.: calctime.sh 10/01/2000 11:00:00 15/01/2000 09:00:00 OPCOES INTERATIVO="?" n - mostra a variacao de data s - chama um script de passando o resultado em $1 e toda a string passada inicialmente para o calctime.sh quando este foi chamado. SCRIPT_ACT="????" nome do script a ser acionado no modo interativo. Viva o Linux --------------------------------------------------------------Fim-----" } if [ "$4" = "" ]; then rotina_erro else principal mostra_resultado fi #-------------------------------------- FIM --
Script Administração SquidFacil Ubuntu 11.10
Backup Automatizado (atualizado)
Rotina para backup diário, semanal e mensal (exemplo para Firebird)
Instalador .tar.bz2 com menu gráfico Zenity
NFS server/client com iptables
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Criando uma VPC na AWS via CLI
Multifuncional HP imprime mas não digitaliza
Dica básica para escrever um Artigo.
Como Exibir Imagens Aleatórias no Neofetch para Personalizar seu Terminal
Melhorando a precisão de valores flutuantes em python[AJUDA] (11)
GLPI - Configuração de destinatário com conta Microsoft Exchange (0)
Vou voltar moderar conteúdos de Dicas e Artigos (3)
OpenVPN no MACBOOK conecta mas não pinga pastas de rede compartilhada ... (1)