65 lines
1.9 KiB
Bash
Executable File
65 lines
1.9 KiB
Bash
Executable File
#!/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 |