Ich muss nach der aktuellen Uhrzeit suchen und das Skript abbrechen, wenn es nicht die richtige Tageszeit ist, zu der ich es ausführen soll. Wenn es von jemand anderem ausgeführt wird, sollte es ebenfalls abgebrochen werden.
Beispiel: Ich muss mein Skript nur ausführen, wenn es zwischen 22 Uhr und 2 Uhr morgens gestartet wird (ein 4-Stunden-Fenster).
Derzeit mache ich Folgendes. Nehmen Sie sich Zeit date +%k%M
und vergleichen Sie mit fest codierten Zahlen
#!/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
Ich würde gerne wissen, ob es eine andere effiziente Methode für den Zeitvergleich in sh
oder gibt bash
.
date +%s
.currTime=$(date +%s); lower=$(date +%s --date="2:00"); upper=$(date +%s --date="22:00"); if [$currTime -gt $lower -a $currTime -lt $upper]; then
…faketime
, ist Ihr Skript nicht sehr sicher. Die Verwendung von Sperrdateien ist wahrscheinlich eine bessere Option.Antworten:
Das sieht für mich perfekt aus. Was lässt Sie denken, dass es verbessert werden sollte?
Wie auch immer, Möglichkeiten zur Verbesserung könnten sein:
zsh
oderksh93
gawk
(die kleiner als Bash, aber nicht als Dash ist, aber die zusätzliche Gabel vermeiden könnte):Beispiel:
quelle
Wenn externe Tools zulässig sind, möchten Sie möglicherweise überprüfen
dateutils
.Ihr "Skript" wird:
Haftungsausschluss: Ich bin der Autor dieses Tools.
quelle