【发布时间】:2011-03-30 05:39:31
【问题描述】:
如何使用 bash 甚至 perl 检查今天是否是周末?
我想阻止某些程序在周末运行。
【问题讨论】:
如何使用 bash 甚至 perl 检查今天是否是周末?
我想阻止某些程序在周末运行。
【问题讨论】:
你可以使用类似的东西:
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 on the weekend.'
exit
fi
或者更简洁:
[[ $(date +%u) -gt 5 ]] && { echo "Weekend, not running"; exit; }
要检查是否是工作日,请使用相反的含义(< 6 而不是> 5):
$(date +%u) -lt 6
【讨论】:
-lt 6 而不是-gt 5。
tm_wday time/ctime 东西。尝试执行date ; date +%u,你就会明白我的意思了。
case "$(date +%a)" in
Sat|Sun) echo "weekend";;
esac
【讨论】:
Sat/Sun 取决于区域设置。
这实际上是一个令人惊讶的难题,因为谁能说“周末”是指周六和周日……“周末”的构成实际上可能因文化而异(例如,在以色列,人们在周日工作,周五离开)。虽然您可以使用date 命令获取日期,但如果您要以适用于所有用户的方式实现此功能,则需要存储一些额外的数据来指示每个区域设置的周末构成。如果您只针对一个国家/地区,那么其他答案中提出的解决方案将有效......但记住这里所做的假设总是好的。
【讨论】:
使用 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 表示星期三。
例如:
$ 日期
2010 年 8 月 15 日星期日 20:27:29 CDT
$ perl -le '我的 $wday = (本地时间)[6];
打印 $wday >= 1 && $wday
【讨论】:
printf 也有日期
printf -v day '%(%a)T'
case $day in
Sat|Sun) echo "Hooray!";;
esac
【讨论】:
我不确定这是否适合这个问题,但我想分享它以帮助其他人,这是最接近我正在寻找的 Stack 问题。
这是我在启动计算机时用于启动应用程序的 shell 脚本,该应用程序在周末无法连接到其服务器(由于该服务在周末不运行,因此它停止维护(外汇交易应用程序) .
关于这个脚本的信息,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
【讨论】:
我喜欢这种平日运行程序的方式:
[[ $(date +%u) -lt 6 ]] && weekday-program
结构有点复杂,但结构紧凑且易于添加。
【讨论】:
* * * * 1-5 user echo ok