From afb3a806af24c58e2f5de76e6acd93287381ff4a Mon Sep 17 00:00:00 2001 From: juewuy Date: Fri, 12 Dec 2025 17:40:19 +0800 Subject: [PATCH] =?UTF-8?q?~=E4=BC=98=E5=8C=96setconfig=E5=87=BD=E6=95=B0?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E5=A4=8D=E9=83=A8=E5=88=86=E5=9B=A0=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E5=85=BC=E5=AE=B9=E5=AF=BC=E8=87=B4=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/init.sh | 10 +++++++--- scripts/menu.sh | 26 +++++++++++++++----------- scripts/start.sh | 9 ++++++--- scripts/webget.sh | 20 ++++++++++---------- 4 files changed, 38 insertions(+), 27 deletions(-) diff --git a/scripts/init.sh b/scripts/init.sh index d6bf92d..a3ca597 100644 --- a/scripts/init.sh +++ b/scripts/init.sh @@ -145,10 +145,14 @@ setdir() { [ "$res" = "1" ] && CRASHDIR=$dir/ShellCrash || setdir fi } -setconfig() { +setconfig() { #脚本配置工具 #参数1代表变量名,参数2代表变量值,参数3即文件路径 - [ -z "$3" ] && configpath=${CRASHDIR}/configs/ShellCrash.cfg || configpath="${3}" - [ -n "$(grep "${1}=" "$configpath")" ] && sed -i "s#${1}=.*#${1}=${2}#g" $configpath || echo "${1}=${2}" >>$configpath + [ -z "$3" ] && configpath="$CRASHDIR"/configs/ShellCrash.cfg || configpath="${3}" + if grep -q "^${1}=" "$configpath";then + sed -i "s#${1}=.*#${1}=${2}#g" "$configpath" + else + printf '%s=%s\n' "$1" "$2" >> "$configpath" + fi } #特殊固件识别及标记 [ -f "/etc/storage/started_script.sh" ] && { diff --git a/scripts/menu.sh b/scripts/menu.sh index eed63b4..c82b79f 100644 --- a/scripts/menu.sh +++ b/scripts/menu.sh @@ -17,8 +17,12 @@ JSONSDIR=${CRASHDIR}/jsons #读取配置相关 setconfig() { #参数1代表变量名,参数2代表变量值,参数3即文件路径 - [ -z "$3" ] && configpath=${CFG_PATH} || configpath="${3}" - grep -q "${1}=" "$configpath" && sed -i "s#${1}=.*#${1}=${2}#g" $configpath || sed -i "\$a\\${1}=${2}" $configpath + [ -z "$3" ] && configpath="$CRASHDIR"/configs/ShellCrash.cfg || configpath="${3}" + if grep -q "^${1}=" "$configpath";then + sed -i "s#${1}=.*#${1}=${2}#g" "$configpath" + else + printf '%s=%s\n' "$1" "$2" >> "$configpath" + fi } ckcmd() { command -v sh >/dev/null 2>&1 && command -v $1 >/dev/null 2>&1 || type $1 >/dev/null 2>&1 @@ -607,7 +611,7 @@ setport() { #端口设置 else authentication=$(echo $input | grep :) if [ -n "$authentication" ]; then - setconfig authentication \'$authentication\' + setconfig authentication "'$authentication'" echo -e "\033[32m设置成功!!!\033[0m" else echo -e "\033[31m输入有误,请重新输入!\033[0m" @@ -723,7 +727,7 @@ setdns() { #DNS详细设置 read -p "请输入新的DNS > " dns_nameserver dns_nameserver=$(echo $dns_nameserver | sed 's#|#\,\ #g') if [ -n "$dns_nameserver" ]; then - setconfig dns_nameserver \'"$dns_nameserver"\' + setconfig dns_nameserver "'$dns_nameserver'" echo -e "\033[32m设置成功!!!\033[0m" fi sleep 1 @@ -733,7 +737,7 @@ setdns() { #DNS详细设置 read -p "请输入新的DNS > " dns_fallback dns_fallback=$(echo $dns_fallback | sed 's/|/\,\ /g') if [ -n "$dns_fallback" ]; then - setconfig dns_fallback \'"$dns_fallback"\' + setconfig dns_fallback "'$dns_fallback'" echo -e "\033[32m设置成功!!!\033[0m" fi sleep 1 @@ -745,7 +749,7 @@ setdns() { #DNS详细设置 echo -e "\033[31m此选项暂不支持ipv6加密DNS!!!\033[0m" elif [ -n "$text" ]; then dns_resolver=$(echo $text | sed 's/|/\,\ /g') - setconfig dns_resolver \'"$dns_resolver"\' + setconfig dns_resolver "'$dns_resolver'" echo -e "\033[32m设置成功!!!\033[0m" fi sleep 1 @@ -758,9 +762,9 @@ setdns() { #DNS详细设置 dns_nameserver='https://doh.360.cn/dns-query, https://dns.alidns.com/dns-query, https://doh.pub/dns-query' dns_fallback='https://cloudflare-dns.com/dns-query, https://dns.google/dns-query, https://doh.opendns.com/dns-query' dns_resolver='https://223.5.5.5/dns-query, 2400:3200::1' - setconfig dns_nameserver \'"$dns_nameserver"\' - setconfig dns_fallback \'"$dns_fallback"\' - setconfig dns_resolver \'"$dns_resolver"\' + setconfig dns_nameserver "'$dns_nameserver'" + setconfig dns_fallback "'$dns_fallback'" + setconfig dns_resolver "'$dns_resolver'" echo -e "\033[32m已设置加密DNS,如出现DNS解析问题,请尝试重置DNS配置!\033[0m" else echo -e "\033[31m找不到根证书文件,无法启用加密DNS,Linux系统请自行搜索安装OpenSSL的方式!\033[0m" @@ -974,7 +978,7 @@ setfirewall() { #防火墙设置 )" ]; then reserve_ipv4="$text" echo -e "已将保留地址网段设为:\033[32m$reserve_ipv4\033[0m" - setconfig reserve_ipv4 "\'$reserve_ipv4\'" + setconfig reserve_ipv4 "'$reserve_ipv4'" else echo -e "\033[31m输入有误,操作已取消!\033[0m" fi @@ -1447,7 +1451,7 @@ set_firewall_area() { #防火墙模式设置 *) ;; esac setconfig vm_redir $vm_redir - setconfig vm_ipv4 "\'$vm_ipv4\'" + setconfig vm_ipv4 "'$vm_ipv4'" sleep 1 set_firewall_area ;; diff --git a/scripts/start.sh b/scripts/start.sh index fe5f896..13ecf97 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -69,7 +69,11 @@ getconfig() { #读取配置及全局变量 setconfig() { #脚本配置工具 #参数1代表变量名,参数2代表变量值,参数3即文件路径 [ -z "$3" ] && configpath="$CRASHDIR"/configs/ShellCrash.cfg || configpath="${3}" - grep -q "${1}=" "$configpath" && sed -i "s#${1}=.*#${1}=${2}#g" "$configpath" || sed -i "\$a\\${1}=${2}" $configpath + if grep -q "^${1}=" "$configpath";then + sed -i "s#${1}=.*#${1}=${2}#g" "$configpath" + else + printf '%s=%s\n' "$1" "$2" >> "$configpath" + fi } ckcmd() { #检查命令是否存在 command -v sh >/dev/null 2>&1 && command -v "$1" >/dev/null 2>&1 || type "$1" >/dev/null 2>&1 @@ -709,7 +713,6 @@ EOF { "tag": "cn", "type": "remote", - "format": "binary", "path": "./ruleset/cn.srs", "url": "https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@update/bin/geodata/srs_geosite_cn.srs" } @@ -2171,7 +2174,7 @@ webget) [ "$result" = "200" ] && exit 0 || exit 1 ;; *) - $1 $2 $3 $4 $5 $6 $7 + "$1" "$2" "$3" "$4" "$5" "$6" "$7" ;; esac diff --git a/scripts/webget.sh b/scripts/webget.sh index c181bde..30f7896 100644 --- a/scripts/webget.sh +++ b/scripts/webget.sh @@ -880,7 +880,7 @@ gen_link_flt(){ #在线生成节点过滤 exclude='' echo -e "\033[31m 已删除节点过滤关键字!!!\033[0m" fi - setconfig exclude \'$exclude\' + setconfig exclude "'$exclude'" } gen_link_ele(){ #在线生成节点筛选 [ -z "$include" ] && include="未设置" @@ -900,7 +900,7 @@ gen_link_ele(){ #在线生成节点筛选 include='' echo -e "\033[31m 已删除节点匹配关键字!!!\033[0m" fi - setconfig include \'$include\' + setconfig include "'$include'" } get_core_config(){ #调用工具下载 ${CRASHDIR}/start.sh get_core_config @@ -954,7 +954,7 @@ gen_core_config_link(){ #在线生成工具 i=100 #将用户链接写入配置 setconfig Https - setconfig Url \'$Url_link\' + setconfig Url "'$Url_link'" #获取在线yaml文件 get_core_config else @@ -1008,7 +1008,7 @@ set_core_config_link(){ #直接导入配置 if [ "$res" = '1' ]; then #将用户链接写入配置 sed -i '/Url=*/'d $CFG_PATH - setconfig Https \'$link\' + setconfig Https "'$link'" setconfig Url #获取在线yaml文件 get_core_config @@ -1827,7 +1827,7 @@ getdb(){ #下载Dashboard文件 #sed -i "s/7892/${db_port}/g" $dbdir/app*.js fi #写入配置文件 - setconfig hostdir \'$hostdir\' + setconfig hostdir "'$hostdir'" echo ----------------------------------------------- echo -e "\033[32m面板安装成功!\033[36m如未生效,请使用【Ctrl+F5】强制刷新浏览器!!!\033[0m" rm -rf ${TMPDIR}/clashdb.tar.gz @@ -2007,7 +2007,7 @@ setserver(){ [ -n "$url_id" ] && url_name=$(grep "$url_id" ${CRASHDIR}/configs/servers.list 2>/dev/null | awk '{print $2}') || url_name=$update_url saveserver(){ #写入配置文件 - setconfig update_url \'$update_url\' + setconfig update_url "'$update_url'" setconfig url_id $url_id setconfig release_type $release_type echo ----------------------------------------------- @@ -2335,9 +2335,9 @@ userguide(){ dns_nameserver='https://doh.360.cn/dns-query, https://dns.alidns.com/dns-query, https://doh.pub/dns-query' dns_fallback='https://cloudflare-dns.com/dns-query, https://dns.google/dns-query, https://doh.opendns.com/dns-query' dns_resolver='https://223.5.5.5/dns-query, 2400:3200::1' - setconfig dns_nameserver \'"$dns_nameserver"\' - setconfig dns_fallback \'"$dns_fallback"\' - setconfig dns_resolver \'"$dns_resolver"\' + setconfig dns_nameserver "'$dns_nameserver'" + setconfig dns_fallback "'$dns_fallback'" + setconfig dns_resolver "'$dns_resolver'" fi #开启公网访问 sethost(){ @@ -2369,7 +2369,7 @@ userguide(){ setconfig mix_port $mix_port setconfig host $host setconfig public_support $public_support - setconfig authentication \'$authentication\' + setconfig authentication "'$authentication'" fi fi #启用推荐的自动任务配置