Tomsk Sysadmins Forum

Unix => Программирование => Topic started by: Xray_Linux_Root on October 29, 2007, 11:16:36

Title: Скриптом вычислить послденее воскресенье октября?
Post by: Xray_Linux_Root on October 29, 2007, 11:16:36
Кто подскажет способ вычисления последнего воскресенья октября месяца скриптом?
По идее должен быть способ проще, чем резать вывод команды cal.
Title: Скриптом вычислить послденее воскресенье октября?
Post by: never hood on October 29, 2007, 11:34:31
Quote from: Xray_Linux_Root
Кто подскажет способ вычисления последнего воскресенья октября месяца скриптом?
По идее должен быть способ проще, чем резать вывод команды cal.
perldoc Date::Manip
Title: Скриптом вычислить послденее воскресенье октября?
Post by: Xray_Linux_Root on October 29, 2007, 12:22:48
Спасибо!

Всё время сказать забываю, что лучше bash и бианрники на Си

Мой вариант:
Code: [Select]
#!/bin/sh
LC_ALL=C

DATE_REQ=`date -d "last sunday this month" +%d-%m`
DATE_NOW=`date +%d-%m`
if [ "$DATE_REQ" == "$DATE_NOW" ]; then
    echo test
fi

Можно конечно и -%m выкинуть.
Title: Скриптом вычислить послденее воскресенье октября?
Post by: never hood on October 29, 2007, 12:44:55
Поведал бы, зачем это нужно?
Уж сколько лет за консолью, а задачи такой не стояло...
Title: Скриптом вычислить послденее воскресенье октября?
Post by: Xray_Linux_Root on October 29, 2007, 12:59:34
Quote from: never hood
Поведал бы, зачем это нужно?
Уж сколько лет за консолью, а задачи такой не стояло...
Не вопрос как говорится
Юзается в одной, обслуживаемой мной конторе, FoxPro под ляликс, так вот два раза в год из-за перехода на зимнее время и обратно на летнее время встаёт проблема - смены часового пояса передаваемого в виде переменной FoxPro при его запуске.
Как решение было начато использование двух идентичных файлов tz.winter и tz.summer в которых естественно различается только одна строка устанавливающая эту переменную TZ. А вот этот скриптик нужен просто чтобы переставлять символическую ссылку с одного файла на другой.

Т.к. в perl я не в зуб ногой, bash как то роднее, то и состряпал на bash.

Теперь осталось повесить сей скрипт в cron чтобы выполнялся каждое воскресенье в марте и октябре месяце.
Title: Скриптом вычислить послденее воскресенье октября?
Post by: Xray_Linux_Root on November 01, 2007, 12:19:08
Должен заметить, что на этом скрипте всё не закончилось....
Т.к. комбинация last sunday this month, как выснилось, выводит почему то дату воскресенья текущей недели
Title: Скриптом вычислить послденее воскресенье октября?
Post by: nuclight on November 01, 2007, 14:08:18
Мда, много курил info date, так нихрена и не удалось подобрать. То есть оно конечно выводит, но это пока дата еще не ушла далеко.

master:~# date --date="$(date +%Y-10-31) -1 week"
Срд Окт 24 01:00:00 NOVST 2007
master:~# date --date="$(date +%Y-10-31) last Sunday"
Срд Окт 31 00:00:00 NOVT 2007
master:~# date --date="last Sunday"
Вск Окт 28 00:00:00 NOVST 2007
master:~# date --date="last Thursday"
Чтв Окт 25 00:00:00 NOVST 2007
master:~# date --date="last Friday"
Птн Окт 26 00:00:00 NOVST 2007
master:~# date --date="last Monday"
Пнд Окт 29 00:00:00 NOVT 2007
master:~# date --date="2007-10-31 last Sunday"
Срд Окт 31 00:00:00 NOVT 2007

А вот во фре будет просто: date -v1d -v11m -v-1d -v-sun

Можно было бы конечно предложить в кроне указать диапазон для дней 25-31 и день недели, но он будет трактовать это не как AND, а как OR, т.е. выполнит в любой день. Впрочем, можно указать что-то одно из, и в скрипте уже указать дополнительное условие для текущего дня.
Title: Скриптом вычислить послденее воскресенье октября?
Post by: Xray_Linux_Root on November 01, 2007, 17:03:19
Нда... я и остановился на таком варианте, с дополнительным условием  

Code: [Select]
#!/bin/sh
LC_ALL=C

DATE_REQ=`date -d "last sunday this month" +%d`
DATE_NOW=`date +%d`

if [ "$DATE_REQ" -ge "25" ]; then
    if [ "$DATE_REQ" == "$DATE_NOW" ]; then
        echo test
    fi
fi