基数值太大(错误标记为“0925”)

时间:2011-03-28 07:20:36

标签: bash ubuntu octal

我的bash脚本中有以下逻辑:

#!/bin/bash
local_time=$(date +%H%M)

if (( ( local_time > 1430  && local_time < 2230 ) || ( local_time > 0300 && local_time < 0430 ) )); then
 # do something
fi

偶尔,我会收到标题中指定的错误(08xx以上任何时间出现以触发错误)。

有关如何解决此问题的任何建议吗?

我在Ubuntu 10.04 LTS上运行

[编辑]

我按照SiegeX的建议修改了脚本,现在,我收到错误:[: 10#0910: integer expression expected

任何帮助?

3 个答案:

答案 0 :(得分:15)

bash将您的号码视为八进制,因为前导零

来自man bash

  

前导0的常量是   解释为八进制数。一个   前导0x或0X表示十六进制。          否则,数字采用[base#] n的形式,其中base是小数   2至64之间的数字代表 -          算术基数,n是该基数中的数字。如果#是   省略,然后使用基数10.

要解决此问题,请指定基数为10的前缀

#!/bin/bash
local_time="10#$(date +%H%M)"

if (( ( local_time > 1430  && local_time < 2230 ) || ( local_time > 0300 && local_time < 0430 ) )); then
 # do something
fi

答案 1 :(得分:4)

根据this blog的建议,这有效:

#!/bin/bash
local_time=`date +%H%M`
local_time="$(( 10#$local_time ))"

if (( ( local_time > 1430  && local_time < 2230 ) || ( local_time > 0300 && local_time < 0430 ) )); then
    echo "it is time!"
fi

答案 2 :(得分:1)

在条件测试中解决问题

由于各种原因(例如文件命名问题),可能会强制保留变量。如果是这种情况,请通过明确指定基础 10#来解决 条件测试中的问题:

#!/bin/bash
local_time=$(date +%H%M)

if (( ( 10#${local_time} > 1430  && 10#${local_time} < 2230 ) || ( 10#${local_time} > 0300 && 10#${local_time} < 0430 ) )); then
 # do something
fi