Как проверить, является ли сегодня выходной в bash?

Как проверить, является ли сегодня выходной с использованием bash или даже perl?

Я хочу запретить запуск некоторых программ в выходные.

33
задан Ciro Santilli 新疆改造中心法轮功六四事件 4 April 2015 в 09:27
поделиться

4 ответа

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

pax> if [[ $(date +%u) -gt 5 ]] ; then
   > echo weekend
   > fi

date +% u дает вам день недели с понедельника (1) по воскресенье (7). Если он больше 5 (суббота = 6 или воскресенье = 7), то это выходные.

Таким образом, вы можете поместить что-то вроде этого в начало вашего скрипта:

if [[ $(date +%u) -gt 5 ]] ; then
    echo 'Sorry, you cannot run this program today.'
    exit
fi

Чтобы проверить, является ли это будний день, используйте:

if [[ $(date +%u) -lt 6 ]] ; then
67
ответ дан 27 November 2019 в 17:41
поделиться

На самом деле это на удивление сложная проблема, потому что кто может сказать, что «выходные» означает субботу и воскресенье ... то, что составляет «выходные», на самом деле может варьироваться в зависимости от культуры (например, в Израиле, люди работают по воскресеньям, а в пятницу - выходной). Хотя вы можете получить дату с помощью команды date , вам нужно будет сохранить некоторые дополнительные данные, указывающие, что составляет выходные для каждой локали, если вы хотите реализовать это способом, который работает для всех пользователей. Если вы нацеливаетесь только на одну страну, то решение, изложенное в других ответах, будет работать ... но всегда полезно помнить о сделанных здесь предположениях.

6
ответ дан 27 November 2019 в 17:41
поделиться

Используйте оператор Perl localtime .

localtime

Преобразует время, возвращаемое функцией времени, в список из 9 элементов, в котором время анализируется для местного часового пояса. Обычно используется следующим образом:

 # 0 1 2 3 4 5 6 7 8
($ sec, $ min, $ hour, $ mday, $ mon, $ year, $ wday, $ yday, $ isdst) = местное время (время);

$ wday - это день недели, где 0 означает воскресенье, а 3 означает среду.

Например:

$ date
Sun Aug 15 20:27:29 CDT 2010

$ perl -le 'my $wday = (localtime)[6];
            print $wday >= 1 && $wday <= 5 ? "weekday" : "weekend"'
weekend
5
ответ дан 27 November 2019 в 17:41
поделиться
case "$(date +%a)" in 
  Sat|Sun) echo "weekend";;
esac
13
ответ дан 27 November 2019 в 17:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: