Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
版本号的shell脚本条件_Shell_Conditional Statements - Fatal编程技术网

版本号的shell脚本条件

版本号的shell脚本条件,shell,conditional-statements,Shell,Conditional Statements,我对shell脚本非常陌生,我想检查软件版本号并设置条件 例如:检查python版本是否>2.7.0 然后 我可以使用以下方法检查python: if [ "$(python -V 2>&1)" ] then pyv="$(python -V 2>&1)" echo "$pyv" fi Python的输出不是立即有用的: $ python -V Python 2.7.9 输出包括一个单词、Python和一个版本号。此外,由于版本号有两个小数点,因

我对shell脚本非常陌生,我想检查软件版本号并设置条件

例如:检查python版本是否>2.7.0 然后

我可以使用以下方法检查python:

if [ "$(python -V 2>&1)" ]
then
    pyv="$(python -V 2>&1)"
    echo "$pyv"
fi

Python的输出不是立即有用的:

$ python -V
Python 2.7.9
输出包括一个单词、
Python
和一个版本号。此外,由于版本号有两个小数点,因此它不是有效的数字

方法1:使用bc 一种方法是将版本转换为有效的十进制数:

$ python -V 2>&1 | awk -F'[ .]' '{printf "%s.%s%02.f",$2,$3,$4}'
2.709
在这种形式下,版本2.7.10将变成2.710。这种方法适用于99的点版本。如果您认为python有可能发布pointversion100,那么我们希望稍微更改一下格式

我们现在可以使用
bc
比较数字:

$ echo "$(python -V 2>&1 | awk -F'[ .]' '{printf "%s.%s%02.f",$2,$3,$4}') > 2.7" | bc -l
1
$ echo "$(python -V 2>&1 | awk -F'[ .]' '{printf "%s.%s%02.f",$2,$3,$4}') > 2.710" | bc -l
0
要在
if
语句中使用该选项,请执行以下操作:

if echo "$(python -V 2>&1 | awk -F'[ .]' '{printf "%s.%s%02.f",$2,$3,$4}') > 2.7" | bc -l | grep -q 1
then
    echo version greater than 2.7
fi
如果测试成功,
bc-l
1
打印到标准输出。为了静默地测试
1
,我们使用
grep-q1

方法2:使用整数比较 我们使用awk将版本号转换为整数形式:

$ python -V 2>&1 | awk -F'[ .]' '{printf "%2.f%02.f%02.f",$2,$3,$4}'
 20709
现在,我们可以使用标准的shell工具来测试版本:

if [ "$(python -V 2>&1 | awk -F'[ .]' '{printf "%2.f%02.f%02.f",$2,$3,$4}')" -gt 20700 ]
then
   echo version greater than 2.7
fi
方法3:使用GNU
sort-V
GNU排序具有版本排序功能。为了使用它,我们创建了对版本排序有用的输入:

$ t="Python 2.7.0"
$ echo "$(python -V 2>&1)"$'\n'"$t" | sort -V -k2,2
Python 2.7.0
Python 2.7.9
现在,我们按升序排序:

$ echo "$(python -V 2>&1)"$'\n'"$t" | sort -V -k2,2
Python 2.7.0
Python 2.7.9
如果第一行是
$t
,则表示实际的python版本较新:

t="Python 2.7.0"
if echo "$(python -V 2>&1)"$'\n'"$t" | sort -V -k2,2 | head -n1 | grep -q "$t"
then
    echo "version greater than $t"
fi

由于GNU
sort-V
被设计为以本机方式处理版本号,因此这是我更喜欢的方法。

Python的输出不是立即有用的:

$ python -V
Python 2.7.9
输出包括一个单词、
Python
和一个版本号。此外,由于版本号有两个小数点,因此它不是有效的数字

方法1:使用bc 一种方法是将版本转换为有效的十进制数:

$ python -V 2>&1 | awk -F'[ .]' '{printf "%s.%s%02.f",$2,$3,$4}'
2.709
在这种形式下,版本2.7.10将变成2.710。这种方法适用于99的点版本。如果您认为python有可能发布pointversion100,那么我们希望稍微更改一下格式

我们现在可以使用
bc
比较数字:

$ echo "$(python -V 2>&1 | awk -F'[ .]' '{printf "%s.%s%02.f",$2,$3,$4}') > 2.7" | bc -l
1
$ echo "$(python -V 2>&1 | awk -F'[ .]' '{printf "%s.%s%02.f",$2,$3,$4}') > 2.710" | bc -l
0
要在
if
语句中使用该选项,请执行以下操作:

if echo "$(python -V 2>&1 | awk -F'[ .]' '{printf "%s.%s%02.f",$2,$3,$4}') > 2.7" | bc -l | grep -q 1
then
    echo version greater than 2.7
fi
如果测试成功,
bc-l
1
打印到标准输出。为了静默地测试
1
,我们使用
grep-q1

方法2:使用整数比较 我们使用awk将版本号转换为整数形式:

$ python -V 2>&1 | awk -F'[ .]' '{printf "%2.f%02.f%02.f",$2,$3,$4}'
 20709
现在,我们可以使用标准的shell工具来测试版本:

if [ "$(python -V 2>&1 | awk -F'[ .]' '{printf "%2.f%02.f%02.f",$2,$3,$4}')" -gt 20700 ]
then
   echo version greater than 2.7
fi
方法3:使用GNU
sort-V
GNU排序具有版本排序功能。为了使用它,我们创建了对版本排序有用的输入:

$ t="Python 2.7.0"
$ echo "$(python -V 2>&1)"$'\n'"$t" | sort -V -k2,2
Python 2.7.0
Python 2.7.9
现在,我们按升序排序:

$ echo "$(python -V 2>&1)"$'\n'"$t" | sort -V -k2,2
Python 2.7.0
Python 2.7.9
如果第一行是
$t
,则表示实际的python版本较新:

t="Python 2.7.0"
if echo "$(python -V 2>&1)"$'\n'"$t" | sort -V -k2,2 | head -n1 | grep -q "$t"
then
    echo "version greater than $t"
fi
由于GNU
sort-V
被设计为以本机方式处理版本号,因此这是我更喜欢的方法