Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

Итак, вы можете добавить что-то вроде этого в верхней части script:

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

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

if [[ $(date +%u) -lt 6 ]] ; then

Ответ 2

case "$(date +%a)" in 
  Sat|Sun) echo "weekend";;
esac

Ответ 3

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

Ответ 4

Использовать Perl localtime.

LocalTime

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

#  0    1    2     3     4    5     6     7     8
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

...

$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

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

Это сценарий оболочки, который я использую для запуска приложения, когда я загружаю свой компьютер, приложение не может подключиться к своему серверу в выходные дни (его не нужно обслуживать, так как сервис не работает в выходные дни (приложение для торговли на форекс).

Информация об этом сценарии, d от 1 до 7 (с понедельника по воскресенье), ч 24 раза. Вы можете настроить его в соответствии с вашими собственными настройками, возможно, у вас есть обслуживание в середине недели или по любой другой причине. Это мой первый сценарий оболочки, так что я уверен, что есть лучший способ, и если кто-то захочет внести изменения, не стесняйтесь, я рассмотрю его для принятия (или кто-то другой может сделать это)

#!/bin/bash
d=$(date +%u)
h=$(date +%H)
case $d in
    '5')
    # Friday after 10pm
    if (($h >= 22)) ; then  
        exit
    fi
    ;;
    '6')
    # all day saturday
        exit
    ;;
    '7')
    #sunday before 10pm
    if (($h < 22)) ; then  
        exit
    fi
    ;;
    *)
    # any other time run the program

    ;;
esac