如何在 shell 脚本中检查 OpenSSL 版本是否为 -ge 1.1.1?

如何在 shell 脚本中检查 OpenSSL 版本是否为 -ge 1.1.1?

我的脚本需要 OpenSSL 1.1.1 或更高版本才能运行。

当然,第一步是获取该系统上是否安装了 OpenSSL,如果是,则获取默认 OpenSSL 安装的版本,如下所示:

command -v openssl
openssl version | awk '{print $2}'

老实说,我还不知道如何检查版本本身,如果——且仅当——这个想法在你之前出现在我面前,我才会发布我自己的答案。

请遵守 POSIX 的答案,远离 Bashisms。谢谢。

答案1

AWK 是 POSIX 的一部分,所以这应该没问题:

openssl version | awk '$2 ~ /(^0\.)|(^1\.(0\.|1\.0))/ { exit 1 }'

它不会查找大于或等于 1.1.1 的版本,而是查找小于 1.1.1 的版本:以“0.”、“1.0”或“1.1.0”开头的版本。

答案2

有点麻烦,但有效:

export openssl_minversion=1.1.1
if echo -e "$(openssl version|awk '{print $2}')\n${openssl_minversion}" | sort -V | head -1 | grep -q ^${openssl_minversion}$;then
  echo okay
else
  echo nokay
fi

相关内容