我有这个脚本,应该确保用户当前的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
发布于 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
发布于 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,然后全部相加,得到一个可比较的标量。
发布于 2015-06-20 11:38:20
下面的解决方案应该更准确地满足您的确切需求。可以用来测试CURRENT
版本字符串是否在MIN
和MAX
之间。我假设MIN
和MAX
是可接受的版本号(即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
https://stackoverflow.com/questions/16989598
复制相似问题