2010-05-24 16 views
5

Sagen wir, ich möchte einen bestimmten Block eines Bash-Skript nur ausgeführt, wenn es zwischen 8 Uhr morgens (8:00) und 5 Uhr nachmittags (17:00) ist, und nichts anderes tun. Das Skript wird kontinuierlich ausgeführt.Vergleichen Sie Zeit mit Datum Befehl

Bis jetzt verwende ich den date Befehl.

Wie man es benutzt, um es mit dem Zeitbereich zu vergleichen?

Antwort

8

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.

+0

sollte dies nicht end = $ (Datum --date = "17.00" +% s) sein? – vehomzzz

+0

@Andrei: Definitiv. Entschuldigung, zumindest im ersten Beispiel ... – Cascabel

1

Warum nicht einfach einen Cron-Job verwenden?

Ansonsten

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

wird die Arbeit machen

+0

Wie würden Sie in diesem Fall cron job verwenden? – vehomzzz

+0

Das Problem mit einem Cron-Job ist, dass es den Job zur oder zu den angegebenen Zeiten startet und dies in regelmäßigen Abständen tun kann, aber es macht nichts, einen Job zu beenden, wenn er am Ende eines Zeitraums noch läuft. Für einige Anwendungen ist die Datumsvergleichsmethode besser. –