我有以下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)