为解决一个小众需求写的 Shell 脚本,记录分享下。它可以以指定 DNS 服务器解析设置域名,并将结果更新 hosts 文件绑定。
脚本流程:指定 DNS 服务器解析目标域名,将结果储存到临时文件 -> 判断解析是否成功再继续 -> 当解析成功,将最新解析 IP 替换之前 hosts 里绑定的 IP -> 当解析失败,删除临时文件。
安装依赖组件,这里使用 dig
命令获取域名解析,因此需要安装相应软件包。
# RHEL & CentOS yum -y install bind-utils # Debian & Ubuntu apt-get -y install dnsutils
脚本代码:
#!/usr/bin/env bash if dig @8.8.8.8 www.example.com +short > /tmp/digout 2>&1 then now_ip=$(awk '/www.example.com/ {print $1}' /etc/hosts) new_ip=$(cat /tmp/digout | tail -n1) sed -i "s/$now_ip/$new_ip/" /etc/hosts else rm -f /tmp/digout fi
使用方法:
# 新建脚本文件
vi /root/dig_hosts.sh
# 赋予运行权限
chmod +x /root/dig_hosts.sh
# 使用 crontab -e
命令添加定时任务。例如设置每天上午 9 点 30 运行 30 9 * * * /root/dig_hosts.sh > /dev/null 2>&1
注:在使用脚本前,需要先手动在 hosts 里绑定好域名,不然运行脚本将找不到替换目标。