新增 h-hosts.sh 脚本,用于配置 /etc/hosts 文件并添加域名解析记录

This commit is contained in:
严浩
2025-06-18 12:50:17 +08:00
parent ce9d6838d7
commit 7b93178a71

87
h-hosts.sh Executable file
View File

@ -0,0 +1,87 @@
#!/bin/bash
# h-hosts.sh - 配置hosts文件脚本
# 用于添加指定域名解析记录到 /etc/hosts 文件
# 检查是否有root权限
if [ "$EUID" -ne 0 ]; then
echo "错误: 此脚本需要root权限运行"
echo "请使用: sudo $0"
exit 1
fi
# 设置颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 定义IP地址和域名列表
IP_ADDRESS="158.180.89.16"
DOMAINS=(
"git.yanhao.ren"
"harbor.oo1.dev"
"alist.oo1.dev"
)
# 统计变量
ADDED_COUNT=0
UPDATED_COUNT=0
UNCHANGED_COUNT=0
echo -e "${GREEN}开始配置hosts文件...${NC}"
echo "目标IP地址: $IP_ADDRESS"
echo
# 备份原hosts文件
BACKUP_FILE="/etc/hosts.backup.$(date +%Y%m%d_%H%M%S)"
cp /etc/hosts "$BACKUP_FILE"
echo -e "${YELLOW}已创建备份文件: $BACKUP_FILE${NC}"
# 添加域名解析记录
for domain in "${DOMAINS[@]}"; do
# 检查域名是否已存在
if grep -q "$domain" /etc/hosts; then
# 获取当前域名对应的IP地址
current_ip=$(grep "$domain" /etc/hosts | grep -v '^#' | awk '{print $1}' | head -1)
if [ "$current_ip" = "$IP_ADDRESS" ]; then
echo -e "${GREEN}域名 $domain 已正确配置 (IP: $current_ip)${NC}"
((UNCHANGED_COUNT++))
else
echo -e "${YELLOW}域名 $domain 已存在但IP不同 (当前: $current_ip, 目标: $IP_ADDRESS)${NC}"
echo -e "${YELLOW}正在更新IP地址...${NC}"
# 删除旧记录并添加新记录
sed -i.tmp "/[[:space:]]$domain[[:space:]]*$/d" /etc/hosts
echo "$IP_ADDRESS $domain" | tee -a /etc/hosts
echo -e "${GREEN}已更新: $domain 的IP地址从 $current_ip 更新为 $IP_ADDRESS${NC}"
((UPDATED_COUNT++))
fi
else
echo "$IP_ADDRESS $domain" | tee -a /etc/hosts
echo -e "${GREEN}已添加: $IP_ADDRESS $domain${NC}"
((ADDED_COUNT++))
fi
done
echo
echo -e "${GREEN}hosts文件配置完成${NC}"
# 显示操作统计
echo
echo -e "${YELLOW}操作统计:${NC}"
echo -e " 新增域名: ${GREEN}$ADDED_COUNT${NC}"
echo -e " 更新域名: ${YELLOW}$UPDATED_COUNT${NC}"
echo -e " 未变更域名: ${GREEN}$UNCHANGED_COUNT${NC}"
# 显示添加的记录
echo
echo -e "${YELLOW}当前配置的解析记录:${NC}"
for domain in "${DOMAINS[@]}"; do
grep "$domain" /etc/hosts | grep "$IP_ADDRESS"
done
echo
echo -e "${YELLOW}如需恢复原配置,请运行:${NC}"
echo "sudo cp $BACKUP_FILE /etc/hosts"