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

时间:2018-08-31 13:11:07

标签: bash compare

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

我已经在$VERSION_ID中获得了已安装操作系统的最新版本

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

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

我得到: [: 42.3: integer expression expected但我不知道该如何解决

任何建议请 谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用计算器bc

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

答案 1 :(得分:0)

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