Bash脚本实现域名过期自动发邮件及过期天数计算求助
实现域名过期日期与当前日期的对比及天数计算
嘿,作为新手能写出获取域名过期日期并发送邮件的脚本已经超棒啦!接下来要实现的日期对比和天数差计算其实很直观,我来一步步帮你搞定:
核心思路
要计算两个日期的天数差,最可靠的方法是把日期转换成Unix时间戳(从1970年1月1日00:00:00 UTC到该日期的秒数),然后用「过期日期时间戳 - 当前日期时间戳」,再除以一天的秒数(86400)就能得到准确的天数差。
具体步骤及脚本修改
1. 提取并转换过期日期为时间戳
首先得从whois输出里准确抓取过期日期,不同域名后缀的whois字段可能有差异(比如.pl域名常用Registry Expiry Date),抓取后用date命令把日期字符串转成时间戳。
2. 获取当前时间戳
用date -u +%s获取当前UTC时间的时间戳(用UTC是为了避免时区差异导致的计算误差)。
3. 计算剩余天数并判断状态
用整数除法计算时间戳差值,再根据结果判断域名是已过期、即将过期还是正常状态。
修改后的完整脚本示例
#!/bin/bash # 要检测的域名列表 DOM="onet.pl wp.pl" # 接收提醒邮件的地址 EMAIL="your-alert-email@example.com" for d in $DOM; do echo "正在检测域名: $d" # 从whois结果中提取过期日期(根据实际whois输出调整字段名) expiry_date=$(whois $d | grep -i "registry expiry date" | awk '{print $4, $5, $6, $7, $8}') # 处理无法获取过期日期的情况 if [ -z "$expiry_date" ]; then echo "⚠️ 无法获取域名 $d 的过期日期,跳过检测" continue fi # 将过期日期转换为UTC时间戳 expiry_timestamp=$(date -ud "$expiry_date" +%s) # 获取当前UTC时间戳 current_timestamp=$(date -u +%s) # 计算剩余天数(整数除法) days_remaining=$(( (expiry_timestamp - current_timestamp) / 86400 )) # 根据天数差生成状态描述 if [ $days_remaining -lt 0 ]; then status="❌ 已过期 $((-days_remaining)) 天" elif [ $days_remaining -eq 0 ]; then status="⚠️ 今天过期!" elif [ $days_remaining -le 7 ]; then status="⚠️ 仅剩 $days_remaining 天过期,尽快处理!" else status="✅ 剩余 $days_remaining 天过期" fi # 准备邮件内容 mail_subject="域名 $d 过期状态提醒" mail_body="域名: $d\n过期日期: $expiry_date\n当前状态: $status" # 发送邮件(可根据服务器环境替换为sendmail等命令) echo -e "$mail_body" | mail -s "$mail_subject" $EMAIL echo "📧 已发送域名 $d 的状态提醒邮件" done
关键注意事项
- whois字段适配:不同域名后缀的whois输出字段可能不同,比如有的是
Expiration Date而非Registry Expiry Date,你可以先手动执行whois onet.pl查看输出,调整grep的参数。 - 时区一致性:一定要用UTC时间(
date -u)计算,避免服务器时区与whois返回时区不一致导致的误差。 - 异常扩展:脚本里加了无法获取日期的处理,你还可以根据需要添加邮件发送失败的提示、日志记录等功能。
内容的提问来源于stack exchange,提问作者ashaneen
相关产品推荐
相关产品推荐

