当增加变量的另一个值时,文件中的变量值减少

时间:2020-03-02 15:35:54

标签: awk sed

由于某些原因,当我尝试将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

1 个答案:

答案 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"