gpt4 book ai didi

linux - 从内核提取次要版本到 bash 变量

转载 作者:太空狗 更新时间:2023-10-29 12:02:15 25 4
gpt4 key购买 nike

我是 bash 的新手,正在编写一个脚本,需要比较内核的次要版本,看它是否大于或等于 10,如果不是,则退出。目前我有这样的东西:

KERNEL=$(uname -r)
declare -i MINOR_VERSION=$(echo $KERNEL | cut -c 3-4)
if [ "10" -gt "$MINOR_VERSION"]; then exit 0; fi

这是错误的代码,如果次要版本 < 10 则不起作用,因为我正在使用 cut 并且取决于它是两位数。我可能需要的是使用点来解析次要版本的东西。示例:

$ uname -r
3.4.0-60-generic
$ MNR_VAR=<awesome bash code, with cut or sed or something>
$ echo $MNR_VAR
4

我一直在阅读 cutsed 文档,但只是学起来很慢。我将不胜感激!

TL;DR - 寻找一个 bash 命令,该命令将提取变量中前两个点包围的 int。 “3.13.0.x”返回“13”,“3.2.0.x”返回“2”等。

编辑:对于那些好奇的人,一些答案作为下面的衬垫。

uname -r | cut -d '.' -f2

uname -r | awk -F . '{print $2}'

kernel="$(uname -r)" | tmp="${kernel#*.}" | minor="${tmp%%.*}" | echo "$minor"

最佳答案

在纯 bash 中:

#!/bin/bash
ker="$(uname -r)"
minker="${ker#*.}"
minker="${minker%%.*}"
echo "$minker"

"${ker#*.}"$ker 中第一个 . 匹配之后的字符串。因此$minker3.13.0-generic... 变为 13.0-generic...

"${minker%%.*}" 是通过切割 的所有匹配项(从右开始)留下的字符串。 及其之后的任何内容,在 $矿工。因此 $minker13.0-generic...

变为 13

See the Bash Parameter Expansion Manual for more info

使用 Bash 正则表达式:

#!/bin/bash
regex='([0-9]+)\.([0-9]+)'
[[ $(uname -r) =~ $regex ]]
echo ${BASH_REMATCH[2]}

关于linux - 从内核提取次要版本到 bash 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30856609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com