2013-08-08 5 views
11

Muszę uruchomić polecenie, gdy coś jest wprowadzane w BASH w określonym przedziale czasowym, a jeśli jest nie tym razem uruchom inne polecenie. Oto co mam do tej pory, ale nie wydaje się działać ..

FLATTIME=$(date "+%H%M") 
FLATTIME=${FLATTIME##0} 

if ! [[ $FLATTIME -gt 1130 ]] ; then 
mysql --host=192.168.0.100 --user=myself --password=mypass thedb << EOF 
INSERT INTO $STAFFID values ('','$STAFFID','$THETIME','','$THEDATE','$DAYOFWEEK'); 
EOF 

else 
mysql --host=192.168.1.92 --user=myself --password=mypass thedb << EOF 
UPDATE $STAFFID SET Out_Time='$THETIME' WHERE date='$THEDATE'; 
EOF 
fi 

Idealnie co chciałbym to mieć coś takiego: jeśli czas jest między 8 rano i 1pm zrobić pierwszy polecenie, jeśli czas jest między 13.00 a 23.00, wykonaj drugie polecenie, w przeciwnym wypadku echo "ktoś był za długo w pracy". Próbowałem kilku wariantów, ale bez powodzenia, wydaje mi się, że wykonuję pierwsze polecenie, cokolwiek robię.

+1

może to być zbyt oczywiste, ale czy ten skrypt w czasie późniejszym niż 1130? Czy skomentowałeś polecenie 'date' i zakodowałeś na czas znacznik czasu do testowania? Próbowałem twojej struktury 'if-else' na moim komputerze i działało dobrze. –

Odpowiedz

24

W tym przypadku wystarczy spojrzeć na godzinę. Ponadto, bash ma składnię, aby określić przelicznika liczby, dzięki czemu nie trzeba martwić się o 08 i 09 nieważności ósemkowe:

H=$(date +%H) 
if ((8 <= 10#$H && 10#$H < 13)); then 
    echo between 8AM and 1PM 
elif ((13 <= 10#$H && 10#$H < 23)); then 
    echo between 1PM and 11PM 
else 
    echo go to bed 
fi 

„10 # $ H” jest zawartość zmiennej, w bazie 10.


Faktycznie, lepiej użyć %k zamiast %H uniknąć nieprawidłowej ósemkowy problem.

H=$(date -d '08:45' "+%H") 
((13 <= H && H < 23)) && echo ok || echo no 
bash: ((: 08: value too great for base (error token is "08") 

kontra

H=$(date -d '08:45' "+%k") 
# ....................^^ 
((13 <= H && H < 23)) && echo ok || echo no 
no 
Powiązane problemy