首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据月份确定冬季或夏季(UTC时区)

根据月份确定冬季或夏季(UTC时区)
EN

Stack Overflow用户
提问于 2016-07-05 08:26:36
回答 2查看 240关注 0票数 3

我正面临一个我正在写的bash脚本的问题。我对bash脚本非常陌生,所以我很乐意得到一些帮助或输入。

我们正在运行一个Appliance。不幸的是,我不允许更改此服务器的时区。所以我需要和UTC时区合作。

现在我想创建一个脚本,它应该在下午8点在维护窗口中自动运行。现在的问题是,UTC不知道夏季和冬季之间的区别。

因此,我尝试了以下几点:

代码语言:javascript
复制
#!/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

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

代码语言:javascript
复制
./test.sh
Jul
WINTERTIME CRONJOB

因此,即使Jul值是array_time变量的一部分,它也会转到if条件的其他部分。我不知道为什么会这样。有人知道为什么吗?或者有人有更好的办法解决这个问题?

谢谢你的帮忙

干杯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-05 08:59:06

你的问题在于:

代码语言:javascript
复制
[[ " ${array_time[@]} " == " ${ZONE} " ]]

由于${array_time[@]}将被展开为:

代码语言:javascript
复制
[[ " Apr May Jun Jul Aug Sep Oct " == " ${ZONE} " ]]

$ZONE永远不等于该字符串,使用以下方法可以工作:

代码语言:javascript
复制
[[ " ${array_time[@]} " == *" ${ZONE} "* ]]

还请注意,您可以使用date +'%b'而不是date | cut ...

票数 1
EN

Stack Overflow用户

发布于 2016-07-05 08:42:53

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

代码语言:javascript
复制
TZ=EST date
Tue Jul  5 03:54:39 EST 2016

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

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

试一试:

代码语言:javascript
复制
#!/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

历史的第一个答案:

代码语言:javascript
复制
#!/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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38198600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档