比较 shell 脚本中的两个版本号

all*_*hie 3 bash shell awk grep sed

我有一个file1如下所示的文件,其中包含当前版本号和预期版本号:

CurrV:1.5.2
ExpecV:1.8.1
Run Code Online (Sandbox Code Playgroud)

我想编写一个 bash 脚本来比较这两个值,如果ExpecV>=CurrV那么我应该echo SUCCESS,否则我应该echo FAILURE

到目前为止我已经写了这个东西,但不知道如何继续:

#!/bin/bash
 ## Code already written to fetch `ExpecV` and `CurrV` from `file1`
 echo $ExpecV | grep $CurrV > /dev/null
 if [ $? -eq 0 ]
    then
        echo SUCCESS
    else
        echo FAILURE
 fi
Run Code Online (Sandbox Code Playgroud)

Wal*_*r A 5

你可以试试

if [ $(echo "${CurrV}\n${ExpecV}"|sort|head -1) != "${CurrV}" ]; then ...
Run Code Online (Sandbox Code Playgroud)

  • 使用 `|sort -V|` 而不是 `|sort|` 来按自然版本号语义进行真正的排序。在我的例子中,“echo”需要是“echo -e”,以便它将 \n 扩展为换行符。 (5认同)