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.
no debería ser este fin = $ (fecha --date = "17:00" +% s)? – vehomzzz
@Andrei: Definitivamente. Lo siento - lo hice bien en el primer ejemplo, al menos ... – Cascabel