【问题标题】:Determine Winter or Summertime due to month (UTC Timezone) [duplicate]按月份确定冬季或夏季时间(UTC 时区)[重复]
【发布时间】:2016-11-07 00:07:48
【问题描述】:

我正在编写的 bash 脚本遇到问题。我对 bash 脚本还很陌生,所以我很乐意提供一些帮助或意见。

我们正在运行一个设备服务器。不幸的是,我不允许更改此服务器的时区。所以我需要使用 UTC 时区。

现在我想创建应该在晚上 8 点在我们的维护窗口中自动运行的脚本。现在的问题是,UTC 不知道夏季/冬季时间之间的差异。

所以我尝试了以下方法:

#!/bin/bash
array_time=("Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct")

ZONE=`date | cut -c 5-7`
echo $ZONE

if [[ " ${array_time[@]} " == " ${ZONE} " ]]; then
echo "SUMMERTIME CRONJOB"
else
echo "WINTERTIME CRONJOB"
fi

但由于某种原因,这是输出:

./test.sh
Jul
WINTERTIME CRONJOB

因此,即使值 Jul 是 array_time 变量的一部分,它也会转到 if 条件的 else 部分。我不确定为什么会这样。有人知道为什么吗?或者也许有人知道如何解决这个问题?

感谢您的帮助

干杯

【问题讨论】:

    标签: arrays bash time


    【解决方案1】:

    根据您最初的目标,您可以在本地修改时区,例如:

    TZ=EST date
    Tue Jul  5 03:54:39 EST 2016
    

    TZ=EST date:在执行date命令时,将TZ环境变量设置为EST

    您可以使用正则表达式或fgrep 在数组中搜索月份。

    试试这个:

    #!/bin/bash
    array_time=("Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct")
    
    ZONE=$(date "+%b")
    
    if [[ "${array_time[@]}" =~ "${ZONE}" ]] ; then
      printf "SUMMERTIME CRONJOB\n"
    else
      printf "WINTERTIME CRONJOB\n"
    fi
    

    您也可以使用for 循环。

    更喜欢使用$(...) 来执行命令。

    鼓励使用printf 而不是echo

    ----

    历史的第一个答案:

    #!/bin/bash
    array_time=("Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct")
    
    ZONE=$(date "+%b")
    
    if printf "%s\n" ${array_time[@]} | fgrep -q "${ZONE}" ; then
      printf "SUMMERTIME CRONJOB\n"
    else
      printf "WINTERTIME CRONJOB\n"
    fi
    

    【讨论】:

    • 您好,Jay,感谢您的回答。我刚刚对其进行了测试,并且效果很好。非常感谢您的快速答复
    • 谢谢你的第二个回答,下午会测试这个。还要感谢您对 printf / echo 的解释。我仍然习惯于回声,所以我必须改变这个
    【解决方案2】:

    你的问题出在:

    [[ " ${array_time[@]} " == " ${ZONE} " ]]
    

    这永远不会是真的,因为${array_time[@]} 将扩展为:

    [[ " Apr May Jun Jul Aug Sep Oct " == " ${ZONE} " ]]
    

    并且$ZONE 永远不会等于该字符串,使用以下方法将起作用:

    [[ " ${array_time[@]} " == *" ${ZONE} "* ]]
    

    另请注意,您可以使用date +'%b' 代替date | cut ...

    【讨论】:

    • 您好,感谢您的反馈以及说明我的脚本无法运行的原因。现在我很清楚为什么 == ${ZONE} 不能那样工作。我会在下午测试它。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 2019-06-18
    • 2020-11-26
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    相关资源
    最近更新 更多