首页 > 系统相关 >shell 版本号比较_用shell如何比较软件版本号的大小

shell 版本号比较_用shell如何比较软件版本号的大小

时间:2023-05-04 14:01:54浏览次数:43  
标签:sort VERSION shell 版本号 echo version 比较

摘自:https://blog.51cto.com/u_13753753/5554564

 

比如你想写个脚本来比较两个版本号 (如"1.2.30" 和"1.3.0")来辨认哪个版本是最新的,有可以比较两个版本号字符串的shell脚本吗?

当你写了一个shell脚本,想使用脚本来比较两个版本号,然后能区分哪个版本号更高哪个版本号更低。比如,你安装某个软件的时候,要求是版本号要大于1.3.0,想验证最低配置要求.又或者你想在shell脚本中写版本号判断(比如版本号如果介入1.0.0 ≤ 版本 ≤ 2.3.1).

如果你想通过shell来比较两个版本号字符串的话最简单的就是使用sort命令。加上参数"-V"后sort命令就可以把文本中的版本号给排序出来(默认是递增的排序),然后你想倒叙排序的话那就使用参数"-rV"即可.

 

下面我们就来看下在shell中怎么使用sort命令来比较版本号吧

对于要比较版本号字符串的话,下面的这些使用了sort命令的自定义函数可能会派上用场.

function version_gt() { test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"; }
function version_le() { test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" == "$1"; }
function version_lt() { test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" != "$1"; }
function version_ge() { test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" == "$1"; }

 


上面的脚本主要是比较两个不同版本的文本,会得出大于、等于、小于、大于等于等结果。你可以根据自己的需要使用自定义函数。

下面是一个比较的示例.

#!/bin/bash

VERSION=$1
VERSION2=$2

function version_gt() { test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"; }
function version_le() { test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" == "$1"; }
function version_lt() { test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" != "$1"; }
function version_ge() { test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" == "$1"; }

if version_gt $VERSION $VERSION2; then
echo "$VERSION is greater than $VERSION2"
fi

if version_le $VERSION $VERSION2; then
echo "$VERSION is less than or equal to $VERSION2"
fi

if version_lt $VERSION $VERSION2; then
echo "$VERSION is less than $VERSION2"
fi

if version_ge $VERSION $VERSION2; then
echo "$VERSION is greater than or equal to $VERSION2"
fi

 

标签:sort,VERSION,shell,版本号,echo,version,比较
From: https://www.cnblogs.com/LiuYanYGZ/p/17371020.html

相关文章

  • Shell简单介绍
    是什么Shell是计算机操作系统中的一种命令行解释器,它是一个用户与操作系统内核之间的接口.Unix/Linux中,Shell是一种脚本语言;Windows中通常指命令行解释器(cmd.exePowerShell).Q:系统命令和shell语言指令有交集吗A:有交集。在Linux系统中,很多常用的命令都可以在Shell中使......
  • Runnable和Thread比较
    (一)Thread类实现了Runnable接口吗?在线程使用过程中,我们肯定会用到Runnable与Thread,前者的实现方式是实现其接口即可,后者的实现方式是继承其类。两者实现方式带来最明显的区别就是,由于Java不允许多继承,因此实现了Runnable接口可以再继承其他类,但是Thread明显不可以。我们看看源码......
  • Linux shell command make All In One
    LinuxshellcommandmakeAllInOneGNUMake$make-vGNUMake4.3为aarch64-unknown-linux-gnu编译Copyright(C)1988-2020FreeSoftwareFoundation,Inc.许可证:GPLv3+:GNU通用公共许可证第3版或更新版本<http://gnu.org/licenses/gpl.html>。本软件是自由软件......
  • poweshell监控文件夹变化
    #Definethefolderpathtomonitor$folder='C:\Downloads'#Definethefilterforthetypeoffilestomonitor$filter='*.*'#Definetheoptionsforthefilesystemwatcher$watcher=New-ObjectSystem.IO.FileSystemWatcher$wa......
  • Linux shell script shebang env All In One
    LinuxshellscriptshebangenvAllInOne指定shellscript的运行环境shellscriptshebangenvhashbangenv#!\usr\bin\envbash❌#!\usr\bin\envbash#❌#!/usr/bin/env✅#!/usr/bin/envbash✅demos#!/usr/bin/envbash#✅exportN=1#case1......
  • 关于跨世界观比较战力的一些想法
    1.表现关于一个人物在同个状态下全力做出的若干个表现,正确的做法是取上限/去掉极端上限取普通表现。(比如一个人物设定上有爆星级,)这也是论战圈常用的做法。因为这样子可以公平地比较战力。不能取下限,因为(当然对于唐三除外)......
  • Linux shell script switch...case All In One
    Linuxshellscriptswitch...caseAllInOnecase...in...esaccase...esac为多选择语句,与其他语言中的switch...case语句类似,是一种多分支选择结构;每个case分支用右圆括号开始,用两个分号;;表示break,即执行结束,跳出整个case...esac语句,esac(就是case反过......
  • 比较算法(1)
    1、介绍需求:有时候需要比较两个文本,看有什么异同。在渗透过程中分析响应变化很实用,可以快速定位不同区域,比如在xss分析过程,或者定位一次性token另一个场景,是对文件与文件的字节进行比较,用于学习文件结构,以及分析图片木马、加壳、后缀名修改等操作的影响比较算法,将两个文本分......
  • PowerShell-自定义的配置文件
    PowerShell5.1一般Windows10自带的是这个版本的PowerShell,这个版本的自定义配置文件的文件编码要保存为ANSI才行。PowerShell7这个是通过github另外下载的,这个版本的自定义配置文件的文件编码要保存为utf-8才行。 配置文件代码其实也没啥,主要加了一个时间显示和我可能用......
  • 查看python版本号,库的位置
    whichpython->/home/xx/anaconda3/bin/pythonpip版本号python3–mpip–-version->pip21.2.4from/home/xx/anaconda3/lib/python3.9/site-packages/pip(python3.9)查看包安装的位置:先import这个包,再运行包名字.file,一般第三方包安装在\Lib\site-packages下impo......