【发布时间】:2015-08-31 14:58:34
【问题描述】:
我是 bash 新手,正在编写一个脚本,需要比较内核的次要版本,看是否大于等于 10,如果不是则退出。目前我有这样的事情:
KERNEL=$(uname -r)
declare -i MINOR_VERSION=$(echo $KERNEL | cut -c 3-4)
if [ "10" -gt "$MINOR_VERSION"]; then exit 0; fi
这是错误的代码,如果次要版本
$ uname -r
3.4.0-60-generic
$ MNR_VAR=<awesome bash code, with cut or sed or something>
$ echo $MNR_VAR
4
我一直在阅读 cut 和 sed 的文档,但我读起来很慢。我将不胜感激!
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"
【问题讨论】:
-
KERNEL = $(uname -r)不正确;=周围不能有空格。此外,您最终还需要注意主要数字; 3.9 太旧了,但 4.1 大概不是。 -
感谢空格可能是来自恶意笔记程序的自动更正。我很欣赏对主要版本的评论,我已经考虑过了,肯定也会检查。