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



我有以下shell脚本:

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")

这是因为带领先零的时间字符串被解释为八分音数字而不是十进制。

为了防止这种情况,请以这种方式更改您的日期分配,如果有

currentTime=`date +"%-H%M%S"`

在此处阅读有关date中零填充的更多信息:从日期删除领先的零

只需确保bash在radix 10中理解您的号码,如下所示:

currentTime=$(( 10#$(date +"%H%M%S") ))

10#前缀力radix 10.参见参考手册的本段的结尾。

我认为最简单,最清晰的修复是使用 string 比较,而不是 numeric 比较:

prodStartTime=213000
prodEndTime=235959
currentTime="$(date +%H%M%S)"
if [[ $currentTime > $prodStartTime && $currentTime < $prodEndTime ]] ; then
    echo "Something .........."  
else
    echo "Else part Something .........."  
fi

您可以更改其中之一;

currentTime=`date +"%k%M%S"`

currentTime=`date +"_H%M%S"`

男人日期:

%k小时,空间填充(0..23);与%_h

相同

%h小时(00..23)

最新更新