#!/bin/bash # 配置参数(可根据需要修改) SCRIPT_URL="http://116.205.97.109/scripts/set_ip.sh" # 脚本下载地址 DEST_PATH="/opt/set_ip.sh" # 脚本保存路径 UDEV_RULES_PATTERN="/etc/udev/rules.d/70-persistent-*" # 匹配所有70-persistent-开头的文件 DEST_UDEV_DIR="/opt/" # udev规则文件的目标目录 NETPLAN_CONFIG="/etc/netplan/00-installer-config.yaml" # netplan配置文件 # 函数:错误处理 error_exit() { echo "$1" 1>&2 exit 1 } # 函数:检查是否以root权限运行 check_root() { if [ "$(id -u)" -ne 0 ]; then error_exit "错误:请使用root权限运行此脚本(sudo)" fi } # 函数:下载配置脚本 download_script() { echo "正在下载脚本到$DEST_PATH..." if command -v wget &> /dev/null; then wget -q -O "$DEST_PATH" "$SCRIPT_URL" || error_exit "下载脚本失败(wget)" elif command -v curl &> /dev/null; then curl -s -o "$DEST_PATH" "$SCRIPT_URL" || error_exit "下载脚本失败(curl)" else error_exit "错误:未找到wget或curl,请先安装其中一个工具" fi # 验证下载结果 [ -f "$DEST_PATH" ] || error_exit "错误:脚本下载后文件不存在" } # 函数:设置脚本权限 set_script_permissions() { echo "设置脚本权限..." chmod +x "$DEST_PATH" || error_exit "设置脚本可执行权限失败" } # 函数:处理所有70-persistent-开头的udev规则文件 handle_udev_rules() { echo "处理所有70-persistent-开头的udev规则文件..." # 检查是否存在匹配的文件 shopt -s nullglob # 避免无匹配时返回通配符本身 local udev_files=($UDEV_RULES_PATTERN) shopt -u nullglob # 恢复默认行为 if [ ${#udev_files[@]} -eq 0 ]; then error_exit "错误:未找到任何以70-persistent-开头的udev规则文件(路径:/etc/udev/rules.d/)" fi # 确保目标目录存在 [ -d "$DEST_UDEV_DIR" ] || mkdir -p "$DEST_UDEV_DIR" || error_exit "创建目标目录$DEST_UDEV_DIR失败" # 拷贝所有匹配的文件到目标目录 cp "${udev_files[@]}" "$DEST_UDEV_DIR" || error_exit "拷贝udev规则文件失败" # 为所有拷贝的文件设置权限 chmod 644 "$DEST_UDEV_DIR"70-persistent-* || error_exit "设置udev规则文件权限失败" echo "成功拷贝${#udev_files[@]}个udev规则文件到$DEST_UDEV_DIR" } # 函数:添加计划任务 add_cron_job() { echo "添加计划任务..." # 先检查是否已存在相同任务,避免重复添加 if ! crontab -l | grep -q "$DEST_PATH"; then (crontab -l 2>/dev/null; echo "@reboot bash $DEST_PATH > /tmp/ip_tmp.log 2>&1") | crontab - || error_exit "添加计划任务失败" fi # 验证计划任务 crontab -l | grep -q "$DEST_PATH" || error_exit "错误:计划任务添加后未生效" echo "计划任务添加成功" } # 函数:修改netplan网络配置 modify_netplan_config() { echo "修改网络配置文件..." # 备份配置 cp "$NETPLAN_CONFIG" "${NETPLAN_CONFIG}.bak2" || error_exit "备份netplan配置失败" # 修改IP地址 sed -i '/^ addresses:$/,/^ interfaces:/ s/^ - [0-9.]\+\/[0-9]\+/ - 0.0.0.0\/0/' "$NETPLAN_CONFIG" || error_exit "修改IP地址失败" # 修改网关 sed -i '/^ - to: default$/!b;n;s/^ via: [0-9.]\+/ via: 0.0.0.0/' "$NETPLAN_CONFIG" || error_exit "修改网关失败" } # 主函数:串联所有操作 main() { echo "开始执行配置脚本..." # 按顺序执行各步骤 check_root download_script set_script_permissions handle_udev_rules add_cron_job modify_netplan_config echo "所有操作执行完成!" exit 0 } # 启动主函数 main