Shell(Bash)-验证构建工具和执行版本

我想编写一个shell / bash脚本,该脚本可以验证我所有的构建工具都符合某些版本要求并返回通过/失败。

示例:

我使用cmake,make和gcc。

 <Tasklist deletetask={handleDeletetask} tasks={tasks} data-testid="tasks"/>

在第一种情况下,我想通过/失败,是否系统与这些版本号完全匹配;在第二种情况下,我想通过/失败,无论系统是否提供最小的那些版本号或更新的版本(=更大,相对于1.2.2比1.1.3更新。)

所以我要实现的是:

  • 第1步:确定3个数字,点分隔版本号(也允许使用123.22.1这样的结构)
  • 第2步:将此字符串分成3个部分,主要,次要和错误修正。

此外,我还可以将这些字符串值与期望值进行比较,并返回结果。

是否有使用awk或类似工具的简单解决方案?

baanwcw 回答:Shell(Bash)-验证构建工具和执行版本

这是做到这一点的一种方法,它尝试使用shell函数以bash(版本> 4.2)为主要实现对象。

这不会返回最终状态代码,只是将报告输出到stdout。

#!/usr/bin/env bash


# Compare V1 to V2 return 2 if V2 is higher than V1
function compare_version_strings()
{
    local v1=( $(echo "$1" | tr '.' ' ') )
    local v2=( $(echo "$2" | tr '.' ' ') )
    local len=${#v1[*]}
    if [ "${#v2[*]}" -gt "$len" ] ;
    then
        len="${#v2[*]}" ;
    fi

    for ((i=0; i<len; i++))
    do
        [ "${v1[i]:-0}" -gt "${v2[i]:-0}" ] && return 1  # v1 higher
        [ "${v1[i]:-0}" -lt "${v2[i]:-0}" ] && return 2  # v2 higher
    done
    return 0 # same version
}

# Wrapper around compare_version_strings
function check_tool_version()
{
    local tool="$1" && shift
    local vmin="$1" && shift
    local vact="$1" && shift

    compare_version_strings "$vact" "$vmin"
    local result="$?"
    echo -n checking for $tool $vmin

    if [ "$result" -eq 2 ]; then
        echo " [FAIL] -- found $vact"
    else
        echo " [PASS] -- found $vact"
    fi
}


check_tool_version   cmake   3.11.2   $(cmake  --version | head -1 | awk '{print $3}')
check_tool_version   gcc     4.8      $(gcc --version | head -1 | awk '{print $3}')
check_tool_version   make    9.1      $(make --version | head -1 | awk '{print $3}')

...以及示例输出...

checking for cmake 3.11.2 [PASS] -- found 3.12.1
checking for gcc 4.8 [PASS] -- found 4.8.5
checking for make 9.1 [FAIL] -- found 3.82
本文链接:https://www.f2er.com/3143345.html

大家都在问