Подтвердить что ты не робот

BASH - если $TIME между 8am и 1pm do.., esle do.. Задание временных переменных и операторов if в BASH

Мне нужно запустить команду, когда что-то вводится в BASH с определенным временным фреймом, и если в это время не запускается другая команда. Вот то, что у меня до сих пор, но оно, похоже, не работает.

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

В идеале, я хотел бы иметь что-то вроде: если время между 8:00 и 13:00 делает первую команду, если время между 13:00 и 11:00 делает вторую команду, иначе эхо "кто-то работал слишком долго". Я пробовал несколько вариантов, но не повезло, просто кажется, что я запускаю первую команду, что бы я ни делал.

4b9b3361

Ответ 1

В этом случае вам просто нужно посмотреть на час. Кроме того, bash имеет синтаксис для указания радиуса числа, поэтому вам не нужно беспокоиться о том, что 08 и 09 являются недействительными восьмеричными числами:

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" - это содержимое переменной, в базе 10.


На самом деле лучше использовать %k вместо %H, чтобы избежать недействительной восьмеричной проблемы.

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")

против

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