由于某些原因,当我尝试将MINOR增大为1时,HOTFIX已经设置为1时,它会减小为0,而MINOR增大为1。有人可以让我知道为什么会这样。而且,这在jenkins中作为执行shell脚本执行。该模式为MAJOR,MINOR和HOTFIX,因此当我要在jenkins中使用参数进行构建时,可以选择其中一种模式。
PREFIX="TIQPROD_"
MAJOR=$(awk -F '=' '$1 == "MAJOR" {print $2}' /tmp/release/release.txt)
MINOR=$(awk -F '=' '$1 == "MINOR" {print $2}' /tmp/release/release.txt)
HOTFIX=$(awk -F '=' '$1 == "HOTFIX" {print $2}' /tmp/release/release.txt)
M="$MODE"
echo "echo $M $PREFIX_$MAJOR.$MINOR.$HOTFIX"
# Increment variable value in text file
if [ $M == "MAJOR" ]
then
MAJOR=$((MAJOR + 1))
elif [ $M == "MINOR" ]
then
MINOR=$((MINOR + 1))
else
HOTFIX=$((HOTFIX + 1))
fi
# Copy and rename text file with variable values
cp /tmp/release/release.txt /tmp/release/front_$(date +%d-%m-%Y).txt
# Condition on whether the mode is MAJOR, MINOR, HOTFIX increment variable value in text file with new value
if [ $M == "MAJOR" ]
then
sed -i "s/^MAJOR=.*/MAJOR=${MAJOR}/" /tmp/release/front_$(date +%d-%m-%Y).txt
elif [ $M == "MINOR" ]
then
sed -i "s/^MINOR=.*/MINOR=${MINOR}/" /tmp/release/front_$(date +%d-%m-%Y).txt
else
sed -i "s/^HOTFIX=.*/HOTFIX=${HOTFIX}/" /tmp/release/front_$(date +%d-%m-%Y).txt
fi
答案 0 :(得分:0)
首先让我们修复您的脚本。尝试用以下命令替换整个脚本:
PREFIX="TIQPROD_"
awk -v mode="$MODE" 'BEGIN{FS=OFS="="} $1==mode{$2++} 1' /tmp/release/release.txt > "/tmp/release/front_$(date +%d-%m-%Y).txt"
然后告诉我们您是否还有问题。即使您不使用它,我也保留了PREFIX;即使您的shell变量可能不只是为了方便比较两个脚本,我也将它们保留为大写。
基于your comment below,听起来您正在执行此操作(即针对同一原始文件重复运行命令):
$ cat foo
17
$ awk '{$0++}1' foo > bar
$ cat bar
18
$ awk '{$0++}1' foo > bar
$ cat bar
18
$ cat foo
17
而不是像这样的东西来实际更新原始文件:
$ cat foo
17
$ awk '{$0++}1' foo > bar && cp bar foo
$ cat bar
18
$ awk '{$0++}1' foo > bar && cp bar foo
$ cat bar
19
$ cat foo
19
所以并不是减少任何值,而是在您的工具运行后就永远不会在输入文件中将它们设置为新值。
要创建新的输出文件并将其内容复制回原始文件中,只需执行以下操作:
old='/tmp/release/release.txt'
new="/tmp/release/front_$(date +%d-%m-%Y).txt"
awk -v mode="$MODE" 'BEGIN{FS=OFS="="} $1==mode{$2++} 1' "$old" > "$new" && cp "$new" "$old"
要保留原始的“ release.txt”,您可以执行以下操作:
orig='/tmp/release/release.txt'
curr='/tmp/release/current.txt'
front="/tmp/release/front_$(date +%d-%m-%Y).txt"
[ -s "$curr" ] || cp "$orig" "$curr"
awk -v mode="$MODE" 'BEGIN{FS=OFS="="} $1==mode{$2++} 1' "$curr" > "$front" && cp "$front" "$curr"