You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本日期转换报错排查:解决date: invalid date问题

解决Bash脚本中域名过期日期转换的「date: invalid date」错误

我来帮你搞定这个日期转换的问题!出现「date: invalid date, invalid conversion」错误的核心原因是你直接把whois输出的整行(带"Expiration Date:"这类前缀文本)传给了date命令,它没法识别这种混杂了标签的字符串。另外脚本最后一行还有个语法小错误,咱们一步步修复:

问题根源拆解

你当前的代码里,expdate变量拿到的是whois输出的整行内容,比如类似这样:

Expiration Date: 2025-12-31T23:59:59Z

直接把这个字符串传给date -d,它会因为前面的"Expiration Date:"标签而无法解析成有效日期,自然报错。

修复步骤

1. 提取纯日期字符串

先把whois输出里的日期标签去掉,只保留纯日期部分。可以用sed来完成这个提取:

# 获取带标签的过期日期行
expdate_raw=$(whois $d | egrep -i 'Expiration|Expires on' | head -1)
# 提取冒号后面的纯日期字符串(忽略前面的标签和空格)
expdate_str=$(echo "$expdate_raw" | sed -E 's/^.*: *//')

2. 转换日期为时间戳

现在用纯日期字符串调用date命令,就能正常转换成时间戳了:

expdate=$(date -d "$expdate_str" +%s)

如果遇到某些whois服务器返回的特殊日期格式(比如31-Dec-2025),GNU date的-d参数通常能自动识别,要是真的识别失败,可以手动指定格式解析,比如:

# 针对DD-Mon-YYYY格式的手动解析
expdate=$(date -d "$expdate_str" +%s)

3. 修复最后一行的语法错误

你脚本最后一行计算剩余天数的代码少了闭合括号,而且要把秒数转换成天数(一天=86400秒),修正后应该是:

printf "Days for expiration : %s\n" "$(((expdate - curdate) / 86400))"

完整修正后的脚本

#!/bin/bash
DOM="onet.pl wp.pl"
for d in $DOM
do
    echo -n "$d - "
    whois $d | egrep -i 'Expiration|Expires on' | head -1
    # 写入文件
    whois $d | egrep -i 'Expiration|Expires on' | head -1 >> /tmp/domain.date
    
    # 提取纯日期字符串
    expdate_raw=$(whois $d | egrep -i 'Expiration|Expires on' | head -1)
    expdate_str=$(echo "$expdate_raw" | sed -E 's/^.*: *//')
    
    # 转换为时间戳
    expdate=$(date -d "$expdate_str" +%s)
    curdate=$(date +%s)
    
    printf "Expiration timestamp : %s\n" "$expdate"
    printf "Current timestamp : %s\n" "$curdate"
    printf "Days for expiration : %s\n" "$(((expdate - curdate) / 86400))"
done

额外优化建议

  • 可以加个判断,如果expdate_str为空(比如whois查询失败),就跳过转换,避免报错:
if [ -n "$expdate_str" ]; then
    expdate=$(date -d "$expdate_str" +%s)
    # 后续计算逻辑
else
    echo "Failed to get expiration date for $d"
fi

内容的提问来源于stack exchange,提问作者ashaneen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:20:32