Bash - 循环INI部分

问题描述 投票:0回答:1

我的问题是如何读取包含多个部分的ini文件,并将部分值提供给循环中的变量。

这是我的batch.ini文件

[section1]
val1='/home/test/'
val2='-i -200 -j 400%'

[section2]
val1='/home/test2/'
val2='-i -320 -j 333%'

[section3]
val1='/home/test3/'
val2='-i -223 -j 555%'

在我的bash脚本中,我想一次循环一个部分,并将值分配给我的bash脚本中的变量。我的伪代码是这样的:

for sectionx = 1 to (number of sections)
do
   my_var1=sectionx(val1)
   my_var2=sectionx(val2)
   echo $my_var1 
   echo $my_var2 
done

输出:

/home/test/
-i -200 -j 400%
/home/test2/
-i -320 -j 333%
/home/test3/
-i -223 -j 555%
bash for-loop ini
1个回答
2
投票

如果你需要在bash中阅读.ini文件,我建议你使用一个已经实现的解决方案,例如rudimeier的Bash ini parser工作得很好。

还有其他选项,如shinialbfan的解析器。

使用rudimeier中的一个,您将获得相应命名的bash变量中的所有值。

例如你的ini

[section1]
val1='/home/test/'
val2='-i -200 -j 400%'

[section2]
val1='/home/test2/'
val2='-i -320 -j 333%'

[section3]
val1='/home/test3/'
val2='-i -223 -j 555%'

您将获得以下bash变量:

INI__ALL_SECTIONS='section1 section2 section3'
INI__ALL_VARS='INI__section1__val1 INI__section1__val2 INI__section2__val1 INI__section2__val2 INI__section3__val1 INI__section3__val2'
INI__NUMSECTIONS=3

INI__section1__val1=/home/test/
INI__section1__val2='-i -200 -j 400%'
INI__section2__val1=/home/test2/
INI__section2__val2='-i -320 -j 333%'
INI__section3__val1=/home/test3/
INI__section3__val2='-i -223 -j 555%'

有了这个,你可以遍历部分和变量,例如:

for section in $INI__ALL_SECTIONS; do 
  echo "Variables in $section:"; 
  for var in `declare | grep "^INI__"$section"__"`; do 
    echo $var; 
  done; 
done;

将产量:

Variables in section1:
INI__section1__val1=/home/test/
INI__section1__val2='-i -200 -j 400%'

Variables in section2:
INI__section2__val1=/home/test2/
INI__section2__val2='-i -320 -j 333%'

Variables in section3:
INI__section3__val1=/home/test3/
INI__section3__val2='-i -223 -j 555%'
© www.soinside.com 2019 - 2024. All rights reserved.