linux shell 实现自增版本号

  • Post author:
  • Post category:linux


#!/usr/bin/env bash

# 递增版本号
increment_version ()
{
  declare -a part=( ${1//\./ } )
  declare    new
  declare -i carry=1 #递增量
 
  for (( CNTR=${#part[@]}-1; CNTR>=0; CNTR-=1 )); do
    len=${#part[CNTR]}
    new=$((part[CNTR]+carry))
    [ ${#new} -gt $len ] && carry=1 || carry=0
    [ $CNTR -gt 0 ] && part[CNTR]=${new: -len} || part[CNTR]=${new}
  done
  new="${part[*]}"
  echo -e "${new// /.}"
}

#递减版本号
decrement_version ()
{
  declare -a part=( ${1//\./ } )
  declare    new
  declare -i carry=3 #递减量
 
  for (( CNTR=${#part[@]}-1; CNTR>=0; CNTR-=1 )); do
    len=${#part[CNTR]}
    new=$((part[CNTR]-carry))
    [ ${#new} -gt $len ] && carry=1 || carry=0
    [ $CNTR -gt 0 ] && part[CNTR]=${new: -len} || part[CNTR]=${new}
  done
  new="${part[*]}"
  echo -e "${new// /.}"
}


version='1.0.9'



decrement_version $version

输出结果:

1.1.0

如果只增加最后一位的话如下:

increment_version ()
{
  declare -a part=( ${1//\./ } )
  declare    new
  declare -i carry=1
  CNTR=${#part[@]}-1
  len=${#part[CNTR]}
  new=$((part[CNTR]+carry))
  part[CNTR]=${new}
  new="${part[*]}"
  echo -e "${new// /.}"
} 
version='1.2.3.9'
 
increment_version $version

输出结果:

1.2.3.10



版权声明:本文为weixin_36292503原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。