0

我对 bash 脚本很陌生,但还没有找到以下问题的答案。我希望有人可以告诉我或给我一些建议。

背景:我有一个程序(比如“程序”),它接受一个 ini 文件(比如“input.ini”)作为输入,需要一段时间才能执行。例如,程序的 ini 文件中的变量可能是“number”,它可能设置为 number=1。

问题:我必须经常调用 ./program input.ini,但“数字”的值不同,比如 1、2、3、4、5。我想,我可以编写一个 bash 脚本,相应地在 for 循环设置“数字”中执行程序。循环不是问题,而是在ini文件中设置“数字”。(我在脚本中设置了 VALUE 的 ini 文件中尝试了例如 number=$VALUE ,但这不起作用。)

问题:如何使用 bash 脚本在 ini 文件中设置变量?(这不一定是永久性的,但仅适用于程序的运行。)

附加问题:在 ini 文件中设置变量是一回事。此外,最好也执行以下操作(我认为这可能会类似...):该程序会生成一些输出文件。这些文件的名称也可以在 ini 文件中设置,例如通过“output_name=filename.out”。如果有类似“output_name=filename_$VALUE.out”之类的东西来相应地设置输出名称,那就太好了。

我希望很清楚我要做什么,如果有人有解决方案或提示如何做,我将不胜感激。

谢谢, 卡里

4

4 回答 4

3

如果您有一个包含 的文件number=something,您可以使用 将“something”替换为“5” sed "/^number=/s/=.*/=5/

这是您可以通过流程替代一次性完成的事情:

./program <(sed "/^number=/s/=.*/=5/" baseinput.ini) 

或者您可以在旧文件的基础上创建一个新的ini文件,如

sed "/^number=/s/=.*/=5/" baseinput.ini > input.ini
./program input.ini

您还可以在脚本中定义整个 ini 文件,并在此处的文档中替换:

N=5
./program - << EOF
[Section]
number=$N
foo=bar
EOF
于 2013-07-30T21:06:25.423 回答
1

完整解析并设置 ini 文件(部分、键、值)并保存在根目录下。

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_'
于 2017-07-20T11:10:47.590 回答
0

不太确定这是否有帮助:这会调用程序脚本五次:

for n in 1 2 3 4 5
do
   ./program $n input.ini
done

然后在程序中,将第一个参数$n 称为$1。

第二个参数 input.ini 是 $2。

于 2013-07-30T21:06:03.763 回答
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
于 2014-02-22T11:49:39.427 回答