Как проверить, является ли сегодня выходным, используя bash или даже perl?
Я хочу, чтобы определенные программы запускались в выходные.
Как проверить, является ли сегодня выходным, используя bash или даже perl?
Я хочу, чтобы определенные программы запускались в выходные.
Вы можете использовать:
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
case "$(date +%a)" in
Sat|Sun) echo "weekend";;
esac
Это на самом деле удивительно сложная проблема, потому что кто скажет, что "выходные" означает субботу и воскресенье... что составляет "выходные", может фактически различаться по культурам (например, в Израиле, люди работают в воскресенье и имеют пятницу выкл). Хотя вы можете получить дату с помощью команды date
, вам нужно будет сохранить некоторые дополнительные данные, указывающие, что составляет выходные для каждой локали, если вы должны реализовать это так, как это работает для всех пользователей. Если вы нацелитесь только на одну страну, тогда решение, поставленное в других ответах, будет работать... но всегда полезно иметь в виду сделанные здесь предположения.
Использовать 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
Я не совсем уверен, подходит ли это для этого вопроса, но я хотел поделиться этим, чтобы помочь другим, и это самый близкий вопрос стека к тому, что я искал.
Это сценарий оболочки, который я использую для запуска приложения, когда я загружаю свой компьютер, приложение не может подключиться к своему серверу в выходные дни (его не нужно обслуживать, так как сервис не работает в выходные дни (приложение для торговли на форекс).
Информация об этом сценарии, 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