SKY*_*ine 1 shell conditional-statements
我对 shell 脚本真的很陌生,我想检查软件版本号并为其设置条件。
\n\n例如:检查 python 版本\xc2\xa0> 2.7.0\n然后\n...
\n\n我可以使用以下命令检查 python:
\n\nif [ "$(python -V 2>&1)" ]\nthen\n pyv="$(python -V 2>&1)"\n echo "$pyv"\nfi\nRun Code Online (Sandbox Code Playgroud)\n
Python 的输出并不是立即有用:
$ python -V
Python 2.7.9
Run Code Online (Sandbox Code Playgroud)
输出包括单词Python和版本号。此外,由于版本号有两位小数,因此它不是有效数字。
一种方法是将版本转换为有效的十进制数:
$ python -V 2>&1 | awk -F'[ .]' '{printf "%s.%s%02.f",$2,$3,$4}'
2.709
Run Code Online (Sandbox Code Playgroud)
在这种形式下,版本 2.7.10 将变为 2.710。这种方法适用于 99 的点版本。如果您认为 python 有可能发布点版本 100,那么我们需要稍微更改格式。
我们现在可以使用以下方法比较数字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
Run Code Online (Sandbox Code Playgroud)
要在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
Run Code Online (Sandbox Code Playgroud)
如果测试成功,bc -l则打印出1标准输出。为了默默地测试 是否存在1,我们使用grep -q 1.
我们使用 awk 将版本号转换为整数形式:
$ python -V 2>&1 | awk -F'[ .]' '{printf "%2.f%02.f%02.f",$2,$3,$4}'
20709
Run Code Online (Sandbox Code Playgroud)
现在,我们可以使用标准 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
Run Code Online (Sandbox Code Playgroud)
sort -VGNU sort 有版本排序功能。为了使用它,我们创建对版本排序有用的输入:
$ t="Python 2.7.0"
$ echo "$(python -V 2>&1)"$'\n'"$t" | sort -V -k2,2
Python 2.7.0
Python 2.7.9
Run Code Online (Sandbox Code Playgroud)
现在,我们按升序排序:
$ echo "$(python -V 2>&1)"$'\n'"$t" | sort -V -k2,2
Python 2.7.0
Python 2.7.9
Run Code Online (Sandbox Code Playgroud)
如果第一行是$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
Run Code Online (Sandbox Code Playgroud)
由于 GNUsort -V被设计为本地处理版本号,这是我更喜欢的方法。
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |