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