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

时间:2010-08-16 01:22:02

标签: perl bash scripting

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

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

7 个答案:

答案 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

https://ideone.com/wU7C0c-演示

答案 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

结构有点棘手,但结构紧凑且易于添加。