shell 使用bash进行增量

zbdgwd5y  于 2023-05-01  发布在  Shell
关注(0)|答案(5)|浏览(111)

我被困在试图增加一个变量在。标签可能在一个文件中出现100次,也可能只出现两次。我正在尝试添加一个值,该值将使数量增加几倍。我已经包含了一些我正在处理的示例代码,但是当我运行脚本时,它只会放置一个1,而不会进一步增加。如果你能告诉我哪里做错了就好了。

for xmlfile in $(find $DIRECTORY -type f -name \*.xml); do
  TFILE="/tmp/$directoryname.$$"
  FROM='><process>'
  TO=' value\=""><process>'
  i=0
  while [ $i -lt 10 ]; do
    i=`expr $i + 1`
    FROM='value\=""'
    TO='value\="'$i'"'
  done
  sed "s/$FROM/$TO/g" "$xmlfile" > $TFILE && mv $TFILE "$xmlfile"
done

while循环是我用来测试代码的。它将插入<process>,但不会插入增量。
我的最终目标:

<process>value="1"</process>
<process>value="2"</process>
<process>value="3"</process>
<process>value="4"</process>

依此类推,只要<process>存在于需要递增的文件中。

5m1hhzi4

5m1hhzi41#

我刚刚测试了你的代码,它似乎正确地增加了i
您可以尝试更改增量语法,从:

i=`expr $i + 1`

i=$((i+1))
xxe27gdn

xxe27gdn2#

要在bash中正确地增加增量,请使用for循环(C风格):

n=10
for ((i=1; i<=n; i++)) {
    printf '<process>value="%d"</process>\n' $i
}

输出

<process>value="1"</process>
<process>value="2"</process>
<process>value="3"</process>
<process>value="4"</process>
<process>value="5"</process>
<process>value="6"</process>
<process>value="7"</process>
<process>value="8"</process>
<process>value="9"</process>
<process>value="10"</process>

备注

expr是一个在古老的shell代码中用来做数学运算的程序。在像bash这样的Posix shell中,使用$((expression))。在bash和ksh 93中,如果不需要在扩展中使用结果,也可以使用(( expression ))let expression

编辑

如果我误解了你的需求,你有一个像这样的空值文件:

<process>value=""</process>

试试这个:

$ perl -i -pe '$c++; s/<process>value=""/<process>value"$c"/g' file.xml
<process>value"1"</process>
<process>value"2"</process>
<process>value"3"</process>
<process>value"4"</process>
<process>value"5"</process>
<process>value"6"</process>
<process>value"7"</process>

-i开关编辑文件的真实的,所以要小心.

4xy9mtcn

4xy9mtcn3#

这是在bash中递增变量的最简单方法:

i=0
((++i))
pftdvrlh

pftdvrlh4#

这也行得通。
将变量声明为整数。

declare -i i=0

然后,你可以像这样增加:

i+=1
30byixjq

30byixjq5#

使用awk

awk '{gsub( "value=\"\"", "value=" i++ ); print }' i=1 input-file

这将用value="1"value="2"等替换字符串value=""。您可以轻松地更改起始值和增量(例如..."value=" i ); i+=5; print

相关问题