Shell-Script
如何在 shell 腳本中比較程序的版本?
假設我想比較
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"