Bom método para comparar o tempo?

10

Eu preciso verificar a hora atual e abortar o script se não for a hora correta do dia em que devo executá-lo. Além disso, se alguém mais o executar, ele deve ser cancelado.

Por exemplo: eu preciso que meu script seja executado somente se for iniciado entre 22h e 2h (uma janela de 4 horas).

Atualmente estou fazendo o seguinte. Tomando o tempo com date +%k%M e comparando com números codificados

#!/bin/sh
currTime='date +%k%M'
check_time_to_run()
{
    tempTime=$1
    if [ $tempTime -gt 200 -a $tempTime -lt 2200 ]; then 
        echo "Time is between 2 AM and 10 PM. Aborting."
        exit 1
    else
        echo "Time is after 10 PM and before 2 AM. Running normally."
    fi
}

check_time_to_run $currentTime

Gostaria de saber se existe algum outro método eficiente com relação à comparação de tempo em sh ou bash ?

    
por mtk 04.02.2013 / 11:16

2 respostas

6

Isso parece perfeito para mim. O que faz você pensar que deve ser melhorado?

De qualquer forma, maneiras de melhorar isso podem ser:

  • Use um shell menor e mais rápido que o bash, como dash ou pdksh.
  • use um shell com recursos de data incorporados como zsh ou ksh93
  • use gawk (que é menor que bash, mas não que traço, mas pode evitar a bifurcação extra):

Exemplo:

#! /usr/bin/gawk -f
BEGIN {now = strftime("%k%M")+0; exit(now > 200 && now < 2200)}
    
por 04.02.2013 / 12:57
4

Se ferramentas externas forem permitidas, talvez você queira verificar dateutils .

Seu "script" se torna:

if dtest time --gt '02:00:00' && dtest time --lt '22:00:00'; then
    echo "Time is between 2 AM and 10 PM. Aborting."
fi

Aviso: Eu sou o autor da referida ferramenta.

    
por 26.06.2013 / 09:28