Bash - цикл по разделам INI - PullRequest
0 голосов
/ 18 марта 2019

мой вопрос о том, как прочитать 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%

1 Ответ

2 голосов
/ 18 марта 2019

Если вам нужно прочитать .ini файлы в bash, я предлагаю вам использовать уже реализованное решение, например, Bash ini parser от rudimeier работает отлично.

Существуют также другие опции, такие как shini или синтаксический анализатор albfan .

Используя значение 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%'
...