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

标签 linux bash sed cut

我是 bash 新手,正在编写一个脚本,需要比较内核的次要版本以查看它是否大于或等于 10,如果不大于或等于 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. 的第一个匹配项之后的字符串。因此 $minker 变为 13.0-generic...3.13.0-generic...

"${minker%%.*}" 是在 中删除 . 及其后面的所有匹配项(从右开始)后留下的字符串$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/

相关文章:

bash - 在 bash 脚本中将未知选项设置为 `s'

linux - 通过 bash 和 ssh 逐字传递引号和其他特殊字符

c - 从 C 代码中弹出 Cd rom 时出现输入/输出错误

python - 无法打开 40 针接头上的 UART

linux - 检查多路径 TCP 连接中的子流

bash - 在数字列表中添加前导空格?

java - 交互式 java 调用很好,但在脚本中同样失败

用于合并由空行分隔的行的 Shell 脚本

regex - Linux重命名命令首字母大写

bash - shell脚本(bash)中的${}命令是什么