BASH 将 Linux 版本与数字进行比较?



我正在尝试弄清楚如何将当前的openSuSE版本号与预设值进行比较。

我已经安装了操作系统的当前版本$VERSION_ID

我现在正在尝试研究如何将其与"42.3"进行比较。因此,如果该值不大于或等于退出。

if [ ! "$VERSION_ID" -ge 42.3 ]; then
echo "Sorry Bye";
fi  

我得到:[: 42.3: integer expression expected但我不知道如何解决这个问题

请提供任何建议 谢谢

您可以使用计算器bc

if [ $(echo "$VERSION_ID<=42.3" |bc -l) -eq "1" ]; then 
echo "Sorry Bye";
fi

版本号不是浮点值;它们是.分隔的整数序列。42.2742.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

最新更新