ls -a node -v PACKAGE_NAME="android-sdk" ZIP_FILE="${PACKAGE_NAME}-1.0.1.tar.gz" DEST_DIR="android-sdk" NEXUS_URL="http://25.12.10.69:8081" ZIP_URL="${NEXUS_URL}/repository/gradle-release/org/df/android-sdk/1.0.1/${ZIP_FILE}" MD5_URL="${ZIP_URL}.md5" # MD5 文件的直接链接 # 错误处理函数 handle_error() { echo "错误:$1" exit 1 } # 获取远程MD5值 get_remote_md5() { local remote_md5=$(wget -q -O - "$MD5_URL" | awk '{print $1}') if [ -z "$remote_md5" ]; then handle_error "无法获取远程MD5校验值" fi echo "$remote_md5" } # 获取本地MD5值 get_local_md5() { if [ -f "$ZIP_FILE" ]; then md5sum "$ZIP_FILE" | awk '{print $1}' else echo "" fi } remote_md5=$(get_remote_md5) local_md5=$(get_local_md5) # 3. 比较MD5值 if [ "$remote_md5" = "$local_md5" ]; then echo "MD5校验值匹配,无需下载更新" # 检查是否需要解压(如果目标目录为空) if [ ! -d "$DEST_DIR" ] || [ -z "$(ls -A "$DEST_DIR")" ]; then echo "目标目录为空,开始解压..." mkdir -p "$DEST_DIR" tar -xzvf "$ZIP_FILE" -C "$DEST_DIR" --strip-components=1 || handle_error "解压失败" echo "解压完成" else echo "目标目录非空,跳过解压" fi exit 0 fi echo "MD5校验值不匹配或文件不存在,开始更新..." # 4. 尝试删除已存在的文件和文件夹 echo "正在清理旧文件..." rm -rf "$ZIP_FILE" "$DEST_DIR" || handle_error "清理失败" echo "清理完成" # 5. 下载ZIP文件 echo "开始下载 $ZIP_FILE..." wget -q "$ZIP_URL" -O "$ZIP_FILE" || handle_error "下载失败" echo "下载完成" # 6. 验证下载后的MD5(使用已获取的remote_md5,无需重新获取) new_local_md5=$(get_local_md5) if [ "$new_local_md5" != "$remote_md5" ]; then handle_error "下载的文件MD5校验失败: 本地=$new_local_md5, 远程=$remote_md5" fi echo "MD5校验成功" # 7. 创建目标目录 mkdir -p "$DEST_DIR" || handle_error "创建目录失败" # 8. 解压文件 echo "正在解压..." tar -xzvf "$ZIP_FILE" -C "$DEST_DIR" --strip-components=1 || handle_error "解压失败" echo "解压完成,文件已提取到 $DEST_DIR"