我是 shell 脚本编程新手。我想写一个简单的shell脚本来检查系统中安装的ubuntu版本;如果版本大于或等于版本 12,则复制一些文件,如果版本小于或等于版本 12,则复制其他一些文件。
lsb_release -rs
命令让我们确定Ubuntu版本,我们可以这样使用它:
if [[ $(lsb_release -rs) == "18.04" ]]; then # replace 8.04 by the number of release you want
echo "Compatible version"
#Copy your files here
else
echo "Non-compatible version"
fi
``(包含反引号)是非 POSIX 且已弃用。
cat /etc/issue.net | awk '{x=2 ; if (substr($x,0,3) == '12') {system("cp <src> <dest>") } else {system("cp <src> <dest>") }}'
cat /etc/issue.net
将显示 3 个字段,其中第 2 个字段是版本号。
通过
substr
我们检查前两位数字是否是版本12,然后通过内部的系统命令awk
我们可以将某些文件从特定的src复制到dest。
解决方案:
cat /proc/version
,解析数字并执行条件/开关语句来执行操作。
来自 RadHat 文档:
此文件指定正在使用的 Linux 内核和 gcc 的版本,以及系统上安装的 Red Hat Enterprise Linux 的版本:
Ubuntu 版本可在文件
/etc/lsb-release
中作为变量 22.04
中的字符串(如 20.04
或 DISTRIB_RELEASE
)获得。您可以 source
此文件并访问 DISTRIB_RELEASE
。但是如果版本是 >=
12 或者其他的话,你需要做一些事情。为此,您需要将版本从字符串转换为整数。
在下面的脚本中,
source
上做
/etc/lsb-release
$DISTRIB_RELEASE
字符串值以仅提取主要版本。因为 $DISTRIB_RELEASE
值类似于 22.04
或 20.04
。$major_ver
)转换为整数并与所需版本(12
)进行比较。#!/usr/bin/env bash
source /etc/lsb-release
if [ -z $DISTRIB_RELEASE ] || [ -z $DISTRIB_ID ]; then
echo "DISTRIB_RELEASE and DISTRIB_ID are not set"
else
if [ $DISTRIB_ID == "Ubuntu" ]; then
IFS='.' read -r -a distro_vers <<< $DISTRIB_RELEASE
major_ver=${distro_vers[0]}
echo "Distro major version $major_ver"
if [ -z $major_ver ]; then
echo "Major release version parsing failed"
else
if [ $(($major_ver)) -ge 12 ]; then
echo "Ubuntu major version is greater than 12"
# do your operation here
else
echo "Ubuntu major version is lesser than 12"
# do your operation here
fi
fi
else
echo "It is not ubuntu linux"
fi
fi