Сценарий оболочки для манипуляции датами - PullRequest
0 голосов
/ 20 мая 2011

Я хочу что-то сделать, если в сценарии дата находится между 08:03 и 14:03.

, но когда я пытаюсь

dt=`date +%H:%M`


if [ $dt -eq 08:03 ]
then
echo $dt > msize.txt
#echo "iam im 1 if"
fi

, это не работает.Этот файл запускается в crontab каждую минуту.Пожалуйста, предложите что-нибудь

Ответы [ 2 ]

3 голосов
/ 20 мая 2011

Как указывает Рэйф в другом ответе, -eq - это число, вам нужно использовать == для сравнения строк.Но вы сказали, что хотите сказать, если время между двумя, а не точно равно одному.В этом случае вы должны использовать оператор <:

if [ '08:03' \< "$dt" -a "$dt" \< '14:03']

Или более удобно:

if [[ '08:03' < "$dt" && "$dt" < '14:03']]

Обратите внимание, что эти операторы не указаны в POSIX, но работают на большинстве оболочек (Баш, Корн Шелл, зш).Остерегайтесь их использования, если вы используете минимальную оболочку, такую ​​как Dash (это то, что /bin/sh есть в Ubuntu).

2 голосов
/ 20 мая 2011

Оператор -eq предназначен для сравнения целых чисел, а не строк.Если вы хотите сравнить строки, вам нужно использовать ==.Попробуйте это:

if [ $dt == '08:03' ]
then
# Rest of script
...