Shell-Script

如何在 shell 腳本中比較程序的版本?

  • March 28, 2021

假設我想比較gcc版本以查看系統是否安裝了最低版本。

為了檢查gcc版本,我執行了以下

gcc --version | head -n1 | cut -d" " -f4

輸出是

4.8.5

所以,我寫了一個簡單的if語句來檢查這個版本與其他一些值

if [ "$(gcc --version | head -n1 | cut -d" " -f4)" -lt 5.0.0 ]; then
   echo "Less than 5.0.0"
else
   echo "Greater than 5.0.0"
fi

但它會拋出一個錯誤:

[: integer expression expected: 4.8.5

我理解我的錯誤是我使用字元串進行比較並且-lt需要整數。那麼,還有其他方法可以比較版本嗎?

我不知道它是否漂亮,但它適用於我知道的每種版本格式。

#!/bin/bash
currentver="$(gcc -dumpversion)"
requiredver="5.0.0"
if [ "$(printf '%s\n' "$requiredver" "$currentver" | sort -V | head -n1)" = "$requiredver" ]; then 
       echo "Greater than or equal to ${requiredver}"
else
       echo "Less than ${requiredver}"
fi

(**注意:**使用者“萬用字元”的更好版本:https ://unix.stackexchange.com/users/135943/wildcard ,刪除了附加條件)

較短的版本:

version_greater_equal()
{
   printf '%s\n%s\n' "$2" "$1" | sort --check=quiet --version-sort
}

version_greater_equal "${gcc_version}" 8.2 || die "need 8.2 or above"

引用自:https://unix.stackexchange.com/questions/285924