1
0

download_utils.sh 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #!/bin/bash
  2. # 信号处理
  3. trap 'rm -rf /tmp; exit 130' SIGINT SIGTSTP SIGTERM
  4. # 检查并安装软件包
  5. check_and_install() {
  6. local pkg=$1
  7. if ! command -v "$pkg" >/dev/null 2>&1; then
  8. if command -v apt-get >/dev/null 2>&1; then
  9. sudo apt-get update
  10. sudo apt-get install -y "$pkg"
  11. elif command -v yum >/dev/null 2>&1; then
  12. sudo yum install -y epel-release
  13. sudo yum install -y "$pkg"
  14. elif command -v dnf >/dev/null 2>&1; then
  15. sudo dnf install -y "$pkg"
  16. elif command -v pacman >/dev/null 2>&1; then
  17. sudo pacman -S "$pkg"
  18. elif command -v zypper >/dev/null 2>&1; then
  19. sudo zypper install -y "$pkg"
  20. else
  21. echo -e "\e[31m无法安装 $pkg,不支持的 Linux 发行版\e[0m"
  22. exit 1
  23. fi
  24. fi
  25. }
  26. # 获取 GitHub 仓库的最新标签
  27. get_tag() {
  28. local repo=$1
  29. curl -fsSL "https://api.github.com/repos/$repo/releases/latest" | jq -r '.tag_name'
  30. }
  31. # 定义下载函数
  32. download_file() {
  33. local name=$1
  34. local version=$2
  35. local url=$3
  36. local tmp_file="/tmp/$name.tmp"
  37. local local_version=$(jq -r ".[\"$name\"]" <"$VERSION_FILE" 2>/dev/null || echo "0.0.0")
  38. echo -e "\e[1;47;34m$name 版本信息:【本地版本】$local_version | 【最新版本】$version\e[0m"
  39. if [ "$version" != "$local_version" ]; then
  40. echo -e "\e[37m正在更新 $name 到版本 $version\e[0m"
  41. # 下载文件
  42. if ! curl -I -L -m 10 "$url" >/dev/null 2>&1; then
  43. echo -e "\e[31mURL $url 不存在\e[0m"
  44. return 2
  45. fi
  46. if ! curl -L -m 60 -o "$tmp_file" "$url"; then
  47. echo -e "\e[31m下载 $name 失败\e[0m"
  48. rm -f "$tmp_file"
  49. return 1
  50. fi
  51. # 验证文件完整性
  52. local actual_size=$(du -b "$tmp_file" | awk '{print $1}')
  53. local min_size=$((1048576)) # 1MB minimum file size
  54. if [ "$actual_size" -lt "$min_size" ]; then
  55. echo -e "\e[31m[取消]下载的文件大小小于1MB,文件可能不完整\e[0m"
  56. rm -f "$tmp_file"
  57. return 1
  58. fi
  59. # 下载成功,重命名文件
  60. mv "$tmp_file" "$FILE_DIR/$name"
  61. echo -e "\e[32m成功更新 $name 到版本 $version\e[0m"
  62. return 0
  63. fi
  64. }
  65. # 处理文件下载
  66. process_files() {
  67. local json="{}"
  68. for doc in "${!docs[@]}"; do
  69. if [[ $doc == *_name ]]; then
  70. local name=${docs[$doc]}
  71. local version=${docs[${doc/_name/_version}]}
  72. local url=${docs[${doc/_name/_url}]}
  73. download_file "$name" "$version" "$url"
  74. json=$(jq -r --arg name "$name" --arg version "$version" '.[$name]=$version' <<<"$json")
  75. fi
  76. done
  77. echo "$json" >"$VERSION_FILE"
  78. }