Я хотел бы запустить скрипт bash, который запускается каждый день и проверяет текущую дату, чтобы узнать, является ли это вторым по последний день месяца, и если он выполняется определенные вещи.Bash script, получить второй по последний день текущего месяца
2
A
ответ
2
Использование Дата GNU
today=$(date +%Y-%m-%d)
next_to_last=$(date -d "$(date +%Y-%m-01) + 1 month - 2 days" +%Y-%m-%d)
if [[ $today == $next_to_last ]]; then
echo "it is the 2nd last day of the month"
fi
«внутренний» дата вызова возвращает текущий год и месяц, и мы жёстко «01» в течение дня => в первый день этого месяца. Мы добавляем 1 месяц, затем вычитаем 2 дня.
1
Вы можете сделать это с этим вызовом:
date --date="$(date --date "next month" +'%Y-%m-01') -2 days"
Позволяет анализировать части:
- наружный слой:
date --date="$MAGIC -2 days"
если вместо$MAGIC
мы могли бы получить в первый день следующего месяца, GNU дата--date
функция поможет нам: попробуйте сdate --date="2016-08-01 -2 days"
- внутренний слой: вместо
$MAGIC
мы используем то, что возвращаетсяdate --date "next month" +'%Y-%m-01'
: это дает нам первое число следующего месяца, снова используя--date
вариант даты GNU - можно либо использовать две строки или использовать подстановки команды с
$(...)
0
Если вы не имеете дату GNU ты по мог бы сделать что-то вроде:
set -- $(date "+%d %m %Y")
cal ${2} ${3} | nawk '{NF&&n=($NF-2)};END{exit(n==d)?0:1}' d=${1}
((!$?)) && echo "do certain things"
Спасибо, что сделал трюк! –