如何使用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
相关产品推荐
相关产品推荐

