【问题标题】:bash date: invalid date, invalid conversionbash 日期:无效日期,无效转换
【发布时间】:2018-04-20 08:02:03
【问题描述】:
#!/bin/bash
DOM="onet.pl wp.pl"
for d in $DOM
do
  echo -n "$d - "
  whois $d | egrep -i 'Expiration|Expires on' | head -1
  # If you need list..
   whois $d | egrep -i 'Expiration|Expires on' | head -1 >> /tmp/domain.date
   expdate="$(whois $d | egrep -i 'Expiration|Expires on' | head -1)"
   #to seconds
   expdate="$(date -d"$expdate" +%s)"
   #current date
   curdate="$(date +%s)"
printf "Expiration date : $expdate\n"
printf "Current date : $curdate\n"
printf "Days for expiration : %s\n" "$(((expdate-curdate)/86400))"
 echo ""
done

我得到这样的结果:

 onet.pl - option expiration date:       2019.08.16 16:52:03 
date: invalid date ‘option expiration date:       2019.08.16 16:52:03’
 Expiration date :
 Current date : 1524210803
 Days for expiration : -17641

 wp.pl - option expiration date:       2020.02.10 10:51:12 
date: invalid date ‘option expiration date:       2020.02.10 10:51:12’
 Expiration date :
 Current date : 1524210803 
Days for expiration : -17641

看起来日期格式有问题,我可能是因为文本+日期而不是纯日期。因此,我相信其余部分无法正常工作。任何想法如何使到期日期有效?

【问题讨论】:

  • 将“set -x”添加到你的脚本中,你可以看到bash正在运行的命令。
  • 请注意,除非您真的永远只针对单个 whois 服务器,否则出于各种原因,以通用方式解析 whois 服务器并不适合胆小的人。如果有需要,我建议您使用一些现有的库来为您做到这一点。

标签: bash whois


【解决方案1】:

知道了!删除到期日期中的.(点)。这样做:

 #!/bin/bash
 expiration_date="2019.08.16 16:52:03"
 date -d"$(echo $expiration_date | tr -d '.')" +%s

结果命令是这样的:

date -d"20190816 16:52:03" +%s

这对 date -d 有效且正确使用。

这对我在 Linux Mint 18 上使用 date (GNU coreutils) 8.25 和在 RHEL7 上使用 date (GNU coreutils) 8.4 有效。

【讨论】:

  • 你不需要tr,你可以在变量扩展中用字符串替换删除点:date -d"${expiration_date//./}" +%s
  • 是的,谢谢,我总是忘记这些变量扩展。
猜你喜欢
  • 2014-06-24
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-27
相关资源
最近更新 更多