pkg_check.sh 1.77 KB
Newer Older
liumg's avatar
liumg committed
1
2
3
#!/bin/bash

function pkg_check() {
liumg's avatar
liumg committed
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    local pkgs_debian=("dmidecode" "lshw" "pciutils" "numactl-dev" "ipmitool" "mlocate")
    local pkgs_centos=("dmidecode" "lshw" "pciutils" "numactl-devel" "ipmitool" "mlocate")
    local cmd=("dmidecode" "lshw" "lspci" "numactl" "ipmitool" "locate")
    
    local missing_pkgs=()
    local missing_cmds=()
    local package_manager=""
    local distro_pkgs=()
    
    # 检测包管理器
    if command -v apt-get &>/dev/null; then
        package_manager="apt-get"
        distro_pkgs=("${pkgs_debian[@]}")
    elif command -v yum &>/dev/null; then
        package_manager="yum"
        distro_pkgs=("${pkgs_centos[@]}")
    elif command -v dnf &>/dev/null; then
        package_manager="dnf"
        distro_pkgs=("${pkgs_centos[@]}")
    else
        echo "错误: 未检测到支持的包管理器 (apt-get, yum, dnf)"
        return 1
    fi
    
    echo "=== 检查系统命令依赖 ==="
    
    # 检查所有命令
liumg's avatar
liumg committed
31
    for ((i=0; i<${#cmd[@]}; i++)); do
liumg's avatar
liumg committed
32
33
34
35
36
37
        if ! command -v "${cmd[i]}" &>/dev/null; then
            missing_cmds+=("${cmd[i]}")
            missing_pkgs+=("${distro_pkgs[i]}")
            echo "[缺失] ${cmd[i]} → 需要安装: ${distro_pkgs[i]}"
        else
            echo "[已安装] ${cmd[i]}"
liumg's avatar
liumg committed
38
39
        fi
    done
liumg's avatar
liumg committed
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
    
    # 处理缺失的包
    if [ ${#missing_pkgs[@]} -eq 0 ]; then
        echo "所有依赖命令均已安装 ✓"
        return 0
    else
        echo "============================="
        echo "缺失的命令: ${missing_cmds[*]}"
        echo "需要安装的包: ${missing_pkgs[*]}"
        echo ""
        echo "安装命令:"
        echo "  $package_manager install -y ${missing_pkgs[*]}"
        echo ""
        echo "请安装上述包后重新运行脚本"
        return 1
    fi
}

pkg_check