#!/bin/bash

set -eo pipefail

# 定义脚本参数
DOCKER_VERSION="20.10"  # 在这里修改期望的版本
UBUNTU_IDS=("18.04" "20.04" "22.04" "24.04")
ALIYUN_MIRROR="https://mirrors.aliyun.com"
DOCKER_COMPOSE_VERSION="2.26.1"

# 1. 检测Ubuntu环境
check_ubuntu() {
  if ! command -v lsb_release &> /dev/null || [[ $(lsb_release -is) != "Ubuntu" ]]; then
    echo "错误：本脚本仅支持Ubuntu系统"
    exit 1
  fi

  local version_id=$(lsb_release -rs)
  if [[ ! " ${UBUNTU_IDS[*]} " =~ " ${version_id} " ]]; then
    echo "错误：不支持的Ubuntu版本 ${version_id}，支持版本：${UBUNTU_IDS[*]}"
    exit 1
  fi
}

# 2. 替换阿里云源
set_aliyun_mirror() {
  sudo sed -i "s/archive.ubuntu.com/mirrors.aliyun.com/g" /etc/apt/sources.list
  sudo sed -i "s/security.ubuntu.com/mirrors.aliyun.com/g" /etc/apt/sources.list
  sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates
}

# 3. 准备Docker仓库
prepare_docker_env() {
  sudo mkdir -p /etc/apt/keyrings
  curl -fsSL $ALIYUN_MIRROR/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

  local codename=$(lsb_release -cs)
  echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] $ALIYUN_MIRROR/docker-ce/linux/ubuntu $codename stable" | \
    sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  sudo apt-get update
}

# 4. 版本解析优化版本
get_docker_version() {
  local target_version=""
  if [[ $DOCKER_VERSION =~ ^[0-9]+\.[0-9]+$ ]]; then
    # 提取大版本下最高小版本
    target_version=$(apt-cache madison docker-ce \
      | awk -F'|' '{gsub(/ /,"",$2); print $2}' \
      | grep -E "^[0-9]+:${DOCKER_VERSION}([.-]|\~\w+)" \
      | sort -rV \
      | head -1)
  elif [[ $DOCKER_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
    # 精确版本匹配
    target_version=$(apt-cache madison docker-ce \
      | awk -F'|' '{gsub(/ /,"",$2); print $2}' \
      | grep -E "^[0-9]+:${DOCKER_VERSION}.*$(lsb_release -cs)" )
  fi

  [ -z "$target_version" ] && echo "错误：找不到Docker版本 $DOCKER_VERSION" && exit 1
  echo "$target_version" | sed 's/^[0-9]+://'  # 去除前缀
}

# 5. 主流程
main() {
  check_ubuntu
  echo "-- 设置阿里云源 --"
  set_aliyun_mirror

  echo "-- 准备Docker仓库 --"
  prepare_docker_env

  echo "-- 解析Docker版本 --"
  local full_version=$(get_docker_version)
  echo "选择版本：$full_version"

  echo "-- 安装组件 --"
  sudo apt-get install -y \
    docker-ce-cli="$full_version" \
    docker-ce="$full_version" \
    docker-ce-rootless-extras="$full_version" \
    containerd.io \
    docker-buildx-plugin \
    docker-compose-plugin

  echo "-- 安装docker-compose --"
  sudo curl -sSL "https://get.daocloud.io/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m`" -o /usr/local/bin/docker-compose
  sudo chmod +x /usr/local/bin/docker-compose

  echo "-- 禁用自动更新 --"
  sudo apt-mark hold docker-ce docker-ce-cli containerd.io

  echo "-- 启动服务 --"
  sudo systemctl enable docker && sudo systemctl start docker

  echo -e "\n=== 安装完成 ==="
  docker --version
  docker-compose --version
}

main




请写一个shell，基于上述的部分安装逻辑，实现如下的功能
脚本前面提取变量 docker的版本号 20.10.15 或 20.10（安装小版本最高的版本）
1. 检测当前主机是否是ubuntu环境，本脚本支支持Ubuntu
2. 获取本机的版本号，支持ubuntu18.04 20.04 22.04 24.04的版本
3. 根据ubuntu版本修改，apt的镜像源为阿里源
4. 在线安装符合变量版本的docker，在线安装docker-compose，安装常用的插件
5. 禁止docker自动更新
