Назад | Перейти на главную страницу

Скрипты Bash: получите неделю месяца, указав понедельник этой недели.

Я хотел бы получить номер понедельника текущей недели с помощью сценария bash в Ubuntu Linux.

Пример и информация: прошлый понедельник (30 октября) был пятым понедельником октября, а среда была первым днем ​​и, очевидно, первой средой ноября. Сценарий, который я пытаюсь создать, будет проверять, есть ли в процедуре резервного копирования правильный недельный носитель. У меня есть недели 1-5, доступные для СМИ. Скрипт запустится и проверит номер недели понедельника на текущей неделе. На этой неделе он проверит и обнаружит, что понедельник был пятым понедельником, то есть СМИ пятой недели должны присутствовать. На следующей неделе он проверит и обнаружит, что это первый понедельник, поэтому СМИ недели 1 должны присутствовать.

Скрипт будет запускаться ежедневно (пн-пт) и ссылаться только на номер недели понедельника. Имеется в виду понедельник, неделя 1, неделя 2, 3, 4, а в некоторые месяцы 5.

У меня есть команда даты с некоторой арифметикой, которая дает мне номер недели месяца, однако она будет делать это только на основе текущего дня. Это так:

$((($(date +%-d)-1)/7+1))

Надеюсь, я объяснил это достаточно хорошо, но это не слишком запутало.

Любая помощь будет оценена. Спасибо!

Мы можем сказать date чтобы вывод был основан на конкретной дате, а не на сегодняшнем, с аргументом -d. Допустимая строка формата - «последний понедельник», поэтому нам нужно только проверить, сегодня ли понедельник:

$ if [ "$(date +%A)" == "Monday" ]; then Monday="today"; else Monday="last Monday"; fi; echo $((($(date -d "$Monday" +%-d)-1)/7+1))
5