скрипт оболочки bash для даты вчерашнего дня (последний рабочий день) - PullRequest
11 голосов
/ 22 марта 2011

Я пишу bash-скрипт, который должен напечатать дату последнего рабочего дня. Например, если скрипт выполняется в понедельник, он напечатает дату последней пятницы.

Я обнаружил, что это печатает вчерашнюю дату:

date -d '1 day ago' +'%Y/%m/%d'

Я также знаю, что могу получить день недели, используя это утверждение

date +%w

Я хочу объединить эти два оператора, чтобы получить небольшой вспомогательный скрипт, который печатает требуемую дату. Логика выглядит примерно так (примечание: это псевдокод - я никогда не писал сценарий bash)

DAY_OF_WEEK = `date +%w`
if (%DAY_OF_WEEK == 1)
   LOOK_BACK = 3
elif   
   LOOK_BACK = 1
fi

echo `date -d '%LOOK_BACK day ago' +'%Y/%m/%d'`

Может ли кто-нибудь помочь, исправив приведенный выше псевдокод?

(я работаю в Ubuntu 10.0.4)

Ответы [ 5 ]

17 голосов
/ 22 марта 2011

Вы были так близко:

day_or_week=`date +%w`
if [ $day_or_week == 1 ] ; then
  look_back=3
else
  look_back=1
fi

date -d "$look_back day ago" +'%Y/%m/%d'
6 голосов
/ 18 ноября 2016

Воскресенье также необходимо проверить.

DAY_OF_WEEK=`date +%w`
if [ $DAY_OF_WEEK = 0 ] ; then
  LOOK_BACK=2
elif [ $DAY_OF_WEEK = 1 ] ; then
  LOOK_BACK=3
else
  LOOK_BACK=1
fi

date -d "$LOOK_BACK day ago" +'%Y/%m/%d'
3 голосов
/ 22 марта 2011

Я использую Mac, поэтому моя команда date не имеет такой же флаг -d, как ваш, но, похоже, должно работать следующее, если она ведет себя так, как вы указали:

if [[ $(date +%w) == 1 ]]
then
    LOOK_BACK=3
else
    LOOK_BACK=1
fi

date -d "${LOOK_BACK} day ago" +%Y/%m/%d
1 голос
/ 14 августа 2017

Более краткая форма с использованием встроенного "тройного" выражения bash:

[[ $(date +%w) == 1 ]] && days=3 || days=1
date -d "$days day ago" +"%Y-%m-%d"
0 голосов
/ 15 мая 2014

Для OSX (протестировано на 10.9.2 и 10.13.4), поэтому, вероятно, в любой среде, где вы используете дату BSD.

if [ $(date +%w) == 1 ] ; then
    date -v-3d +'%Y/%m/%d'
else
    date -v-1d +'%Y/%m/%d'
fi

Вы можете проверить, используете ли вы дату BSD по

$ man date | grep "BSD General"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...