V6.6.9 修复固件版本号截取; 优化代码

This commit is contained in:
Hyy2001X 2021-11-02 09:22:58 +08:00
parent 1a9120b550
commit fc9f4e0b00
1 changed files with 65 additions and 85 deletions

View File

@ -3,7 +3,7 @@
# AutoUpdate for Openwrt # AutoUpdate for Openwrt
# Dependences: bash wget-ssl/wget/uclient-fetch curl openssl jsonfilter # Dependences: bash wget-ssl/wget/uclient-fetch curl openssl jsonfilter
Version=V6.6.8 Version=V6.6.9
function TITLE() { function TITLE() {
clear && echo "Openwrt-AutoUpdate Script by Hyy2001 ${Version}" clear && echo "Openwrt-AutoUpdate Script by Hyy2001 ${Version}"
@ -85,13 +85,14 @@ EOF
} }
function RM() { function RM() {
rm -f $1 2> /dev/null [[ -z $* ]] && return 1
[[ $? == 0 ]] && LOGGER "已删除文件: [$1]" || LOGGER "[$1] 删除失败!" rm -rf "$*" 2> /dev/null
LOGGER "已删除文件: [$1]"
} }
function LIST_ENV() { function LIST_ENV() {
local X local X
cat /etc/AutoBuild/*_Variable | grep -v '#' | while read X;do grep -v '#' /etc/AutoBuild/*_Variable | while read X;do
[[ ${X} =~ "=" ]] && { [[ ${X} =~ "=" ]] && {
case "$1" in case "$1" in
1 | 2) 1 | 2)
@ -107,7 +108,7 @@ function LIST_ENV() {
function CHECK_ENV() { function CHECK_ENV() {
while [[ $1 ]];do while [[ $1 ]];do
[[ $(LIST_ENV 1) =~ $1 ]] && LOGGER "[CHECK_ENV] Checking env $1 ... true" || ECHO r "[CHECK_ENV] Checking env $1 ... false" [[ $(LIST_ENV 1) =~ $1 ]] && LOGGER "[CHECK_ENV] 检查变量 $1 ... true" || ECHO r "[CHECK_ENV] 检查变量 $1 ... false"
shift shift
done done
} }
@ -185,7 +186,6 @@ function GET_SHA256SUM() {
} }
function GET_VARIABLE() { function GET_VARIABLE() {
[[ $# != 2 ]] && SHELL_HELP
[[ ! -f $2 ]] && ECHO "[GET_VARIABLE] 未检测到环境变量文件: [$2] !" && EXIT 1 [[ ! -f $2 ]] && ECHO "[GET_VARIABLE] 未检测到环境变量文件: [$2] !" && EXIT 1
local Result="$(grep "$1=" $2 | grep -v "#" | awk 'NR==1' | sed -r "s/$1=(.*)/\1/")" local Result="$(grep "$1=" $2 | grep -v "#" | awk 'NR==1' | sed -r "s/$1=(.*)/\1/")"
[[ -n ${Result} ]] && { [[ -n ${Result} ]] && {
@ -233,10 +233,9 @@ function LOAD_VARIABLE() {
function EDIT_VARIABLE() { function EDIT_VARIABLE() {
local Mode="$1" local Mode="$1"
shift shift
[[ ! -f $1 ]] && ECHO r "未检测到环境变量文件: [$1] !" && EXIT 1 [[ ! -f $1 ]] && ECHO r "未检测到环境变量文件: [$1] !" && return 1
case "${Mode}" in case "${Mode}" in
edit) edit)
[[ $# != 3 ]] && SHELL_HELP
[[ -z $(GET_VARIABLE $2 $1) ]] && { [[ -z $(GET_VARIABLE $2 $1) ]] && {
LOGGER "[EDIT_VARIABLE] 新增环境变量 [$2=$3]" LOGGER "[EDIT_VARIABLE] 新增环境变量 [$2=$3]"
echo -e "\n$2=$3" >> $1 echo -e "\n$2=$3" >> $1
@ -245,7 +244,6 @@ function EDIT_VARIABLE() {
} }
;; ;;
rm) rm)
[[ $# != 2 ]] && SHELL_HELP
LOGGER "[EDIT_VARIABLE] 从 $1 删除环境变量 [$2] ..." LOGGER "[EDIT_VARIABLE] 从 $1 删除环境变量 [$2] ..."
sed -i "/$2/d" $1 sed -i "/$2/d" $1
;; ;;
@ -316,19 +314,18 @@ function UPDATE_SCRIPT() {
function CHECK_DEPENDS() { function CHECK_DEPENDS() {
TITLE TITLE
local PKG Tab local PKG
echo -e "\n软件包 检测结果" printf "\n%-28s %-5s\n" 软件包 检测结果
while [[ $1 ]];do while [[ $1 ]];do
if [[ $1 =~ : ]];then if [[ $1 =~ : ]];then
[[ $(echo $1 | cut -d ":" -f1) == ${TARGET_BOARD} ]] && { [[ $(echo $1 | cut -d ":" -f1) == ${TARGET_BOARD} ]] && {
PKG="$(echo "$1" | cut -d ":" -f2)" PKG="$(echo "$1" | cut -d ":" -f2)"
[[ $(echo "${PKG}" | wc -c) -gt 8 ]] && Tab=" " || Tab=" " [[ $(echo "${PKG}" | wc -c) -gt 8 ]] && Tab=" " || Tab=" "
echo -e "${PKG}${Tab}$(CHECK_PKG ${PKG})" printf "%-25s %-5s\n" ${PKG} $(CHECK_PKG ${PKG})
LOGGER "[CHECK_DEPENDS] 检查软件包: [${PKG}] ... $(CHECK_PKG ${PKG})" LOGGER "[CHECK_DEPENDS] 检查软件包: [${PKG}] ... $(CHECK_PKG ${PKG})"
} }
else else
[[ $(echo "$1" | wc -c) -gt 8 ]] && Tab=" " || Tab=" " printf "%-25s %-5s\n" $1 $(CHECK_PKG $1)
echo -e "$1${Tab}$(CHECK_PKG $1)"
LOGGER "[CHECK_DEPENDS] 检查软件包: [$1] ... $(CHECK_PKG $1)" LOGGER "[CHECK_DEPENDS] 检查软件包: [$1] ... $(CHECK_PKG $1)"
fi fi
shift shift
@ -336,17 +333,6 @@ function CHECK_DEPENDS() {
ECHO y "AutoUpdate 依赖检测结束,请尝试手动安装测结果为 [false] 的项目!" ECHO y "AutoUpdate 依赖检测结束,请尝试手动安装测结果为 [false] 的项目!"
} }
function CHECK_VERSION() {
[[ $# -gt 1 ]] && echo false && return
[[ $1 =~ R[1-9.]{2}.+-[0-9]{8} ]] && {
echo true
LOGGER "[CHECK_VERSION] 检查固件版本号: [$1] ... true"
} || {
echo false
LOGGER "[CHECK_VERSION] 检查固件版本号: [$1] ... false"
}
}
function CHECK_TIME() { function CHECK_TIME() {
[[ -s $1 && -n $(find $1 -type f -mmin -$2) ]] && { [[ -s $1 && -n $(find $1 -type f -mmin -$2) ]] && {
LOGGER "[CHECK_TIME] 文件: [$1] 距离修改时间小于 $2 分钟!" LOGGER "[CHECK_TIME] 文件: [$1] 距离修改时间小于 $2 分钟!"
@ -358,7 +344,7 @@ function CHECK_TIME() {
} }
} }
function ANALYSIS_API() { function ANALYZE_API() {
local url name date size version count sha256 local url name date size version count sha256
local API_Cache=${Tmp_Path}/API_Cache local API_Cache=${Tmp_Path}/API_Cache
[[ $(CHECK_TIME ${API_File} 1) == false ]] && { [[ $(CHECK_TIME ${API_File} 1) == false ]] && {
@ -368,29 +354,33 @@ function ANALYSIS_API() {
EXIT 2 EXIT 2
} }
RM ${API_File} && touch -a ${API_File} RM ${API_File} && touch -a ${API_File}
LOGGER "[ANALYSIS_API] 开始解析 Github API ..." LOGGER "[ANALYZE_API] 开始解析 Github API ..."
for i in $(seq 0 500);do for i in $(seq 0 500);do
name=$(jsonfilter -i ${API_Cache} -e '@["assets"]' | jsonfilter -e '@['""$i""'].name' 2> /dev/null) name=$(jsonfilter -i ${API_Cache} -e '@["assets"]' | jsonfilter -e '@['""$i""'].name' 2> /dev/null)
[[ ! $? == 0 ]] && break [[ ! $? == 0 ]] && break
if [[ ${name} =~ "AutoBuild-${OP_REPO_NAME}-${TARGET_PROFILE}" || ${name} =~ Update_Logs.json ]] if [[ ${name} =~ "AutoBuild-${OP_REPO_NAME}-${TARGET_PROFILE}" || ${name} =~ Update_Logs.json ]]
then then
version=$(echo ${name} | egrep -o "R[0-9].+-[0-9]{8}") version=$(echo ${name} | egrep -o "R[0-9.]+-[0-9]+")
url=$(jsonfilter -i ${API_Cache} -e '@["assets"]' | jsonfilter -e '@['""$i""'].browser_download_url' 2> /dev/null) url=$(jsonfilter -i ${API_Cache} -e '@["assets"]' | jsonfilter -e '@['""$i""'].browser_download_url' 2> /dev/null)
size=$(jsonfilter -i ${API_Cache} -e '@["assets"]' | jsonfilter -e '@['""$i""'].size' 2> /dev/null | awk '{a=$1/1048576} {printf("%.2f\n",a)}') size=$(jsonfilter -i ${API_Cache} -e '@["assets"]' | jsonfilter -e '@['""$i""'].size' 2> /dev/null | awk '{a=$1/1048576} {printf("%.2f\n",a)}')
date=$(jsonfilter -i ${API_Cache} -e '@["assets"]' | jsonfilter -e '@['""$i""'].updated_at' 2> /dev/null | sed 's/[-:TZ]//g') date=$(jsonfilter -i ${API_Cache} -e '@["assets"]' | jsonfilter -e '@['""$i""'].updated_at' 2> /dev/null | sed 's/[-:TZ]//g')
count=$(jsonfilter -i ${API_Cache} -e '@["assets"]' | jsonfilter -e '@['""$i""'].download_count' 2> /dev/null) count=$(jsonfilter -i ${API_Cache} -e '@["assets"]' | jsonfilter -e '@['""$i""'].download_count' 2> /dev/null)
sha256=$(echo ${name} | egrep -o "\-[a-z0-9]+" | cut -c2-6 | awk 'END{print}') sha256=$(echo ${name} | egrep -o "\-[a-z0-9]+" | cut -c2-6 | awk 'END{print}')
[[ -z ${name} ]] && name="-"
[[ -z ${version} ]] && version="-"
[[ -z ${url} ]] && url="-"
[[ -z ${size} ]] && size="-"
[[ -z ${date} ]] && date="-"
[[ -z ${count} ]] && count="-"
[[ -z ${sha256} ]] && sha256="-"
printf "%-75s %-5s %-8s %-20s %-10s %-15s %s\n" ${name} ${count} ${sha256} ${version} ${date} ${size}MB ${url} >> ${API_File} printf "%-75s %-5s %-8s %-20s %-10s %-15s %s\n" ${name} ${count} ${sha256} ${version} ${date} ${size}MB ${url} >> ${API_File}
fi fi
done done
unset i unset i
} }
awk -F ' ' '{print NF}' ${API_File} | while read X;do
[[ ${X} != 7 ]] && LOGGER "[ANALYSIS_API] API 解析异常: ${X}"
done
[[ -z $(cat ${API_File} 2> /dev/null) ]] && { [[ -z $(cat ${API_File} 2> /dev/null) ]] && {
ECHO r "Github API 解析失败!" ECHO r "Github API 解析内容为空!"
EXIT 2 return 1
} }
} }
@ -398,14 +388,14 @@ function GET_CLOUD_LOG() {
local Result Version local Result Version
[[ ! $(cat ${API_File} 2> /dev/null) =~ Update_Logs.json ]] && { [[ ! $(cat ${API_File} 2> /dev/null) =~ Update_Logs.json ]] && {
LOGGER "[GET_CLOUD_LOG] 未检测到云端日志文件!" LOGGER "[GET_CLOUD_LOG] 未检测到云端日志文件!"
return return 1
} }
case "$1" in case "$1" in
[Ll]ocal) [Ll]ocal)
Version="${CURRENT_Version}" Version="${CURRENT_Version}"
;; ;;
[Cc]loud) [Cc]loud)
Version="$(GET_CLOUD_INFO version)" Version="$(GET_FW_INFO 4)"
;; ;;
-v) -v)
shift shift
@ -424,41 +414,36 @@ function GET_CLOUD_LOG() {
} }
} }
function GET_CLOUD_INFO() { function GET_FW_INFO() {
local Info local Info Type Result
[[ ! -s ${API_File} ]] && { [[ ! -s ${API_File} ]] && {
LOGGER "[GET_CLOUD_INFO] 未检测到 API 文件!" LOGGER "[GET_FW_INFO] 未检测到 API 文件!"
return return 1
} }
if [[ $1 =~ (All|all|-a) ]];then if [[ $1 == "-a" ]];then
Info=$(grep "AutoBuild-${OP_REPO_NAME}-${TARGET_PROFILE}" ${API_File} | grep "${x86_Boot}" | uniq) Info=$(grep "AutoBuild-${OP_REPO_NAME}-${TARGET_PROFILE}" ${API_File} | grep "${x86_Boot}" | uniq)
shift shift
else else
Info=$(grep "AutoBuild-${OP_REPO_NAME}-${TARGET_PROFILE}" ${API_File} | grep "${x86_Boot}" | awk 'BEGIN {MAX = 0} {if ($5+0 > MAX+0) {MAX=$5 ;content=$0} } END {print content}') Info=$(grep "AutoBuild-${OP_REPO_NAME}-${TARGET_PROFILE}" ${API_File} | grep "${x86_Boot}" | awk 'BEGIN {MAX = 0} {if ($5+0 > MAX+0) {MAX=$5 ;content=$0} } END {print content}')
fi fi
case "$1" in Result=$(echo "${Info}" | awk '{print $"'${1}'"}' 2> /dev/null)
name) case $1 in
echo "${Info}" | awk '{print $1}' 1) Type="固件名称";;
;; 2) Type="下载次数";;
count) 3) Type=" SHA256 ";;
echo "${Info}" | awk '{print $2}' 4) Type="固件版本";;
;; 5) Type="发布日期";;
sha256) 6) Type="固件体积";;
echo "${Info}" | awk '{print $3}' 7) Type="固件链接";;
;; *) Type="未定义信息";;
version)
echo "${Info}" | awk '{print $4}'
;;
date)
echo "${Info}" | awk '{print $5}'
;;
size)
echo "${Info}" | awk '{print $6}'
;;
url)
echo "${Info}" | awk '{print $7}'
;;
esac esac
[[ ! ${Result} == "-" ]] && {
LOGGER "[GET_FW_INFO] 获取${Type}: ${Result}"
echo -e "${Result}"
} || {
LOGGER "[GET_FW_INFO] ${Type}获取失败!"
return 1
}
} }
function UPGRADE() { function UPGRADE() {
@ -548,13 +533,14 @@ function UPGRADE() {
} }
fi fi
ECHO "正在检查版本更新 ..." ECHO "正在检查版本更新 ..."
ANALYSIS_API ANALYZE_API
CLOUD_FW_Version=$(GET_CLOUD_INFO version) CLOUD_FW_Name=$(GET_FW_INFO 1)
CLOUD_FW_Name=$(GET_CLOUD_INFO name) CLOUD_FW_Count=$(GET_FW_INFO 2)
CLOUD_FW_Count=$(GET_CLOUD_INFO count) CLOUD_FW_SHA256=$(GET_FW_INFO 3)
CLOUD_FW_Size=$(GET_CLOUD_INFO size) CLOUD_FW_Version=$(GET_FW_INFO 4)
CLOUD_FW_Url=$(GET_CLOUD_INFO url) CLOUD_FW_Date=$(GET_FW_INFO 5)
CLOUD_FW_SHA256=$(GET_CLOUD_INFO sha256) CLOUD_FW_Size=$(GET_FW_INFO 6)
CLOUD_FW_Url=$(GET_FW_INFO 7)
[[ -z ${CLOUD_FW_Name} ]] && { [[ -z ${CLOUD_FW_Name} ]] && {
ECHO r "云端固件信息获取失败!" ECHO r "云端固件信息获取失败!"
EXIT 2 EXIT 2
@ -1012,16 +998,15 @@ function AutoUpdate_Main() {
} }
;; ;;
--clean) --clean)
shift && [[ -n $* ]] && SHELL_HELP
REMOVE_CACHE REMOVE_CACHE
EXIT EXIT
;; ;;
--check) --check)
shift && [[ -n $* ]] && SHELL_HELP shift
CHECK_DEPENDS bash uclient-fetch curl wget openssl jsonfilter CHECK_DEPENDS bash uclient-fetch curl wget openssl jsonfilter
[[ $(NETWORK_CHECK 223.5.5.5 2) == false ]] && { [[ $(NETWORK_CHECK 223.5.5.5 2) == false ]] && {
ECHO r "网络连接错误!" ECHO r "基础网络连接错误!"
} || ECHO y "网络连接正常!" } || ECHO y "基础网络连接正常!"
CHECK_ENV ${ENV_DEPENDS} CHECK_ENV ${ENV_DEPENDS}
EXIT EXIT
;; ;;
@ -1044,8 +1029,8 @@ function AutoUpdate_Main() {
case "$1" in case "$1" in
[Cc]loud) [Cc]loud)
shift shift
ANALYSIS_API > /dev/null 2>&1 ANALYZE_API > /dev/null 2>&1
GET_CLOUD_INFO $* version GET_FW_INFO $* 4
;; ;;
*) *)
SHELL_HELP SHELL_HELP
@ -1055,20 +1040,15 @@ function AutoUpdate_Main() {
;; ;;
--fw-log) --fw-log)
shift shift
ANALYSIS_API ANALYZE_API
[[ -z $* ]] && GET_CLOUD_LOG local [[ -z $* ]] && GET_CLOUD_LOG local
case "$1" in case "$1" in
[Cc]loud) [Cc]loud)
GET_CLOUD_LOG $1 GET_CLOUD_LOG $1
;; ;;
*) *)
[[ -z $* ]] && EXIT 0 [[ -z $* ]] && EXIT
[[ ! $(CHECK_VERSION $1) == true ]] && { GET_CLOUD_LOG -v $1
ECHO r "固件版本号合法性检查失败!"
EXIT 1
} || {
GET_CLOUD_LOG -v $1
}
;; ;;
esac esac
EXIT EXIT
@ -1134,8 +1114,8 @@ function AutoUpdate_Main() {
EXIT EXIT
;; ;;
-O) -O)
ANALYSIS_API ANALYZE_API
GET_CLOUD_INFO -a name GET_FW_INFO -a 1
EXIT EXIT
;; ;;
*) *)