在bash脚本条件语句中仅匹配一些整数

时间:2012-02-08 02:46:17

标签: bash

这真的很简陋,但我已经厌倦了搜索谷歌,我根本不知道我在寻找什么。

我正在尝试构建一个bash脚本,该脚本使用sw_vers从iOS中提取版本号,然后运行条件语句。但问题是某些版本只有两个整数而其他三个版本。这是我目前的剧本:

#!/bin/bash

IOS="`/usr/bin/sw_vers -productVersion`"
    if (("$IOS" >= "5.0")); then
echo "All's good..."
    else
echo "Fail..."
fi

使用上面的脚本,它可以很好地提取版本,但返回syntax error: invalid arithmetic operator (error token is ".0.1 >= 5"),因为我的特定iOS版本是5.0.1。

我不关心完美匹配,只是前两个整数很好(所以5.0,4.2,4.3等)。

我确信有很多方法可以解决这个问题,我并不是在寻找任何有趣的东西。如果我可以获得通配符或脚本甚至忽略前两个数字之外的任何内容,我就是金色的。

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

一个常见的技术是:


IFS=. read maj min patch<< EOF
$IOS
EOF

if test $maj -ge 5 && test $min -ge 0; then
    echo ok
fi

这会将$ IOS分解为3个组件,$ maj,$ min和$ patch。如果IOS只有两个组件,那么$ patch将是空字符串。请注意,如果maj或min不是整数(例如“5a”),则会发出警告并且测试将失败。此外,我添加了$ min -ge 0的测试仅用于演示,但可以省略(除非你可能得到负版本号!)。

答案 1 :(得分:0)

这样的东西
IOS=`/usr/bin/sw_vers -productVersion | awk -F '.' '{ORS=""; print $1; print "."; print $2;}'`

IOS=`/usr/bin/sw_vers -productVersion | cut -d . -f 1,2`