mirror of
https://github.com/juewuy/ShellCrash.git
synced 2026-03-12 00:11:31 +00:00
Merge pull request #1151 from sofia-riese/patch-1
refactor(ddns.sh): replace recursion with while loop
This commit is contained in:
@@ -1,15 +1,15 @@
|
|||||||
#! /bin/bash
|
#! /bin/bash
|
||||||
# Copyright (C) Juewuy
|
# Copyright (C) Juewuy
|
||||||
|
|
||||||
|
ddns_menu() {
|
||||||
ddns_menu(){
|
echo "-----------------------------------------------"
|
||||||
echo -----------------------------------------------
|
echo -e "\033[30;46m欢迎使用DDNS!\033[0m"
|
||||||
echo -e "\033[30;46m欢迎使用DDNS!\033[0m"
|
load_ddns
|
||||||
load_ddns
|
|
||||||
}
|
}
|
||||||
|
|
||||||
add_ddns() {
|
add_ddns() {
|
||||||
cat >>"$ddns_dir" <<EOF
|
cat >>"$ddns_dir" <<EOF
|
||||||
|
|
||||||
config service '$service'
|
config service '$service'
|
||||||
option enabled '1'
|
option enabled '1'
|
||||||
option force_unit 'hours'
|
option force_unit 'hours'
|
||||||
@@ -27,113 +27,151 @@ config service '$service'
|
|||||||
option interface 'wan'
|
option interface 'wan'
|
||||||
option bind_network 'wan'
|
option bind_network 'wan'
|
||||||
EOF
|
EOF
|
||||||
/usr/lib/ddns/dynamic_dns_updater.sh -S "$service" start >/dev/null 2>&1 &
|
/usr/lib/ddns/dynamic_dns_updater.sh -S "$service" start >/dev/null 2>&1 &
|
||||||
sleep 3
|
sleep 3
|
||||||
echo 服务已经添加!
|
echo "服务已经添加!"
|
||||||
}
|
}
|
||||||
|
|
||||||
set_ddns() {
|
set_ddns() {
|
||||||
echo -----------------------------------------------
|
echo "-----------------------------------------------"
|
||||||
read -p "请输入你的域名 > " str
|
read -r -p "请输入你的域名 > " str
|
||||||
[ -z "$str" ] && domain="$domain" || domain="$str"
|
[ -z "$str" ] && domain="$domain" || domain="$str"
|
||||||
echo -----------------------------------------------
|
echo "-----------------------------------------------"
|
||||||
read -p "请输入用户名或邮箱 > " str
|
read -r -p "请输入用户名或邮箱 > " str
|
||||||
[ -z "$str" ] && username="$username" || username="$str"
|
[ -z "$str" ] && username="$username" || username="$str"
|
||||||
echo -----------------------------------------------
|
echo "-----------------------------------------------"
|
||||||
read -p "请输入密码或令牌秘钥 > " str
|
read -r -p "请输入密码或令牌秘钥 > " str
|
||||||
[ -z "$str" ] && password="$password" || password="$str"
|
[ -z "$str" ] && password="$password" || password="$str"
|
||||||
echo -----------------------------------------------
|
echo "-----------------------------------------------"
|
||||||
read -p "请输入检测更新间隔(单位:分钟;默认为10) > " check_interval
|
read -r -p "请输入检测更新间隔(单位:分钟;默认为10) > " check_interval
|
||||||
[ -z "$check_interval" ] || [ "$check_interval" -lt 1 -o "$check_interval" -gt 1440 ] && check_interval=10
|
[ -z "$check_interval" ] || [ "$check_interval" -lt 1 -o "$check_interval" -gt 1440 ] && check_interval=10
|
||||||
echo -----------------------------------------------
|
echo "-----------------------------------------------"
|
||||||
read -p "请输入强制更新间隔(单位:小时;默认为24) > " force_interval
|
read -r -p "请输入强制更新间隔(单位:小时;默认为24) > " force_interval
|
||||||
[ -z "$force_interval" ] || [ "$force_interval" -lt 1 -o "$force_interval" -gt 240 ] && force_interval=24
|
[ -z "$force_interval" ] || [ "$force_interval" -lt 1 -o "$force_interval" -gt 240 ] && force_interval=24
|
||||||
echo -----------------------------------------------
|
echo "-----------------------------------------------"
|
||||||
echo -e "请核对如下信息:"
|
echo -e "请核对如下信息:"
|
||||||
echo -e "服务商: \033[32m$service\033[0m"
|
echo -e "服务商: \033[32m$service\033[0m"
|
||||||
echo -e "域名: \033[32m$domain\033[0m"
|
echo -e "域名: \033[32m$domain\033[0m"
|
||||||
echo -e "用户名: \033[32m$username\033[0m"
|
echo -e "用户名: \033[32m$username\033[0m"
|
||||||
echo -e "检测间隔: \033[32m$check_interval\033[0m"
|
echo -e "检测间隔: \033[32m$check_interval\033[0m"
|
||||||
echo -----------------------------------------------
|
echo "-----------------------------------------------"
|
||||||
read -p "确认添加?(1/0) > " res
|
read -r -p "确认添加?(1/0) > " res
|
||||||
[ "$res" = 1 ] && add_ddns || set_ddns
|
if [ "$res" = 1 ]; then
|
||||||
|
add_ddns
|
||||||
|
else
|
||||||
|
set_ddns
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
set_ddns_service() {
|
set_ddns_service() {
|
||||||
services_dir=/etc/ddns/"$serv"
|
while true; do
|
||||||
[ -s "$services_dir" ] || services_dir=/usr/share/ddns/list
|
services_dir=/etc/ddns/"$serv"
|
||||||
echo -----------------------------------------------
|
[ -s "$services_dir" ] || services_dir=/usr/share/ddns/list
|
||||||
echo -e "\033[32m请选择服务提供商\033[0m"
|
echo "-----------------------------------------------"
|
||||||
cat "$services_dir" | grep -v '^#' | awk '{print " "NR" " $1}'
|
echo -e "\033[32m请选择服务提供商\033[0m"
|
||||||
nr=$(cat "$services_dir" | grep -v '^#' | wc -l)
|
cat "$services_dir" | grep -v '^#' | awk '{print " "NR" " $1}'
|
||||||
read -p "请输入对应数字 > " num
|
nr=$(cat "$services_dir" | grep -v '^#' | wc -l)
|
||||||
if [ -z "$num" ]; then
|
read -r -p "请输入对应数字 > " num
|
||||||
i=
|
if [ -z "$num" ]; then
|
||||||
elif [ "$num" -gt 0 -a "$num" -lt $nr ]; then
|
i=
|
||||||
service_name=$(cat "$services_dir" | grep -v '^#' | awk '{print $1}' | sed -n "$num"p | sed 's/"//g')
|
break
|
||||||
service=$(echo $service_name | sed 's/\./_/g')
|
elif [ "$num" -gt 0 ] && [ "$num" -lt "$nr" ]; then
|
||||||
set_ddns
|
service_name=$(cat "$services_dir" | grep -v '^#' | awk '{print $1}' | sed -n "$num"p | sed 's/"//g')
|
||||||
else
|
service=$(echo "$service_name" | sed 's/\./_/g')
|
||||||
echo "输入错误,请重新输入!"
|
set_ddns
|
||||||
sleep 1
|
break
|
||||||
set_ddns_service
|
else
|
||||||
fi
|
echo "输入错误,请重新输入!"
|
||||||
|
sleep 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
set_ddns_type() {
|
set_ddns_type() {
|
||||||
echo -----------------------------------------------
|
while true; do
|
||||||
echo -e "\033[32m请选择网络模式\033[0m"
|
echo "-----------------------------------------------"
|
||||||
echo -e " 1 \033[36mIPV4\033[0m"
|
echo -e "\033[32m请选择网络模式\033[0m"
|
||||||
echo -e " 2 \033[36mIPV6\033[0m"
|
echo -e " 1 \033[36mIPV4\033[0m"
|
||||||
read -p "请输入对应数字 > " num
|
echo -e " 2 \033[36mIPV6\033[0m"
|
||||||
if [ -z "$num" ]; then
|
echo -e " 0 返回上级菜单"
|
||||||
i=
|
read -r -p "请输入对应数字 > " num
|
||||||
elif [ "$num" = 1 ]; then
|
case "$num" in
|
||||||
use_ipv6=0
|
"" | 0)
|
||||||
serv=services
|
break
|
||||||
set_ddns_service
|
;;
|
||||||
elif [ "$num" = 2 ]; then
|
1)
|
||||||
use_ipv6=1
|
use_ipv6=0
|
||||||
serv=services_ipv6
|
serv=services
|
||||||
set_ddns_service
|
set_ddns_service
|
||||||
else
|
break
|
||||||
echo "输入错误,请重新输入!"
|
;;
|
||||||
sleep 1
|
2)
|
||||||
set_ddns_type
|
use_ipv6=1
|
||||||
fi
|
serv=services_ipv6
|
||||||
|
set_ddns_service
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "输入错误,请重新输入!"
|
||||||
|
sleep 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
rev_ddns_service() {
|
rev_ddns_service() {
|
||||||
enabled=$(uci get ddns."$service".enabled)
|
while true; do
|
||||||
[ "$enabled" = 1 ] && enabled_b="停用" || enabled_b="启用"
|
enabled=$(uci get ddns."$service".enabled)
|
||||||
echo -----------------------------------------------
|
[ "$enabled" = 1 ] && enabled_b="停用" || enabled_b="启用"
|
||||||
echo -e " 1 \033[32m立即更新\033[0m"
|
echo "-----------------------------------------------"
|
||||||
echo -e " 2 编辑当前服务\033[0m"
|
echo -e " 1 \033[32m立即更新\033[0m"
|
||||||
echo -e " 3 $enabled_b当前服务"
|
echo -e " 2 编辑当前服务\033[0m"
|
||||||
echo -e " 4 移除当前服务"
|
echo -e " 3 $enabled_b当前服务"
|
||||||
echo -e " 5 查看运行日志"
|
echo -e " 4 移除当前服务"
|
||||||
echo -e " 0 返回上级菜单"
|
echo -e " 5 查看运行日志"
|
||||||
echo -----------------------------------------------
|
echo -e " 0 返回上级菜单"
|
||||||
read -p "请输入对应数字 > " num
|
echo "-----------------------------------------------"
|
||||||
if [ -z "$num" -o "$num" = 0 ]; then
|
read -r -p "请输入对应数字 > " num
|
||||||
i=
|
case "$num" in
|
||||||
elif [ "$num" = 1 ]; then
|
"" | 0)
|
||||||
/usr/lib/ddns/dynamic_dns_updater.sh -S $service start >/dev/null 2>&1 &
|
break
|
||||||
sleep 3
|
;;
|
||||||
elif [ "$num" = 2 ]; then
|
1)
|
||||||
domain=$(uci get ddns."$service".domain 2>/dev/null)
|
/usr/lib/ddns/dynamic_dns_updater.sh -S "$service" start >/dev/null 2>&1 &
|
||||||
username=$(uci get ddns."$service".username 2>/dev/null)
|
sleep 3
|
||||||
password=$(uci get ddns."$service".password 2>/dev/null)
|
break
|
||||||
service_name=$(uci get ddns."$service".service_name 2>/dev/null)
|
;;
|
||||||
uci delete ddns."$service"
|
2)
|
||||||
set_ddns
|
domain=$(uci get ddns."$service".domain 2>/dev/null)
|
||||||
elif [ "$num" = 3 ]; then
|
username=$(uci get ddns."$service".username 2>/dev/null)
|
||||||
[ "$enabled" = 1 ] && uci set ddns."$service".enabled='0' || uci set ddns."$service".enabled='1' && sleep 3
|
password=$(uci get ddns."$service".password 2>/dev/null)
|
||||||
uci commit ddns."$service"
|
service_name=$(uci get ddns."$service".service_name 2>/dev/null)
|
||||||
elif [ "$num" = 4 ]; then
|
uci delete ddns."$service"
|
||||||
uci delete ddns."$service"
|
set_ddns
|
||||||
uci commit ddns."$service"
|
break
|
||||||
elif [ "$num" = 5 ]; then
|
;;
|
||||||
echo -----------------------------------------------
|
3)
|
||||||
cat /var/log/ddns/"$service".log 2>/dev/null
|
[ "$enabled" = 1 ] && uci set ddns."$service".enabled='0' || uci set ddns."$service".enabled='1' && sleep 3
|
||||||
sleep 1
|
uci commit ddns."$service"
|
||||||
fi
|
break
|
||||||
|
;;
|
||||||
|
4)
|
||||||
|
uci delete ddns."$service"
|
||||||
|
uci commit ddns."$service"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
5)
|
||||||
|
echo "-----------------------------------------------"
|
||||||
|
cat /var/log/ddns/"$service".log 2>/dev/null
|
||||||
|
sleep 1
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "输入错误,请重新输入!"
|
||||||
|
sleep 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
load_ddns() {
|
load_ddns() {
|
||||||
|
|||||||
Reference in New Issue
Block a user