如何检查今天是否是bash周末?

veh*_*zzz 33 bash scripting perl

如何检查今天是否是使用bash甚至perl的周末?

我想阻止某些程序在周末运行.

pax*_*blo 67

您可以使用:

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

date +%u为您提供从星期一(1)到星期日(7)的星期几.如果它大于5(星期六= 6或星期日= 7),那就是周末.

所以你可以把这样的东西放在脚本的顶部:

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

要检查它是否是工作日,请使用:

if [[ $(date +%u) -lt 6 ]] ; then
Run Code Online (Sandbox Code Playgroud)

  • 我的意思是 - 如果[[$(date +%u)-lt 6] (2认同)
  • @lonewarrior556,不,绝对是周一 1 到周日 7。我怀疑您正在考虑 C/C++ `time/ctime` 中的 `tm_wday`。尝试执行`date; date +%u` 你就会明白我的意思。 (2认同)

gho*_*g74 13

case "$(date +%a)" in 
  Sat|Sun) echo "weekend";;
esac
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于英语以外的语言环境. (2认同)
  • 请注意,“Sat”/“Sun”取决于区域设置。 (2认同)

Mic*_*yan 6

这实际上是一个令人难以置信的难题,因为谁说"周末"意味着周六和周日......什么构成"周末"实际上可能因文化而异(例如在以色列,人们在星期天工作,周五休息).虽然您可以使用该date命令获取日期,但是如果要以适用于所有用户的方式实现此功能,则需要存储一些附加数据,以指示每个语言环境的周末构成.如果你只针对一个国家,那么在其他答案中提出的解决方案将起作用......但是要记住这里做出的假设总是好的.


Gre*_*con 5

使用Perl的localtime运算符.

当地时间

将time函数返回的时间转换为9元素列表,并分析本地时区的时间.通常使用如下:

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

...

$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