Muszę sprawdzić aktualny czas i przerwać skrypt, jeśli nie jest to właściwa pora dnia, mam go uruchomić. Ponadto, jeśli ktoś go uruchomi, powinien przerwać.
Na przykład: chcę, aby mój skrypt działał tylko wtedy, gdy został uruchomiony między 22:00 a 2:00 (okno 4-godzinne).
Obecnie wykonuję następujące czynności. Nie spiesz się date +%k%M
i porównuj z cyframi zakodowanymi na stałe
#!/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
Chciałbym wiedzieć, czy istnieje jakaś inna skuteczna metoda w odniesieniu do porównania czasu w sh
lub 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
, skrypt nie jest zbyt bezpieczny. Korzystanie z plików blokujących jest prawdopodobnie lepszą opcją.Odpowiedzi:
Dla mnie to wygląda idealnie. Co sprawia, że uważasz, że należy to poprawić?
W każdym razie, sposoby na ulepszenie mogą być:
zsh
lubksh93
gawk
(który jest mniejszy niż bash, ale nie mniej niż dash, ale mógłby uniknąć dodatkowego widelca):Przykład:
źródło
Jeśli dozwolone są narzędzia zewnętrzne, możesz chcieć to sprawdzić
dateutils
.Twój „skrypt” staje się:
Oświadczenie: Jestem autorem wspomnianego narzędzia.
źródło