Bash:增加Java属性文件中的版本号(代号一个版本)

时间:2019-05-25 13:26:12

标签: bash codenameone

我有一个Netbeans项目(这是一个Codename One项目),该项目执行一个build.xml蚂蚁构建脚本。我修改了build.xml以对某些目标执行外部bash脚本,例如:

<target name="build-for-ios-device" depends="clean,copy-ios-override,copy-libs,jar,clean-override">
        <exec executable="/home/francesco/Projects/SimpleFronted/increaseVersion.sh">
        </exec>

该脚本的目的是更新属性:

codename1.version=1.102

在属性文件codenameone_settings.properties中。 您可能会猜到,这样,每次执行新构建时,我都会自动更新项目的版本号。

问题是我的Bash脚本在所有情况下均无法正常工作。例如,如果版本号在1.0001.099之间,则不起作用,但是如果版本号为1.100,则它起作用。

我不明白我的脚本有什么问题。你能帮我解决吗?理想情况下,它应该适用于从0.001到任何更高版本的每个版本号。我总是要三点之后。谢谢。

#!/bin/bash
echo "Increase version..."
cd /home/francesco/Projects/SimpleFronted/

file="./codenameone_settings.properties"

if [ -f "$file" ]
then
  echo "$file found."

  while IFS='=' read -r key value
  do
    key=$(echo $key | tr '.' '_')
    eval ${key}=\${value}
  done < "$file"

  echo "OLD codename1.version="${codename1_version}
  codename1_version=$(echo "scale=3;(${codename1_version}*1000+1)/1000;" | bc | awk '{printf "%d.%03d", ($0 * 1000 / 1000), ($0 * 1000 % 1000)}')
  echo "NEW codename1.version="${codename1_version}
  sed -i "s/codename1.version=[^ ]*/codename1.version=$codename1_version/g" codenameone_settings.properties

else
  echo "$file not found."
fi

我在Linux Mint 19上使用Bash 4.4.19(1)-release

1 个答案:

答案 0 :(得分:1)

此行:

codename1_version=$(echo "scale=3;(${codename1_version}*1000+1)/1000;" | bc | awk '{printf "%d.%03d", ($0 * 1000 / 1000), ($0 * 1000 % 1000)}')

从1.001到1.099的数字失败。 bc的输出是正确的,因此似乎是awk的问题。我不确定这是我的代码问题还是awk的错误,但是一个简单的解决方案是完全避免使用awk,在这种情况下,该目的是添加前导零对于小于1的数字,可以用其他更简单的方法完成:

codename1_version=$(echo "scale=3; if(${codename1_version} < 0.999) print 0; (${codename1_version}*1000+1)/1000;" | bc)

请注意,我写了${codename1_version} < 0.999)而不是${codename1_version} < 1),因为版本号将要增加。

但是,谢谢您的评论。