我是新手来编写脚本,但尚未找到以下问题的答案。我希望有人可以告诉我或者给我一些如何做的提示。
背景:我有一个程序(说"程序")接受一个ini文件(比如" input.ini")作为输入需要一段时间才能执行。程序的ini文件中的变量可能是" number"例如,可能设置为number = 1。
问题:我必须经常调用./program input.ini,但是" number"的值不同,比如说1,2,3,4,5。 我想,我可以编写一个bash脚本,在for循环设置中执行该程序" number"因此。循环不是问题,而是设置" number"在ini文件中。 (我在ini文件中尝试了例如number = $ VALUE,并在脚本中设置了VALUE,但这不起作用。)
问题:如何使用bash脚本在ini文件中设置变量? (这不一定是永久性的,但仅适用于该程序的运行。)
附加问题:在ini文件中设置变量是一回事。另外,做以下事情也很棒(我认为可能类似......):程序产生一些输出文件。这些文件的名称也可以在ini文件中设置,例如通过" output_name = filename.out"。如果有类似" output_name = filename_ $ VALUE.out"那么现在会很棒。相应地设置输出名称。
我希望很清楚我尝试做什么,如果有人有解决方案或提示如何做,我会非常感激。
谢谢, 卡里
答案 0 :(得分:3)
如果您的文件包含number=something
,则可以使用sed "/^number=/s/=.*/=5/
将“内容”替换为“5”。
这是你可以用过程替代做一次的事情:
./program <(sed "/^number=/s/=.*/=5/" baseinput.ini)
或者您可以根据旧文件创建新的ini文件,如
sed "/^number=/s/=.*/=5/" baseinput.ini > input.ini
./program input.ini
您还可以在脚本中定义整个ini文件,并在here文档中替换:
N=5
./program - << EOF
[Section]
number=$N
foo=bar
EOF
答案 1 :(得分:1)
完整解析并设置ini文件(section,key,value)并保存在root上。
sudo_setini ()
{
fkey=false
fsec=false
tsec=false
res=""
if [ -f "$1" ]; then
while IFS= read -r LINE
do
TLINE=`echo $LINE`
if [[ $TLINE == \[*] ]]; then
TLINE=`echo ${TLINE:1:${#TLINE}-2}`
if [[ _${TLINE} == _$2 ]]; then
tsec=true
fsec=true
else
if $tsec && ! $fkey ; then
res+=$'\n'$3=$4
fi
tsec=false
fi
res+=$'\n'${LINE}
else
TLINE=`echo ${TLINE%%=*}`
if $tsec && [[ _${TLINE} == _$3 ]]; then
fkey=true
res+=$'\n'${LINE%%=*}=$4
else
res+=$'\n'${LINE}
fi
fi
done < $1
fi
if $tsec && ! $fkey ; then
res+=$'\n'$3=$4
fi
if ! $fsec ; then
res+=$'\n'[$2]
res+=$'\n'$3=$4
fi
echo "$res" | sudo tee "$1" > /dev/null
}
sudo_setini 'test.ini' 'General' 'Type' 'Digital_'
答案 2 :(得分:0)
不确定这是否有帮助: 这会调用程序脚本五次:
for n in 1 2 3 4 5
do
./program $n input.ini
done
然后在程序中,将第一个参数$ n称为$ 1。
第二个参数input.ini是$ 2.
答案 3 :(得分:0)
如果您有可用的git并且您不担心缩进,那么黑客可能就是使用git config。
示例:
$ git config -f settings.ini server.ip 123.123.123.123
$ cat settings.ini
[server]
ip = 123.123.123.123
$ git config -f settings.ini server.ip 123.123.123.124
$ cat settings.ini
[server]
ip = 123.123.123.124