2010-05-24 19 views
5

Digamos que quiero que cierto bloque de un script bash se ejecute solo si es entre las 8 am (8:00) y 5 pm (17:00), y no haga nada de lo contrario. La secuencia de comandos se ejecuta continuamente.Comparar tiempo usando el comando de fecha

Hasta ahora estoy usando el comando date.

¿Cómo usarlo para compararlo con el rango de tiempo?

Respuesta

8

Sólo tienes que comprobar si la hora actual del día es de entre 8 y 5 - Dado que está utilizando números redondos, que no tienen ni siquiera para ensuciar alrededor con minutos:

hour=$(date +%H) 
if [ "$hour" -lt 17 -a "$hour" -ge 8 ]; then 
    # do stuff 
fi 

Por supuesto, esto es verdadero a las 8:00:00 pero falso a las 5:00:00; con suerte eso no es gran cosa.

Para intervalos de tiempo más complejas, un enfoque más sencillo podría ser la de convertir de nuevo a Tiempo Unix donde se puede comparar más fácilmente:

begin=$(date --date="8:00" +%s) 
end=$(date --date="17:00" +%s) 
now=$(date +%s) 
# if you want to use a given time instead of the current time, use 
# $(date --date=$some_time +%s) 

if [ "$begin" -le "$now" -a "$now" -le "$end" ]; then 
    # do stuff 
fi 

Por supuesto, he cometido el error de responder a la pregunta, tal como solicitó. Como sugiere Seamus, podría usar un trabajo cron: podría iniciar el servicio a las 8 y eliminarlo a las 5, o simplemente ejecutarlo a los tiempos previstos entre.

+0

no debería ser este fin = $ (fecha --date = "17:00" +% s)? – vehomzzz

+0

@Andrei: Definitivamente. Lo siento - lo hice bien en el primer ejemplo, al menos ... – Cascabel

1

¿Por qué no usar simplemente un trabajo cron?

De lo contrario

if [[ `date +%H` -ge 8 && `date +%H` -lt 17 ]];then 
    do_stuff() 
fi 

hará el trabajo

+0

¿Cómo usarías el trabajo cron en este caso? – vehomzzz

+0

El problema con un trabajo cron es que iniciará el trabajo en o durante los tiempos especificados y puede hacerlo periódicamente, pero no hace nada para finalizar un trabajo si aún se está ejecutando al final de un período de tiempo. Entonces, para algunos usos, el método de comparación de fechas es mejor. –

Cuestiones relacionadas