The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Как задать последний день прошлого месяца?"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Как задать последний день прошлого месяца?"  +/
Сообщение от nastr email(??) on 27-Июн-09, 11:55 
На удалённом сервере каждый час создаётся новый файл, который именуется так - filename_$(date "+%Y_%m_%d_%H")_00_00.cvs, в кроне установлен скрипт который запскается в 01 минуту каждый час, и крирует по ftp файл за предидущий час. Задача казалось бы не сложная.
задаю переменные для указания что копировать по ftp:
if [ `date "+%H"` -eq 00 ]
then
var=filename_$(date "+%Y_%m")_$(expr $(date "+%d") - 1)_23_00_00.cvs
else
var=filename_$(date "+%Y_%m_d")_$(expr $(date "+%H") - 1)_00_00.cvs
fi
Но как быть если к примеру сегодня 01 число?
Ведь $(expr $(date "+%d") - 1) выдаст мне 00, а мне жунно к примеру 31 (количество дней в прошлом месяце).
Как задать предидущий день, час, не по средствам функции expr, вычитания единицы?
Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Как задать последний день прошлого месяца?"  +/
Сообщение от Andrey (??) on 27-Июн-09, 21:47 
если сегодня 1-е то можно использовать
date -d yesterday +%d
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Как задать последний день прошлого месяца?"  +/
Сообщение от Sarge (??) on 27-Июн-09, 23:02 
вообще вся задача решается с помощью добавления к date параметра:
-d "-1 hour"
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Как задать последний день прошлого месяца?"  +/
Сообщение от allez (ok) on 28-Июн-09, 17:49 
>Как задать предидущий день, час, не по средствам функции expr, вычитания единицы?

А какая ОС на сервере установлена? Если Linux, то приведенные выше советы сработают,
если же что-то другое - то очень даже могут и не сработать.

P. S. Сообщать о том, какая ОС используется - элементарное правило хорошего тона. ;-)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Как задать последний день прошлого месяца?"  +/
Сообщение от nastr email(??) on 30-Июн-09, 16:51 
>А какая ОС на сервере установлена? Если Linux, то приведенные выше советы
>сработают,
>если же что-то другое - то очень даже могут и не сработать.
>P. S. Сообщать о том, какая ОС используется - элементарное правило хорошего
>тона. ;-)

Спасибо большое за совет.
На одном сервере под Win2003, установлен cygwin, на нём date -d работает нормально.
Остальные сервера работают под SunOS там date -d не работает.
Пока что на срверах под SunOS использую слудущую конструкцию скрипта
g=0; while true
do
if [ $(date "+%M") -eq 00 ] && [ $g -ne 1 ] && [ $(date "+%H") -ne 00 ]
then
sleep 3
newstr=$(tail -1 perf_VoMSRechargeExt_`date "+%Y_%m_%d_$(expr $(date "+%H") - 1)"`*.csv)
case $newstr in
$str);;
*) echo $newstr;;
esac
g=1
sleep 13
elif [ $(date "+%H") -eq 00 ] && [ $g -ne 1 ] && [ $(date "+%M") -eq 00 ]
then
sleep 3
newstr=$(tail -1 perf_VoMSRechargeExt_`date "+%Y_%m_$(expr $(date "+%d") - 1)"_23`*.csv)
case $newstr in
$str);;
*) echo $newstr;;
esac
g=1
sleep 13
else
newstr=$(tail -1 perf_VoMSRechargeExt_`date "+%Y_%m_%d_%H"`*.csv)
case $newstr in
$str);;
*) echo $newstr
str=$newstr;;
esac
fi
if [ $(date "+%M") -eq 01 ] && [ $(date "+%S") -lt 05 ]
then
g=0
fi
done

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Как задать последний день прошлого месяца?"  +/
Сообщение от Andrey Mitrofanov on 30-Июн-09, 15:22 
1// К тому вопросу, что в теме: показать дату дня перед первым числом сего месяца:

$ date -d "`date +%Y-%m`-01 -1 day" +%F
2009-05-31
$ date +%F
2009-06-30
$ _

- без предположения, что сегодя - первое. И год тоже "переносится":

$ date -d "`date -d 2009-01-10 +%Y-%m`-01 -1 day" +%F
2008-12-31
$ _

2// По поводу "только в линуксе", на самом деле "в date из GNU coreutils".

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Как задать последний день прошлого месяца?"  +/
Сообщение от allez (ok) on 30-Июн-09, 17:18 
>2// По поводу "только в линуксе", на самом деле "в date из GNU coreutils".

Я совсем не уверен в том, что вопрошающий в курсе таких тонкостей,
как существование GNU-, BSD- и прочих версий различных утилит.
Оттого и не мудрствовал лукаво, ибо GNU coreutils практически только
в Линуксе по умолчанию и устанавливаются. :-)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру