代码之家  ›  专栏  ›  技术社区  ›  vehomzzz

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

  •  31
  • vehomzzz  · 技术社区  · 16 年前

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

    5 回复  |  直到 11 年前
        1
  •  85
  •   paxdiablo    6 年前

    您可以使用以下方法:

    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
    
        2
  •  15
  •   ghostdog74    16 年前
    case "$(date +%a)" in 
      Sat|Sun) echo "weekend";;
    esac
    
        3
  •  7
  •   Michael Aaron Safyan    16 年前

    这实际上是一个令人惊讶的难题,因为谁能说“周末”是指星期六和星期天。。。构成“周末”的因素实际上可能因文化而异(例如,在以色列,人们星期天工作,星期五休息)。而你可以和 date 命令时,如果要以适用于所有用户的方式实现此功能,则需要存储一些额外的数据,以指示每个区域设置的周末是由什么组成的。如果你只针对一个国家,那么其他答案中提出的解决方案就会奏效。。。但是记住这里的假设总是好的。

        4
  •  5
  •   Community Mohan Dere    6 年前

    使用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
        5
  •  2
  •   Ivan    6 年前

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

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

        6
  •  0
  •   CodingInTheUK    7 年前

    我不确定这是否适合这个问题,但我想分享这个问题,以帮助其他人,这是最接近堆栈的问题,我正在寻找。

    关于这个脚本的信息,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
  •  0
  •   Eugene Ionichev    6 年前

    我喜欢这种在工作日运行程序的方式:

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

    这是一个有点棘手的建设,但紧凑,易于添加。

    推荐文章