如何在Shell脚本中根据Ubuntu版本编写条件判断执行对应命令
在Shell脚本中根据Ubuntu版本分支执行命令的实现方法
方案一:基于主版本号的数值比较(简单直接)
这种方法提取Ubuntu的主版本号(如18、20),通过数值判断分支执行命令:
#!/bin/bash # 从/etc/os-release提取Ubuntu主版本号(兼容大多数系统) UBUNTU_MAJOR=$(grep -oP 'VERSION_ID="\K[0-9]+' /etc/os-release) # 判断版本并执行对应命令 if [ "$UBUNTU_MAJOR" -le 18 ]; then # 此处替换为你的命令A echo "Running Command A (Ubuntu 18 or older)" # 示例:apt-get install -y package-for-old-ubuntu else # 此处替换为你的命令B echo "Running Command B (Ubuntu 19 or newer)" # 示例:apt install -y package-for-new-ubuntu fi
方案二:使用dpkg版本比较(更精准)
如果需要精确处理完整版本号(如区分18.04和18.10),推荐使用Debian/Ubuntu自带的dpkg --compare-versions工具,它能正确解析版本号格式:
#!/bin/bash # 获取完整的Ubuntu版本号 UBUNTU_VERSION=$(grep -oP 'VERSION_ID="\K[^"]+' /etc/os-release) # 使用dpkg进行版本比较 if dpkg --compare-versions "$UBUNTU_VERSION" le 18.04; then # 执行命令A echo "Running Command A (Ubuntu 18.04 or older)" else # 执行命令B echo "Running Command B (Ubuntu newer than 18.04)" fi
关键说明
/etc/os-release是所有现代Ubuntu系统都存在的文件,比lsb_release更可靠(部分最小化系统可能未预装lsb-release包)dpkg --compare-versions支持的比较操作符包括:le(小于等于)、lt(小于)、ge(大于等于)、gt(大于)、eq(等于)等,满足各种版本判断需求
内容的提问来源于stack exchange,提问作者Priyanshu
相关产品推荐
相关产品推荐

