/bash-ini-parser

Primary LanguageShellGNU General Public License v3.0GPL-3.0

bash-ini-parser

Build Status

A ini file parser for bash relying only on builtins

Usage

You must copy bash-ini-parser on your project and source it:

$ source bash-ini-parser

or

$ . bash-ini-parser

Then, gived a properties file (file.ini):

[section]
   key = value
   key2 = value2

Issuing:

$ cfg_parser file.ini

Will declare functions per ini section called cfg_section_<section> which declares variables named as keynames so you can access its values using

$ cfg_section_<section>
$ echo $key
value
$ echo $key2
value2

Example

Goto scripts directory and launch example.sh

$ cd scripts
$ ./example.sh

Inspect its code, reuse on your scripts

Updating and saving changes

To update a value

var=new_value
cfg_update <sec> <var>

To save changes

cfg_writer > newfile.ini

Take care that saving function will loose comments and indentation, use with care

Checking a ini file

If you want to test your existing ini file use getkeyfromsection.sh

$ getkeyfromsection.sh <file.ini> sectionname keyname

e.g.:

See file.ini, it is a file with different indentations, and comments

Issuing:

$ ./testfile.sh file.ini sec1 var4

Outputs:

show parsed file.ini
[sec1]
var1="foo"
var2="hoge"
var3="fuga"
var4="pivo"
[sec2]
var1="bar"
var2="foo"
var3="eco"
var4="piyo baz qux"
var5="foo"
var6="hoge"

var4 value is "pivo"

Debugging

declare BASH_INI_PARSER_DEBUG and parse will output the ini file processing

Drawbacks

This is more a hack than a reliable parser, so keep in mind things like

  • multiword value vars will be arrays so you must access it as ${var[*]}

For a trusted parser (but based on python) checkout crudini

Alternatives

bash_ini_parser a slightly different approach.

Who is using bash-ini-parser?

Credits

This is just an enhacement from a blog post