如何检查今天是不是是 bash 的周末?

Posted

技术标签:

【中文标题】如何检查今天是不是是 bash 的周末?【英文标题】:How to check if today is a weekend in bash?如何检查今天是否是 bash 的周末? 【发布时间】:2011-03-30 05:39:31 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

你可以使用类似的东西:

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

【讨论】:

如何检查是否是工作日?相反 - 如果 [ ![ $(date +%u) -gt 5 ]] ,这将起作用;然后fi @Andrei,查看更新:我只使用-lt 6 而不是-gt 5 啊我的意思是 - -if [[ $(date +%u) -lt 6 ] 不是星期天 0,星期六 6 吗?? @lonewarrior556,不,肯定是星期一 1 到星期日 7。我怀疑你是在考虑 C/C++ 中的 tm_wday time/ctime 东西。尝试执行date ; date +%u,你就会明白我的意思了。【参考方案2】:
case "$(date +%a)" in 
  Sat|Sun) echo "weekend";;
esac

【讨论】:

请注意,Sat/Sun 取决于区域设置。【参考方案3】:

这实际上是一个令人惊讶的难题,因为谁能说“周末”是指周六和周日……“周末”的构成实际上可能因文化而异(例如,在以色列,人们在周日工作,周五离开)。虽然您可以使用date 命令获取日期,但如果您要以适用于所有用户的方式实现此功能,则需要存储一些额外的数据来指示每个区域设置的周末构成。如果您只针对一个国家/地区,那么其他答案中提出的解决方案将有效......但记住这里所做的假设总是好的。

【讨论】:

好点。还需要考虑“长周末”,例如英国的银行假日星期一。这就是为什么人们为他们的问题提供一些背景信息是有帮助的,这样回答的人就知道什么是相关的,什么是不相关的...... 很好——在我的例子中,我指的是周六和周日。【参考方案4】:

使用 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 
    

【讨论】:

【参考方案5】:

printf 也有日期

printf -v day '%(%a)T'
case $day in 
    Sat|Sun) echo "Hooray!";;
esac

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

【讨论】:

【参考方案6】:

我不确定这是否适合这个问题,但我想分享它以帮助其他人,这是最接近我正在寻找的 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

【讨论】:

【参考方案7】:

我喜欢这种平日运行程序的方式:

[[ $(date +%u) -lt 6 ]] && weekday-program

结构有点复杂,但结构紧凑且易于添加。

【讨论】:

Cron 有自己的语法在工作日运行命令* * * * 1-5 user echo ok 你是对的。在大多数情况下,首选本机 cron 方式。但是,我建议的技巧仍然适用于 cron。例如,如果您计划一个包含一组操作的脚本,这些操作应按定义的顺序一个一个地执行,但在某些情况下应跳过某些操作。 如果有一些复杂的逻辑,我宁愿把它放在脚本中而不是在 crontab 中。

以上是关于如何检查今天是不是是 bash 的周末?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Bash 脚本中检查程序是不是存在?

如何在 Bash 中检查文件是不是为空?

如何动态检查 Bash 变量是不是存在? [复制]

如何使用 Bash 检查文件是不是包含特定字符串

如何检查程序是不是在 Windows 上的 Ubuntu 上的 Bash 中运行,而不仅仅是普通的 Ubuntu?

如何检查是不是在 bash 脚本中以 root 身份运行