2016-07-23 2 views
2

Я хотел бы запустить скрипт bash, который запускается каждый день и проверяет текущую дату, чтобы узнать, является ли это вторым по последний день месяца, и если он выполняется определенные вещи.Bash script, получить второй по последний день текущего месяца

ответ

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 дня.

+0

Спасибо, что сделал трюк! –

1

Вы можете сделать это с этим вызовом:

date --date="$(date --date "next month" +'%Y-%m-01') -2 days" 

Позволяет анализировать части:

  1. наружный слой: date --date="$MAGIC -2 days" если вместо $MAGIC мы могли бы получить в первый день следующего месяца, GNU дата --date функция поможет нам: попробуйте с date --date="2016-08-01 -2 days"
  2. внутренний слой: вместо $MAGIC мы используем то, что возвращается date --date "next month" +'%Y-%m-01': это дает нам первое число следующего месяца, снова используя --date вариант даты GNU
  3. можно либо использовать две строки или использовать подстановки команды с $(...)
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"