如何使用bash甚至perl检查今天是否是周末?
我想阻止某些程序在周末运行。
答案 0 :(得分:65)
您可以使用:
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
答案 1 :(得分:13)
case "$(date +%a)" in
Sat|Sun) echo "weekend";;
esac
答案 2 :(得分:6)
这实际上是一个令人难以置信的难题,因为谁说“周末”意味着周六和周日...“周末”的构成实际上可能因文化而异(例如在以色列,周日工作人员和周五关闭)。虽然您可以使用date
命令获取日期,但是如果要以适用于所有用户的方式实现此功能,则需要存储一些其他数据,以指示每个语言环境的周末构成。如果你只针对一个国家,那么在其他答案中提出的解决方案将有效......但是要记住这里做出的假设总是好的。
答案 3 :(得分: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);
...
$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
答案 4 :(得分:2)
printf也有日期
printf -v day '%(%a)T'
case $day in
Sat|Sun) echo "Hooray!";;
esac
答案 5 :(得分:0)
我不太确定这是否适合此问题,但我想与他人分享,以帮助他人,这是我所寻找的最接近Stack的问题。
这是我在启动计算机时用于启动应用程序的外壳程序脚本,该应用程序无法在周末连接到其服务器(由于该服务不在周末运行,因此该服务器停机以进行维护(外汇交易应用程序))
有关此脚本的信息,d是1到7(星期一到星期日)h是24时。您可以将其调整为自己的设置,也许您有一个星期中的维护或任何其他原因。这是我有史以来第一个shell脚本,所以我敢肯定有更好的方法,如果有人要进行编辑,请随时审核以接受(或其他人可以做)
#!/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
答案 6 :(得分:0)
我喜欢这种在工作日运行程序的方式:
[[ $(date +%u) -lt 6 ]] && weekday-program
结构有点棘手,但结构紧凑且易于添加。