#!/bin/bash # AutoBuild Module by Hyy2001 # AutoUpdate for Openwrt # Depends on: bash wget-ssl/wget/uclient-fetch curl x86:gzip openssl TITLE() { clear && echo "Openwrt-AutoUpdate Script by Hyy2001 ${Version} [${DL}]" } SHELL_HELP() { TITLE echo -e "\n当前指令: ${Run_Command}" cat <] $0 [-x] [path=] [url=] 更新固件: -n 不保留配置更新固件 * -f 跳过版本号、SHA256验证,并强制刷写固件 (危险) * -u 适用于定时更新 LUCI 的参数 * -F 强制刷写固件 * -P 优先开启镜像加速下载固件 * --skip 跳过云端固件 SHA256 校验 (危险) * path= 保存固件到提供的绝对路径 * 更新脚本: -x 更新 AutoUpdate.sh 脚本 -x path= 更新 AutoUpdate.sh 脚本 (保存脚本到提供的绝对路径 ) * -x url= 更新 AutoUpdate.sh 脚本 (使用提供的地址 更新脚本) * 其他参数: -C 更改 Github 地址为提供的 -B 指定 x86 设备下载 引导的固件 (危险) -V < | cloud> 打印 <当前 | 云端> AutoUpdate.sh 版本号 -E < | cloud | *> 打印 <当前 | 云端 | 指定版本> 版本的固件更新日志 -H,--help 打印 AutoUpdate 帮助信息 -L,--list 打印当前系统信息 -Q < | cloud> 打印 <当前 | 云端> 固件版本 --bak 备份当前系统配置文件到指定的 路径及名称 --clean 清理 AutoUpdate 缓存 --check 检查 AutoUpdate 依赖软件包 --verbose 打印更详细的下载信息 --var 打印用户指定的变量 --var-rm 删除用户指定的变量 --env < | 1 | 2> 打印 AutoUpdate 环境变量 <全部 | 变量名称 | 值> --log < | del> <打印 | 删除> AutoUpdate 历史运行日志 --log path= 更改 AutoUpdate 运行日志路径为提供的路径 --random 打印一个 <0-31> 位的随机数字与字母组合 EOF EXIT } SHOW_VARIABLE() { TITLE cat </dev/null uci commit $1 } LIST_ENV() { local X cat /etc/AutoBuild/*_Variable | grep -v '#' | while read X;do [[ ${X} =~ "=" ]] && { case "$1" in 1 | 2) [[ -n $(echo "${X}" | cut -d "=" -f1) ]] && echo "${X}" | cut -d "=" -f$1 ;; 0) echo "${X}" ;; esac } done } EXIT() { LOGGER "Command :[${Run_Command}] Finished $1" exit } ECHO() { local Color [[ -z $1 ]] && { echo -ne "\n${Grey}[$(date "+%H:%M:%S")]${White} " } || { case "$1" in r) Color="${Red}";; g) Color="${Green}";; b) Color="${Blue}";; y) Color="${Yellow}";; x) Color="${Grey}";; esac [[ $# -lt 2 ]] && { echo -e "\n${Grey}[$(date "+%H:%M:%S")]${White} $1" LOGGER $1 } || { echo -e "\n${Grey}[$(date "+%H:%M:%S")]${White} ${Color}$2${White}" LOGGER $2 } } } LOGGER() { [[ ! -d ${AutoUpdate_Log_Path} ]] && mkdir -p ${AutoUpdate_Log_Path} [[ ! -f ${AutoUpdate_Log_Path}/AutoUpdate.log ]] && touch ${AutoUpdate_Log_Path}/AutoUpdate.log echo "[$(date "+%Y-%m-%d-%H:%M:%S")] [$(GET_PID AutoUpdate.sh)] $*" >> ${AutoUpdate_Log_Path}/AutoUpdate.log } CHECK_PKG() { which $1 > /dev/null 2>&1 [[ $? == 0 ]] && echo true || echo false } RANDOM() { local Result=$(openssl rand -base64 $1 | md5sum | cut -c 1-$1) [[ -n ${Result} ]] && echo ${Result} LOGGER "[RANDOM] $1-bit random-number : ${Result}" } GET_SHA256SUM() { [[ ! -f $1 && ! -s $1 ]] && { ECHO r "未检测到文件: [$1] 或该文件为空,无法计算 SHA256 值!" EXIT 1 } LOGGER "[GET_SHA256SUM] Target File: $1" local Result=$(sha256sum $1 | cut -c1-$2) [[ -n ${Result} ]] && echo ${Result} LOGGER "[GET_SHA256SUM] Calculated result: ${Result}" } GET_VARIABLE() { [[ $# != 2 ]] && SHELL_HELP [[ ! -f $2 ]] && ECHO "未检测到定义文件: [$2] !" && EXIT 1 local Result="$(grep "$1=" $2 | grep -v "#" | awk 'NR==1' | sed -r "s/$1=(.*)/\1/")" [[ -n ${Result} ]] && echo ${Result} LOGGER "[GET_VARIABLE] Get Variable: ${Result}" } LOAD_VARIABLE() { while [[ $1 ]];do [[ -f $1 ]] && { chmod 777 $1 source $1 } shift done [[ -z ${TARGET_PROFILE} ]] && TARGET_PROFILE="$(jsonfilter -e '@.model.id' < /etc/board.json | tr ',' '_')" [[ -z ${TARGET_PROFILE} ]] && ECHO r "获取设备名称失败,无法执行更新!" && EXIT 1 [[ -z ${CURRENT_Version} ]] && CURRENT_Version=未知 Github_Release_URL="${Github}/releases/download/AutoUpdate" FW_Author="${Github##*com/}" Github_API="https://api.github.com/repos/${FW_Author}/releases/latest" Release_URL="https://github.com/${FW_Author}/releases/download/AutoUpdate" Release_FastGit_URL="https://download.fastgit.org/${FW_Author}/releases/download/AutoUpdate" Release_Goproxy_URL="https://ghproxy.com/${Release_URL}" case "${TARGET_BOARD}" in x86) case "${Firmware_Type}" in img.gz | img) [[ -z ${x86_Boot} ]] && { [ -d /sys/firmware/efi ] && { x86_Boot=UEFI } || x86_Boot=Legacy } ;; *) ECHO r "[${TARGET_PROFILE}] 设备暂不支持当前固件格式!" EXIT 1 ;; esac ;; *) [[ -z ${Firmware_Type} ]] && Firmware_Type=bin esac } EDIT_VARIABLE() { local Mode="$1" shift [[ ! -f $1 ]] && ECHO r "未检测到定义文件: [$1] !" && EXIT 1 case "${Mode}" in edit) [[ $# != 3 ]] && SHELL_HELP [[ -z $(GET_VARIABLE $2 $1) ]] && { LOGGER "[EDIT_VARIABLE] Appending [$2=$3] to $1 ..." echo -e "\n$2=$3" >> $1 } || { sed -i "s?$(GET_VARIABLE $2 $1)?$3?g" $1 } ;; rm) [[ $# != 2 ]] && SHELL_HELP LOGGER "[EDIT_VARIABLE] Removing $2 from $1 ..." sed -i "/$2/d" $1 ;; esac } CHANGE_GITHUB() { [[ ! $1 =~ https://github.com/ ]] && { ECHO r "ERROR Github URL: $1" ECHO r "错误的 Github 地址,示例: https://github.com/Hyy2001X/AutoBuild-Actions" EXIT 1 } UCI_Github_URL=$(UCI_GET autoupdate common github) [[ -n ${UCI_Github_URL} && ! ${UCI_Github_URL} == $1 ]] && { UCI_SET autoupdate common github $1 ECHO y "UCI 设置已更新!" } [[ ! ${Github} == $1 ]] && { EDIT_VARIABLE edit ${Custom_Variable} Github $1 ECHO y "Github 地址已修改为: $1" } || { ECHO y "当前输入的地址与原地址相同,无需修改!" } EXIT 0 } CHANGE_BOOT() { [[ -z $1 ]] && SHELL_HELP case "$1" in UEFI | Legacy) EDIT_VARIABLE edit ${Custom_Variable} x86_Boot $1 echo "ON" > /force_dump ECHO r "警告: 更换引导方式后更新固件后可能导致设备无法正常启动!" ECHO y "固件引导格式已指定为: [$1],AutoUpdate 将在下一次更新时执行强制刷写固件!" EXIT 0 ;; *) ECHO r "错误的参数: [$1],当前支持的选项: [UEFI/Legacy] !" EXIT 1 ;; esac } UPDATE_SCRIPT() { [[ $# != 2 ]] && SHELL_HELP ECHO b "脚本下载地址: $2" ECHO b "脚本保存路径: $1" [[ -f $1 ]] && { ECHO r "AutoUpdate 脚本保存路径有误,请重新输入!" EXIT 1 } ECHO "开始更新 AutoUpdate 脚本,请耐心等待..." [[ ! -d $1 ]] && mkdir -p $1 ${Downloader} /tmp/AutoUpdate.sh $2 if [[ $? == 0 && -s /tmp/AutoUpdate.sh ]];then mv -f /tmp/AutoUpdate.sh $1 [[ ! $? == 0 ]] && ECHO r "AutoUpdate 脚本更新失败!" && EXIT 1 chmod +x $1/AutoUpdate.sh NEW_Version=$(egrep -o "V[0-9].+" $1/AutoUpdate.sh | awk 'END{print}') Banner_Version=$(egrep -o "V[0-9]+.[0-9].+" /etc/banner) [[ -n ${Banner_Version} ]] && sed -i "s?${Banner_Version}?${NEW_Version}?g" /etc/banner ECHO y "[${Version}] > [${NEW_Version}] AutoUpdate 脚本更新成功!" EXIT 0 else ECHO r "AutoUpdate 脚本更新失败,请检查网络后重试!" EXIT 1 fi } CHECK_DEPENDS() { TITLE local PKG echo -e "\n软件包 检测结果" while [[ $1 ]];do if [[ $1 =~ : ]];then [[ $(echo $1 | cut -d ":" -f1) == ${TARGET_BOARD} ]] && { PKG="$(echo $1 | cut -d ":" -f2)" [[ $(echo ${PKG} | wc -c) -gt 8 ]] && Tab=" " || Tab=" " echo -e "${PKG}${Tab}$(CHECK_PKG ${PKG})" LOGGER "[CHECK_DEPENDS] Checking [${PKG}] ... $(CHECK_PKG ${PKG})" } else [[ $(echo $1 | wc -c) -gt 8 ]] && Tab=" " || Tab=" " echo -e "$1${Tab}$(CHECK_PKG $1)" LOGGER "[CHECK_DEPENDS] Checking [$1] ... $(CHECK_PKG $1)" fi shift done ECHO y "AutoUpdate 依赖检测结束,若某项检测结果为 [false],请尝试手动安装!" EXIT } FW_VERSION_CHECK() { [[ $# -gt 1 ]] && echo "false" && return [[ $1 =~ R[1-9.]{2}.+-[0-9]{8} ]] && { echo "true" LOGGER "[FW_VERSION_CHECK] Checking [$1] ... true" } || { echo "false" LOGGER "[FW_VERSION_CHECK] Checking [$1] ... false" } } GET_FW_LOG() { local Update_Log case "$1" in [Ll]ocal) FW_Version="${CURRENT_Version}" ;; [Cc]loud) [[ -z ${CLOUD_Firmware_Version} ]] && GET_CLOUD_VERSION FW_Version="${CLOUD_Firmware_Version}" ;; -v) shift FW_Version="$1" ;; esac ${Downloader} ${AutoUpdate_Path}/Update_Logs.json ${Release_URL}/Update_Logs.json [[ $? == 0 ]] && { Update_Log=$(jsonfilter -e '@["'"""${TARGET_PROFILE}"""'"]["'"""${FW_Version}"""'"]' < ${AutoUpdate_Path}/Update_Logs.json) rm -f ${AutoUpdate_Path}/Update_Logs.json } [[ -n ${Update_Log} ]] && { echo -e "\n${Grey}${FW_Version} for ${TARGET_PROFILE} 更新日志:" echo -e "\n${Green}${Update_Log}${White}" } } GET_CLOUD_INFO() { [[ -f ${AutoUpdate_Path}/Github_Tags ]] && rm -f ${AutoUpdate_Path}/Github_Tags ${Downloader} ${AutoUpdate_Path}/Github_Tags ${Github_API} [[ $? != 0 || ! -s ${AutoUpdate_Path}/Github_Tags ]] && { echo "false" } || echo "true" } GET_CLOUD_VERSION() { local X [[ $(GET_CLOUD_INFO) == false ]] && { ECHO r "检查更新失败,请稍后重试!" EXIT 1 } eval X=$(GET_VARIABLE Egrep_Firmware ${Default_Variable}) FW_Name=$(egrep -o "${X}" ${AutoUpdate_Path}/Github_Tags | awk 'END {print}') [[ -z ${FW_Name} ]] && ECHO "云端固件名称获取失败!" && EXIT 1 CLOUD_Firmware_Version=$(echo "${FW_Name}" | egrep -o "R[0-9].*202[1-2][0-9]+") [[ -z ${CLOUD_Firmware_Version} ]] && ECHO r "云端固件版本获取失败!" && EXIT 1 [[ ! $(FW_VERSION_CHECK ${CLOUD_Firmware_Version}) == true ]] && ECHO r "云端固件版本号合法性检查失败!" } CHECK_UPDATES() { ECHO "正在获取版本更新 ..." GET_CLOUD_VERSION [[ ${CLOUD_Firmware_Version} == ${CURRENT_Version} ]] && { CURRENT_Type="${Yellow} [已是最新]${White}" Upgrade_Stopped=1 } || { [[ $(echo ${CLOUD_Firmware_Version} | cut -d "-" -f2) -gt $(echo ${CURRENT_Version} | cut -d "-" -f2) ]] && CURRENT_Type="${Green} [可更新]${White}" [[ $(echo ${CLOUD_Firmware_Version} | cut -d "-" -f2) -lt $(echo ${CURRENT_Version} | cut -d "-" -f2) ]] && { CLOUD_Type="${Red} [旧版本]${White}" Upgrade_Stopped=2 } } # SHA5BIT=$(echo ${FW_Name} | egrep -o "[a-zA-Z0-9]+.${Firmware_Type}" | sed -r "s/(.*).${Firmware_Type}/\1/") } PREPARE_UPGRADES() { TITLE [[ $* =~ -f && $* =~ -F ]] && SHELL_HELP Upgrade_Option="sysupgrade -q" MSG="更新固件" while [[ $1 ]];do case "$1" in -T | --test) Test_Mode=1 Special_Commands="${Special_Commands} [测试模式]" ;; -P) Proxy_Mode=1 Special_Commands="${Special_Commands} [镜像加速]" ;; -F) [[ -n ${Force_Mode} ]] && SHELL_HELP Only_Force_Write=1 Special_Commands="${Special_Commands} [强制刷写]" Upgrade_Option="${Upgrade_Option} -F" ;; --skip) Skip_SHA256=1 Special_Commands="${Special_Commands} [跳过 SHA256 验证]" ;; -f) [[ -n ${Only_Force_Write} ]] && SHELL_HELP Force_Mode=1 Special_Commands="${Special_Commands} [强制模式]" Upgrade_Option="${Upgrade_Option} -F" ;; -n) Upgrade_Option="${Upgrade_Option} -n" Special_MSG=" (不保留配置)" ;; -u) AutoUpdate_Mode=1 Special_Commands="${Special_Commands} [定时更新]" ;; path=/*) [[ -z $(echo $1 | cut -d "=" -f2) ]] && ECHO r "固件保存路径不能为空!" && EXIT 1 AutoUpdate_Path=$(echo $1 | cut -d "=" -f2) ECHO g "使用自定义固件保存路径: ${AutoUpdate_Path}" ;; --verbose) Special_Commands="${Special_Commands} [详细信息]" ;; *) SHELL_HELP esac shift done LOGGER "Upgrade Options: ${Upgrade_Option}" [[ -n "${Special_Commands}" ]] && ECHO g "特殊指令:${Special_Commands} / ${Upgrade_Option}" ECHO g "执行: ${MSG}${Special_MSG}" REMOVE_CACHE quiet if [[ $(CHECK_PKG curl) == true && ${Proxy_Mode} != 1 ]];then Google_Check=$(curl -I -s --connect-timeout 3 google.com -w %{http_code} | tail -n1) LOGGER "Google_Check: ${Google_Check}" [[ ${Google_Check} != 301 ]] && { ECHO r "Google 连接失败,优先使用镜像加速!" Proxy_Mode=1 } fi CHECK_UPDATES [[ -z ${CLOUD_Firmware_Version} ]] && { ECHO r "云端固件信息获取失败!" EXIT 1 } [[ ${Proxy_Mode} == 1 ]] && { FW_URL="${Release_FastGit_URL}" } || FW_URL="${Release_URL}" cat < ${AutoUpdate_Path}/$(echo ${FW_Name} | sed -r 's/(.*).gz/\1/') [[ $? != 0 ]] && { ECHO r "固件解压失败,请检查网络稳定性或更换固件保存路径!" EXIT 1 } || { FW_Name="$(echo ${FW_Name} | sed -r 's/(.*).gz/\1/')" ECHO "固件解压成功,固件已解压到: ${AutoUpdate_Path}/${FW_Name}" } ;; esac [[ ${Test_Mode} != 1 ]] && { chmod 777 ${AutoUpdate_Path}/${FW_Name} DO_UPGRADE ${Upgrade_Option} ${AutoUpdate_Path}/${FW_Name} } || { ECHO x "[测试模式] ${Upgrade_Option} ${AutoUpdate_Path}/${FW_Name}" ECHO x "[测试模式] 运行完毕!" EXIT 0 } } DO_UPGRADE() { ECHO r "准备更新固件,更新期间请不要断开电源或重启设备 ..." sleep 5 ECHO g "正在更新固件,请耐心等待 ..." $* [[ $? -ne 0 ]] && { ECHO r "固件刷写失败,请尝试手动下载更新固件或附加 -F 参数强制刷写!" EXIT 1 } || EXIT 0 } REMOVE_CACHE() { rm -rf ${AutoUpdate_Path}/AutoBuild-${TARGET_PROFILE}-* \ ${AutoUpdate_Path}/Github_Tags \ ${AutoUpdate_Path}/Update_Logs.json case "$1" in quiet) LOGGER "AutoUpdate 缓存清理完成!" ;; *) ECHO y "AutoUpdate 缓存清理完成!" EXIT 0 ;; esac } AutoUpdate_LOG() { [[ -z $1 ]] && { [[ -s ${AutoUpdate_Log_Path}/AutoUpdate.log ]] && { TITLE && echo cat ${AutoUpdate_Log_Path}/AutoUpdate.log } } || { while [[ $1 ]];do case "$1" in path=/* | rm | del) : ;; *) SHELL_HELP ;; esac if [[ $1 =~ path= ]];then LOG_PATH="$(echo $1 | cut -d "=" -f2)" [[ ${LOG_PATH} == ${AutoUpdate_Log_Path} ]] && { ECHO y "AutoUpdate 日志保存路径相同,无需修改!" EXIT 0 } [[ -f ${LOG_PATH} ]] && { ECHO r "错误的参数: [${LOG_PATH}]" ECHO r "AutoUpdate 日志保存路径有误,请重新输入!" EXIT 1 } EDIT_VARIABLE rm ${Custom_Variable} AutoUpdate_Log_Path EDIT_VARIABLE edit ${Custom_Variable} AutoUpdate_Log_Path ${LOG_PATH} [[ ! -d ${LOG_PATH} ]] && mkdir -p ${LOG_PATH} [[ -f ${AutoUpdate_Log_Path}/AutoUpdate.log ]] && mv ${AutoUpdate_Log_Path}/AutoUpdate.log ${LOG_PATH} AutoUpdate_Log_Path=${LOG_PATH} ECHO y "AutoUpdate 日志保存路径已修改为: ${LOG_PATH}" EXIT 0 fi [[ $1 == rm || $1 == del ]] && { [[ -f ${AutoUpdate_Log_Path}/AutoUpdate.log ]] && rm ${AutoUpdate_Log_Path}/AutoUpdate.log } EXIT 0 done } } AutoUpdate_Main() { local Result [[ ! -f ${Custom_Variable} ]] && touch ${Custom_Variable} LOAD_VARIABLE ${Default_Variable} ${Custom_Variable} [[ ! -d ${AutoUpdate_Path} ]] && mkdir -p ${AutoUpdate_Path} if [[ $(CHECK_PKG wget-ssl) == true ]];then Downloader="wget-ssl --quiet --no-check-certificate -T 5 --no-dns-cache -x -O" DL="wget-ssl" elif [[ $(CHECK_PKG curl) == true ]];then Downloader="curl -L -k -m 5 --silent -o" DL="curl" else Downloader="uclient-fetch --quiet --no-check-certificate -T 5 -O" DL="uclient-fetch" fi [[ -z $* ]] && PREPARE_UPGRADES $* [[ $1 =~ path=/ && ! $* =~ -x && ! $* =~ -U ]] && PREPARE_UPGRADES $* [[ $1 =~ --skip ]] && PREPARE_UPGRADES $* [[ $* =~ -T || $* =~ --verbose ]] && { Downloader="$(echo ${Downloader/ --quiet / })" Downloader="$(echo ${Downloader/ --silent / })" } while [[ $1 ]];do case "$1" in -n | -f | -u | -T | -P | -F | --verbose) LOGGER "Downloader: ${DL} / ${Downloader}" PREPARE_UPGRADES $* ;; --bak) shift [[ $# -lt 1 || $# -gt 2 ]] && ECHO r "格式错误,示例: [bash $0 --bak /mnt/sda1 Openwrt_Backups.tar.gz]" && EXIT 1 [[ $# == 2 ]] && { [[ ! -d $1 ]] && mkdir -p $1 FILE="$1/$2" [[ -f ${FILE} ]] && FILE="${FILE}-$(RANDOM 5)" } || { [[ ! -d $1 ]] && mkdir -p $1 FILE="$1/$(uname -n)-Backups-$(date +%Y-%m-%d)-$(RANDOM 5)" } [[ ! ${FILE} =~ tar.gz ]] && FILE="${FILE}.tar.gz" ECHO "Saving config files to [${FILE}] ..." sysupgrade -b "${FILE}" >/dev/null 2>&1 [[ $? == 0 ]] && { ECHO y "系统文件备份成功!" ECHO y "保存位置: ${FILE}" EXIT 0 } || { ECHO r "备份文件创建失败,请尝试更换保存路径!" EXIT 1 } ;; --clean) shift && [[ -n $* ]] && SHELL_HELP REMOVE_CACHE ;; --check) shift && [[ -n $* ]] && SHELL_HELP CHECK_DEPENDS bash x86:gzip x86:wget-ssl uclient-fetch curl wget openssl which ;; --env) shift [[ -z $* ]] && LIST_ENV 0 && EXIT 0 case "$1" in 1 | 2) LIST_ENV $1 ;; *) SHELL_HELP ;; esac EXIT 0 ;; --log) shift AutoUpdate_LOG $* ;; --random) shift [[ $# != 1 || ! $1 =~ [0-9] || $1 == 0 || $1 -gt 30 ]] && SHELL_HELP || { RANDOM $1 EXIT 0 } ;; --sleep) shift sleep $1 EXIT 0 ;; --var) shift [[ $# != 1 ]] && SHELL_HELP SHOW_VARIABLE=$(GET_VARIABLE "$1" ${Custom_Variable}) [[ -z ${SHOW_VARIABLE} ]] && SHOW_VARIABLE=$(GET_VARIABLE "$1" ${Default_Variable}) echo "${SHOW_VARIABLE}" [[ $? == 0 ]] && EXIT 0 || EXIT 1 ;; --var-rm) shift [[ $# != 1 ]] && SHELL_HELP EDIT_VARIABLE rm ${Custom_Variable} $1 [[ $? == 0 ]] && EXIT 0 || EXIT 1 ;; -x) shift while [[ $1 ]];do case "$1" in url=* | path=/*) : ;; *) SHELL_HELP ;; esac if [[ $1 =~ url= ]];then [[ $1 =~ url= ]] && { [[ -z $(echo $1 | cut -d "=" -f2) ]] && ECHO r "脚本地址不能为空!" && EXIT 1 AutoUpdate_Script_URL="$(echo $1 | cut -d "=" -f2)" } fi [[ $1 =~ path= ]] && { [[ -z $(echo $1 | cut -d "=" -f2) ]] && ECHO r "保存路径不能为空!" && EXIT 1 SH_SAVE_PATH="$(echo $1 | cut -d "=" -f2)" } shift done LOGGER "Downloader: ${Downloader}" [[ -z ${SH_SAVE_PATH} ]] && SH_SAVE_PATH=/bin UPDATE_SCRIPT ${SH_SAVE_PATH} ${AutoUpdate_Script_URL} ;; -B) shift [[ ${TARGET_BOARD} != x86 ]] && EXIT 1 CHANGE_BOOT $1 ;; -C) shift CHANGE_GITHUB $1 ;; -E) shift [[ -z $* ]] && GET_FW_LOG local case "$1" in [Cc]loud) GET_FW_LOG $1 ;; *) [[ -z $* ]] && EXIT 0 [[ $(FW_VERSION_CHECK $1) == true ]] && GET_FW_LOG -v $1 || { ECHO r "固件版本号合法性检查失败!" EXIT 1 } ;; esac EXIT ;; -H | --[Hh]elp) SHELL_HELP ;; -L | --[Ll]ist) shift && [[ -n $* ]] && SHELL_HELP SHOW_VARIABLE ;; -Q) shift [[ -z $* ]] && { echo ${CURRENT_Version} EXIT 0 } case "$1" in [Cc]loud) GET_CLOUD_VERSION [[ -z ${CLOUD_Firmware_Version} ]] && echo "未知" || echo "${CLOUD_Firmware_Version}" ;; esac EXIT 0 ;; -V) shift case "$1" in [Cc]loud) Result="$(${Downloader} - ${AutoUpdate_Script_URL} | egrep -o "V[0-9].+")" ;; *) Result=${Version} esac [[ -z ${Result} ]] && echo "未知" || { LOGGER "Command Result: ${Result}" echo "${Result}" EXIT 0 } ;; *) SHELL_HELP ;; esac shift done } Version=V6.4.6 AutoUpdate_Path=/tmp/AutoUpdate AutoUpdate_Log_Path=/tmp AutoUpdate_Script_URL=https://ghproxy.com/https://raw.githubusercontent.com/Hyy2001X/AutoBuild-Actions/master/Scripts/AutoUpdate.sh Default_Variable=/etc/AutoBuild/Default_Variable Custom_Variable=/etc/AutoBuild/Custom_Variable [[ -n $* ]] && Run_Command="$0 $*" || Run_Command="$0" White="\e[0m" Yellow="\e[33m" Red="\e[31m" Blue="\e[34m" Grey="\e[36m" Green="\e[32m" AutoUpdate_Main $*