Dᴀʀ*_*ᴅᴇʀ 20 bash shell increment
我试图增加.xml文件中的变量.标签可以在文件中100次或仅两次.我试图添加一个值,将增加数倍的数量.我已经包含了一些我正在处理的示例代码,但是当我运行脚本时,它只会放置一个而不会进一步增加.对于我做错的建议会很好.
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
Run Code Online (Sandbox Code Playgroud)
该while回路是我刚才放置测试代码.它会插入<process>但不会插入增量.
我的最终目标:
<process>value="1"</process>
<process>value="2"</process>
<process>value="3"</process>
<process>value="4"</process>
Run Code Online (Sandbox Code Playgroud)
只要<process>文件中存在它就需要递增.
sam*_*hen 32
我刚刚测试了你的代码,它似乎正确递增i.
您可以尝试更改增量语法:
i=`expr $i + 1`
Run Code Online (Sandbox Code Playgroud)
至
i=$((i+1))
Run Code Online (Sandbox Code Playgroud)
Gil*_*not 20
要获得适当的增量bash,请使用for循环(C样式):
n=10
for ((i=1; i<=n; i++)) {
printf '<process>value="%d"</process>\n' $i
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT
<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>
Run Code Online (Sandbox Code Playgroud)
注意
expr是古代shell代码中用来做数学的程序.在像bash这样的Posix shell中,使用$((expression)).在bash和ksh93中,您也可以使用(( expression ))或者let expression如果您不需要在扩展中使用结果.
编辑
如果我误解了你的需求,你有一个空白值的文件,如下所示:
<process>value=""</process>
Run Code Online (Sandbox Code Playgroud)
试试这个 :
$ 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>
Run Code Online (Sandbox Code Playgroud)
-i 切换编辑文件为真实,所以要小心.
Cor*_*ein 11
这是在bash中增加变量的最简单方法:
i=0
((i++))
Run Code Online (Sandbox Code Playgroud)