我有一个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.000
和1.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
答案 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)
,因为版本号将要增加。
但是,谢谢您的评论。