💐 Sync 2026-09-21 23:46:31

This commit is contained in:
github-actions[bot] committed 2026-09-21 23:46:31 +08:00
1 parent 9dc0dfd5bb
commit 3f0bfdec09
2 files changed
+50 -52

No files matched your search

+1 -1
View File
@@ -10,7 +10,7 @@ include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=my-default-settings
PKG_VERSION:=2
PKG_RELEASE:=19
PKG_RELEASE:=20
include $(INCLUDE_DIR)/package.mk
+49 -51
View File
@@ -7,49 +7,35 @@
show_help() {
cat << 'EOF_HELP'
用法:
mywifi [选项] [WiFi名称] [WiFi密码]
参数:
WiFi名称 基础SSID名称(缺省时自动使用系统 hostname)
WiFi密码 无线密码(缺省或未指定时默认无密码,指定时需 8-63 位)
mywifi [选项]
选项:
-s, --ssid <名称> 指定基础WiFi名称
-p, --password <密码> 指定WiFi密码
-f, --force 强制重新执行(忽略 wifi=1 已配置检查)
-s, --ssid <名称> 指定基础WiFi名称(未指定时默认使用系统 hostname)
-p, --password <密码> 指定WiFi密码(未指定时默认无密码/开放网络,需 8-63 位)
-f, --force 强制重新执行配置(忽略 wifi=1 已配置检查)
-h, --help 查看帮助信息
并发与等待机制:
- 无参/热插拔调用时:若已有 mywifi 在执行,直接终止退出;
- 带 -f 或用户传参调用时:若已有 mywifi 在执行,自动排队等待其执行完成后再继续执行。
WiFi命名规范:
2.4 GHz -> <WiFi名>_2.4G
5 GHz -> <WiFi名>_5G
6 GHz -> <WiFi名>_6G
说明:
- 必须通过 -s 和 -p 传递 WiFi 名称与密码,不接收位置参数。
- 命名规范: <WiFi名>_2.4G / <WiFi名>_5G / <WiFi名>_6G
使用示例:
mywifi # 默认执行(使用 hostname,若已配置或正在执行则自动终止)
mywifi # 默认执行(使用 hostname,无密码)
mywifi -f # 强制重新按 hostname 恢复默认配置
mywifi "HomeWiFi" "12345678" # 设置指定 WiFi 名及密码
mywifi -f "HomeWiFi" "12345678" # 强制覆盖设置
mywifi -s "HomeWiFi" # 仅指定 WiFi 名称,默认无密码
mywifi -s "HomeWiFi" -p "12345678" # 指定 WiFi 名称和密码
mywifi -f -s "HomeWiFi" -p "12345678" # 强制覆盖配置
EOF_HELP
}
# -------------------------------------------------------------
# 1. 命令行参数解析(过滤 OpenWrt Hotplug 热插拔系统事件传参)
# 1. 严格参数解析(仅允许 -s, -p, -f, -h,彻底忽略所有裸位置参数)
# -------------------------------------------------------------
CUSTOM_SSID=""
CUSTOM_PASSWD=""
HAS_PASSWD=0
FORCE=0
# 判断是否是由系统 Hotplug 热插拔机制触发调用
is_hotplug=0
if [ -n "$HOTPLUG_TYPE" ] || [ -n "$ACTION" ] || [ -n "$DEVICENAME" ]; then
is_hotplug=1
fi
while [ $# -gt 0 ]; do
case "$1" in
-h|--help)
@@ -60,41 +46,41 @@ while [ $# -gt 0 ]; do
FORCE=1
;;
-s|--ssid)
shift
CUSTOM_SSID="$1"
# 仅当后一个参数存在且不是以 '-' 开头的其他选项时,才提取为 SSID
if [ $# -ge 2 ] && [ "${2#-}" = "$2" ]; then
shift
CUSTOM_SSID="$1"
else
CUSTOM_SSID=""
fi
;;
-p|--password)
shift
CUSTOM_PASSWD="$1"
HAS_PASSWD=1
;;
ieee80211|net|button|platform|usb|add|remove|bind|unbind)
# 过滤热插拔事件传参,避免将热插拔子系统名称(如 ieee80211)误当作 WiFi SSID
is_hotplug=1
# 仅当后一个参数存在且不是以 '-' 开头的其他选项时,才提取为密码
if [ $# -ge 2 ] && [ "${2#-}" = "$2" ]; then
shift
CUSTOM_PASSWD="$1"
HAS_PASSWD=1
else
# 若 -p 后面未跟密码值,安全处理为“无密码开放网络”
CUSTOM_PASSWD=""
HAS_PASSWD=0
fi
;;
*)
# 仅在非系统热插拔事件传参时才接收位置参数
if [ $is_hotplug -eq 0 ]; then
if [ -z "$CUSTOM_SSID" ]; then
CUSTOM_SSID="$1"
elif [ $HAS_PASSWD -eq 0 ]; then
CUSTOM_PASSWD="$1"
HAS_PASSWD=1
fi
fi
# 忽略所有非选项参数
;;
esac
shift
done
# 判断是否需要等待锁(带 -f 或传了有效自定义参数时排队等待,无参/热插拔直接退出)
# 判断是否需要等待锁(带 -f 或传了 -s / -p 则排队等待,无参直接退出)
WAIT_LOCK=0
if [ $FORCE -eq 1 ] || [ -n "$CUSTOM_SSID" ] || [ $HAS_PASSWD -eq 1 ]; then
WAIT_LOCK=1
fi
# -------------------------------------------------------------
# 2. 检查 base_config 状态标记(无参且已配置过 wifi=1 时,直接终止)
# 2. 检查 base_config 状态标记(无参且已配置过 wifi=1 时直接退出)
# -------------------------------------------------------------
if [ $FORCE -eq 0 ]; then
if [ "$(uci -q get base_config.@status[0].wifi 2>/dev/null)" = "1" ]; then
@@ -172,7 +158,7 @@ acquire_lock() {
acquire_lock
# -------------------------------------------------------------
# 4. 密码长度合法性校验(若指定了密码)
# 4. 密码长度合法性校验(若通过 -p 指定了密码)
# -------------------------------------------------------------
if [ $HAS_PASSWD -eq 1 ] && [ -n "$CUSTOM_PASSWD" ]; then
pwd_len=${#CUSTOM_PASSWD}
@@ -281,16 +267,28 @@ detect_band() {
}
# -------------------------------------------------------------
# 7. 配置 SSID 与各频段接口
# 7. 严格解析真实 Hostname 并确定基础 SSID
# -------------------------------------------------------------
[ -f /etc/openwrt_release ] && . /etc/openwrt_release
get_real_hostname() {
local h=""
# 1. 优先从 UCI system 配置中提取
h="$(uci -q get system.@system[0].hostname 2>/dev/null)"
# 2. 回退:固件默认名称 (Kwrt)
if [ -z "$h" ] || [ "$h" = "ieee80211" ] || [ "$h" = "(none)" ] || [ "$h" = "OpenWrt" ]; then
h="Kwrt"
fi
echo "$h"
}
if [ -n "$CUSTOM_SSID" ]; then
SSID="$CUSTOM_SSID"
else
SSID="$(uci -q get system.@system[0].hostname 2>/dev/null)"
[ -z "$SSID" ] && [ -r /proc/sys/kernel/hostname ] && SSID="$(cat /proc/sys/kernel/hostname)"
[ -z "$SSID" ] && SSID="Kwrt"
SSID="$(get_real_hostname)"
fi
sed -i '/option disabled/d' /etc/config/wireless 2>/dev/null