Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash shell脚本中的if条件-错误标记-日期输出中的数字8和9_Bash_Shell_Unix - Fatal编程技术网

Bash shell脚本中的if条件-错误标记-日期输出中的数字8和9

Bash shell脚本中的if条件-错误标记-日期输出中的数字8和9,bash,shell,unix,Bash,Shell,Unix,我有以下shell脚本: prodStartTime="213000" prodEndTime="235959" currentTime=`date +"%H%M%S"` if [[ ${currentTime} -ge ${prodStartTime#0} && ${currentTime} -le ${prodEndTime#0} ]]; then echo "Something .........." else echo "El

我有以下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 +"%k%M%S"`

工作日期:

%k小时,空间填充(0..23);与%\u H相同


%小时(00..23)

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

为防止出现这种情况,请通过以下方式更改日期分配,即去掉前导零(如果有的话):

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

date
中阅读有关零填充的更多信息,请点击此处:

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

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

10#
前缀强制基数为10。参见。

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

prodStartTime=213000
prodEndTime=235959
currentTime="$(date +%H%M%S)"

if [[ $currentTime > $prodStartTime && $currentTime < $prodEndTime ]] ; then
    echo "Something .........."  
else
    echo "Else part Something .........."  
fi
prodStartTime=213000
prodEndTime=235959
currentTime=“$(日期+%H%M%S)”
如果[[$currentTime>$prodStartTime&$currentTime<$prodEndTime]];然后
呼应“某物……”
其他的
呼应“其他部分……”
fi

您使用的是哪个平台?对我来说很好,你是如何运行脚本的?linux平台。自动cron作业。。如果我手动运行获取错误\./a.sh抱歉输入错误。/a.sh请注意,您的错误消息与发布的代码不一致
productStartTime
不是以0开头的,虽然
currentTime
可能是。但是今晚午夜8分钟后同样的问题会发生!同样的问题将在今晚午夜8分发生!
prodStartTime=213000
prodEndTime=235959
currentTime="$(date +%H%M%S)"

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