首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Bash比较PHP版本号?

使用Bash比较PHP版本号?
EN

Stack Overflow用户
提问于 2013-06-08 01:15:42
回答 7查看 28.5K关注 0票数 38

我有这个脚本,应该确保用户当前的PHP版本在某个范围内,虽然它应该可以工作,但有一个bug,使它认为版本是超出范围的,谁可以看一下,并告诉我,我可以做什么来修复它?

function version { echo "$@" | gawk -F. '{ printf("%d.%d.%d\n", $1,$2,$3); }'; }

phpver=`php -v |grep -Eow '^PHP [^ ]+' |gawk '{ print $2 }'`

if [ $(version $phpver) > $(version 5.2.13) ] || [ $(version $phpver) < $(version 5.2.13) ]; then
  echo "PHP Version $phpver must be between 5.2.13 - 5.3.15"
  exit
fi
EN

回答 7

Stack Overflow用户

发布于 2017-09-19 20:03:46

deb分布是有可能的:

dpkg --compare-versions <version> <relation> <version>

例如:

dpkg --compare-versions "0.0.4" "gt" "0.0.3"
if [ $? -eq "0" ]; then echo "YES"; else echo "NO"; fi
票数 17
EN

Stack Overflow用户

发布于 2013-06-08 01:19:25

它正在做一个词法比较。使用以下选项之一:

if [ $(version $phpver) -gt $(version 5.2.13) ] || [ $(version $phpver) -lt $(version 5.2.13) ]; then
if [[ $(version $phpver) > $(version 5.2.13) ]] || [[ $(version $phpver) < $(version 5.2.13) ]]; then
if (( $(version $phpver) > $(version 5.2.13) )) || (( $(version $phpver) < $(version 5.2.13) )); then

或者在awk或其他工具中完成所有操作。它正在尖叫着需要一些优化。似乎你也没有生成数字,所以你有一个非常奇怪的设计。通常,version子字符串乘以1000,然后全部相加,得到一个可比较的标量。

票数 4
EN

Stack Overflow用户

发布于 2015-06-20 11:38:20

下面的解决方案应该更准确地满足您的确切需求。可以用来测试CURRENT版本字符串是否在MINMAX之间。我假设MINMAX是可接受的版本号(即MIN <= CURRENT <= MAX而不是MIN < CURRENT < MAX)。

# Usage: version MIN CURRENT MAX
version(){
    local h t v

    [[ $2 = "$1" || $2 = "$3" ]] && return 0

    v=$(printf '%s\n' "$@" | sort -V)
    h=$(head -n1 <<<"$v")
    t=$(tail -n1 <<<"$v")

    [[ $2 != "$h" && $2 != "$t" ]]
}

例如..。

if ! version 5.2.13 "$phpver" 5.3.15; then
    echo "PHP Version $phpver must be between 5.2.13 - 5.3.15"
    exit
fi
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16989598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档