You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用BASH脚本检测Arch Linux、CentOS和Ubuntu操作系统?

Linux发行版检测脚本解决方案

问题根源

你最初用uname的脚本失效,是因为uname返回的是内核名称(通常是Linux),而非具体发行版名称,所以无法匹配Arch/CentOS/Ubuntu。

可行方案

利用Linux标准文件/etc/os-release来判断,该文件包含发行版的标准标识,其中ID字段是稳定的发行版代号(arch/centos/ubuntu),比带版本号的PRETTY_NAME更适合做判断。

方案一:直接导入环境变量(推荐)

通过.命令将/etc/os-release中的变量导入当前Shell环境,直接使用$ID判断:

# 加载/etc/os-release中的变量
. /etc/os-release

case "$ID" in
    arch)
        echo "Arch Linux detected"
        ;;
    centos)
        echo "CentOS detected"
        ;;
    ubuntu)
        echo "Ubuntu detected"
        ;;
    *)
        echo "Unknown OS detected"
        ;;
esac

方案二:提取ID字段值

如果不想导入环境变量,可以用grep+cut提取ID字段内容:

# 提取纯净的发行版ID值
os_id=$(grep -E '^ID=' /etc/os-release | cut -d'=' -f2 | tr -d '"')

if [ "$os_id" = "arch" ]; then
    echo "Arch Linux detected"
elif [ "$os_id" = "centos" ]; then
    echo "CentOS detected"
elif [ "$os_id" = "ubuntu" ]; then
    echo "Ubuntu detected"
else
    echo "Unknown OS detected"
fi

说明

  • /etc/os-release是Systemd规范下Linux发行版的标准配置文件,主流发行版(包括你要检测的三种)都会包含。
  • 用ID字段判断比PRETTY_NAME更可靠,因为PRETTY_NAME会随版本更新变化(比如Ubuntu 20.04.2 LTS),而ID始终固定。

内容的提问来源于stack exchange,提问作者Vegard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 09:20:22