我有一个开源 shell/bash 脚本,用于设置和配置托管服务器,为了安装 cloudflare,我使用拉取 RHEL 版本这个命令:
RHEL_VERSION=$(rpm -q --qf "%{VERSION}" $(rpm -q --whatprovides redhat-release) );
问题是,如果存在次要版本,则会返回该次要版本,而不仅仅是主要版本。使用上面的 cmd 它将返回7.2
...问题是,我只需要主版本号。
我想我可能可以只使用它rpm -q --whatprovides redhat-release
会返回类似cloudlinux-release-7.2-1.el7.x86_64
, 然后只是sed
,awk
等来获取el7
字符串的一部分。
我需要它才能在创建包 URL 时使用该字符串:
PACKAGE_URL="http://pkg.cloudflare.com/cloudflare-release-latest.el${RHEL_VERSION}.rpm"
答案1
要截取主要版本组件,只需执行以下操作:
... | grep -Eo '^[0-9]*'
-o
此扩展选项grep
仅打印匹配的部分;这里,第一个数字前面有一个点字符。
答案2
$ RHEL_VERSION=7.2-1.el6
$ echo "${RHEL_VERSION%%[!0-9]*}"
7
$ echo "${RHEL_VERSION%%-*}"
7.2
$ echo "${RHEL_VERSION##*.}"
el6
$ echo "${RHEL_VERSION##*[!0-9]}"
6
答案3
我没有转速在这个系统上,但我设法做到了这一点巴什:
PROVIDED=cloudlinux-release-7.2-1.el7.x86_64
RHEL_VERSION=`echo $PROVIDED | sed 's/^.*-release-\([0-9]\).*/\1/'
echo $RHEL_VERSION
输出“ 7
”。
如果需要,您可以将“ -release-
”替换为更合适的正则表达式。
您可以尝试以下方法:
echo $PROVIDED | sed -ne 's/^[^-]*-\([^-]*\)-.*$/\1/p'
release
它为我 返回“ ”[--版本:sed (GNU sed) 4.2.2]。
答案4
您可能还想咨询这个很棒的答案关于可靠地确定您的操作系统名称(和版本)。根据该答案,您可以执行以下操作:
RHEL_VERSION="$(lsb_release -r | awk '{print $NF}')"
然后使用提供的任何其他答案来提取主版本号。优点是这种方法比 RHEL 适用于更多发行版。
如果您确定版本号将是纯数字(用小数点分隔主要数字和次要数字,您可以一举完成这一切:
RHEL_MAJOR_VERSION="$(lsb_release -r|awk '{printf "%d\n",$N}')"