首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shell脚本中的if条件-错误令牌-日期输出中的数字8和9

shell脚本中的if条件-错误令牌-日期输出中的数字8和9
EN

Stack Overflow用户
提问于 2016-12-23 05:18:25
回答 4查看 244关注 0票数 1

我有以下shell脚本:

代码语言:javascript
复制
prodStartTime="213000"  
prodEndTime="235959"  
currentTime=`date +"%H%M%S"`  

if [[ ${currentTime} -ge ${prodStartTime#0} && ${currentTime} -le ${prodEndTime#0} ]];  
then  
    echo "Something .........."  
else  
    echo "Else part Something .........."  
fi  

获取误差

“第5行: prodStartTime: 043058:对基值太大(错误标记为"043058")"

当8或9小时或分钟内出现此错误时会发生此错误。

示例:

(错误标记为"043058")

(错误标记为"043059")

(错误标记为"043850")

(错误标记为"043901")

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-12-23 19:01:30

我认为最简单和最清晰的解决方法是使用字符串比较,而不是数字比较:

代码语言:javascript
复制
prodStartTime=213000
prodEndTime=235959
currentTime="$(date +%H%M%S)"

if [[ $currentTime > $prodStartTime && $currentTime < $prodEndTime ]] ; then
    echo "Something .........."  
else
    echo "Else part Something .........."  
fi
票数 0
EN

Stack Overflow用户

发布于 2016-12-23 07:22:18

这是因为带前导零的时间字符串被解释为八进制数,而不是十进制。

要防止这种情况发生,请以这样的方式更改日期分配,如果有的话,删除前导零:

代码语言:javascript
复制
currentTime=`date +"%-H%M%S"`

date中阅读更多关于零填充的内容:从日期中移除前导零

票数 1
EN

Stack Overflow用户

发布于 2016-12-23 18:40:38

只需确保Bash理解基数为10的数字,如下所示:

代码语言:javascript
复制
currentTime=$(( 10#$(date +"%H%M%S") ))

10#前缀强制基数为10。参见参考手册的这一段的结尾。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41295574

复制
相关文章

相似问题

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