BASH将Linux版本与数字进行比较? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BASH将Linux版本与数字进行比较? [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

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

我在$VERSION_ID上安装了当前版本的操作系统

我现在正试图找出如何将其与'42 .3'进行比较。因此,如果该值不大于或等于退出。

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

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

有任何建议,谢谢

答案

版本号不是浮点值;它们是.分隔的整数序列。 42.2742.3更新,42.2.9可能是有效的版本号。

将版本号拆分为整数组件,并将它们“lexiconumerically”进行比较:

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
另一答案

你可以使用计算器bc

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

以上是关于BASH将Linux版本与数字进行比较? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

将变量与字符串 bash 进行比较

如何比较 Bash 中的数字?

linux进程管理与SELinux

在Bash中用数字对字符串进行排序[重复]

如何将字符串与 Bash 中的多个正确值进行比较?

我猜将字符串与整数进行比较的问题