#!/bin/sh # 仅在首次启动时执行(/etc/uci-defaults机制) # 获取当前 OpenWrt/ImmortalWrt 的主版本号 get_openwrt_version() { local version="" if [ -f /etc/openwrt_release ]; then # 提取形如 25.12 或 23.05 的前两位数字版本 version=$(grep "DISTRIB_RELEASE" /etc/openwrt_release | cut -d"'" -f2 | cut -d'.' -f1,2) fi echo "$version" } # 比较版本号是否大于或等于 25.12 # 返回 0 表示 >= 25.12,返回 1 表示较旧版本 is_version_25_12_or_newer() { local current_ver=$(get_openwrt_version) # 如果没获取到版本号,保守起见当做旧版本处理 [ -z "$current_ver" ] && return 1 # 使用 awk 进行浮点数版本比较 awk -v cur="$current_ver" 'BEGIN { if (cur >= 25.12) exit 0; else exit 1 }' } # 修改 LAN 口 IP 地址 update_lan_ip(){ local NEW_LAN_IP="$1" # 检查 network 配置是否存在 if [ -f /etc/config/network ]; then # 检查 lan 接口是否存在 if uci get network.lan >/dev/null 2>&1; then # 设置为静态 IP 协议 uci set network.lan.proto='static' # 根据版本号执行不同的设置逻辑 if is_version_25_12_or_newer; then # 25.12+ 版本:合并为 CIDR 格式,并清除可能残留的旧 netmask uci set network.lan.ipaddr="${NEW_LAN_IP}/24" uci del network.lan.netmask >/dev/null 2>&1 else # 25.12 以下旧版本:拆分为 ipaddr 和 netmask uci set network.lan.ipaddr="${NEW_LAN_IP}" uci set network.lan.netmask="255.255.255.0" fi # 保存配置 uci commit network fi fi # 重启网络服务 if [ -x /etc/init.d/network ]; then /etc/init.d/network restart fi } # update_lan_ip "192.168.50.100" 修改lan口ip exit 0