Genau prüfen, ob die aktuelle Stunde des Tages zwischen 8 und 5 - da Sie runden Zahlen verwenden, Sie vertrödeln, haben nicht einmal mit Minuten:
hour=$(date +%H)
if [ "$hour" -lt 17 -a "$hour" -ge 8 ]; then
# do stuff
fi
Natürlich ist diese ist um 8:00:00 wahr, aber um 5:00:00 falsch; Hoffentlich ist das keine große Sache.
Für komplexere Zeitbereiche, ein einfacher Ansatz könnte zu Unix-Zeit zu konvertieren zurück, wo man leichter vergleichen kann:
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
Natürlich, ich habe den Fehler, die Beantwortung der Frage getroffen, gefragt. Wie Seamus vorschlägt, könntest du einfach einen Cron-Job verwenden - er könnte den Dienst bei 8 starten und ihn bei 5 absetzen oder ihn einfach zu den erwarteten Zeiten dazwischen ausführen.
sollte dies nicht end = $ (Datum --date = "17.00" +% s) sein? – vehomzzz
@Andrei: Definitiv. Entschuldigung, zumindest im ersten Beispiel ... – Cascabel