BASH将Linux版本与数字进行比较?
我正在尝试找出如何将当前openSuSE版本号与预设值进行比较 我已经在$version\u ID中安装了当前版本的操作系统 我现在正在研究如何将其与“42.3”进行比较。因此,如果该值不大于或等于quitBASH将Linux版本与数字进行比较?,bash,compare,Bash,Compare,我正在尝试找出如何将当前openSuSE版本号与预设值进行比较 我已经在$version\u ID中安装了当前版本的操作系统 我现在正在研究如何将其与“42.3”进行比较。因此,如果该值不大于或等于quit if [ ! "$VERSION_ID" -ge 42.3 ]; then echo "Sorry Bye"; fi 我得到: [:42.3:需要整数表达式,但我不知道如何修复该问题 有什么建议吗 谢谢您可以使用计算器: 版本号不是浮点值;它们是-分隔的整数序列。42.27比4
if [ ! "$VERSION_ID" -ge 42.3 ]; then
echo "Sorry Bye";
fi
我得到:
[:42.3:需要整数表达式,但我不知道如何修复该问题
有什么建议吗
谢谢您可以使用计算器:
版本号不是浮点值;它们是-分隔的整数序列。42.27比42.3新,42.2.9可能是有效的版本号 将版本号拆分为整数组件,并按词汇数字进行比较:
target=(42 3)
IFS=. read -a v_id <<< "$VERSION_ID"
for ((i=0; i <${#v_id[@]}; i++)); do
if (( ${v_id[i]} == ${target[i]} )); then
continue
fi
if (( ${v_id[i]} < ${target[i]} )); then
echo "version < target"
elif (( ${v_id[i]} > ${target[i]} )); then
echo "version > target"
fi
break
done
一般来说,版本号不是浮点值;它们是。-分隔的整数序列。例如,42.10几乎可以肯定是比42.9更新的版本。@chepner很好,这个dupe可以解决XY问题的Y部分;@Michael O。感谢这似乎做了我需要的事情:稍微更改42.3及以上是允许的:如果[echo$VERSION\u ID'顺便说一句,您可以在算术上下文中对数组使用v\u ID[i]和target[i]。我通常更喜欢算术表达式中的${…},作为对未定义变量的防范,变量本身将默认为0,但扩展中的空字符串会产生语法错误。这也很好。
target=(42 3)
IFS=. read -a v_id <<< "$VERSION_ID"
for ((i=0; i <${#v_id[@]}; i++)); do
if (( ${v_id[i]} == ${target[i]} )); then
continue
fi
if (( ${v_id[i]} < ${target[i]} )); then
echo "version < target"
elif (( ${v_id[i]} > ${target[i]} )); then
echo "version > target"
fi
break
done