【问题标题】:While comparing a date inside a file with the system date getting the error : line 7: 10#2020-12-09: value too great for base (error token is "09")在将文件中的日期与系统日期进行比较时出现错误:第 7 行:10#2020-12-09: value too great for base (error token is "09")
【发布时间】:2021-01-07 06:36:07
【问题描述】:
 #!/bin/bash
docker logs <container_name> | grep 'expiration date of' | tail -1 | cut -d ' ' -f 14 | cut -c 2-11 > /tmp/dt

dateFile=`cat /tmp/dt`

NOW=$( date +%F )

 if [ $((10#$dateFile)) -gt ${NOW} ]; then
   echo No Renewal Required
else
   echo Renewal Required
fi

我正在从文件中获取日期并将该值发送到另一个文件 /tmp/dt。然后将该日期与系统日期进行比较以创建逻辑。但出现错误:第 7 行:10#2020-12-09 : 值对于 base 来说太大(错误标记是“09”)。我也使用 #10 来消除八进制错误。

【问题讨论】:

    标签: linux octal


    【解决方案1】:

    -gt 比较数字,这意味着 bash 中的整数。 Bash 将两个操作数都解释为算术表达式,而你的则被解析为

    10#2020 - 12 - 09
    

    所以,它从十进制的 2020 开始,减去 12,并尝试减去 09:最初的 0 告诉它解释八进制数,但 9 不能以八进制数出现,因此出现错误。

    YYYY-MM-DD 格式的日期可以作为字符串进行比较。使用

    [ "$dateFile" > "$NOW" ]
    

    【讨论】:

    • @abhirupghosh:StackOverflow 上的“感谢”=upvote / accept.
    • #!/bin/bash docker logs | grep '到期日期' |尾-1 |剪切-d''-f 14 | cut -c 2-11 > /tmp/dt dateFile=cat /tmp/dt NOW=$( date +%F ) if [ "$NOW" > "$dateFile" ];然后回显不需要续订,否则回显需要续订 fi 只是为了测试,我颠倒了逻辑,但它仍然显示“不需要续订”,其中我的系统日期($now)不比 $dateFile..so 更好(>) “需要续订”。知道错误在哪里。
    猜你喜欢
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多