-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathREADME
More file actions
132 lines (87 loc) · 2.67 KB
/
README
File metadata and controls
132 lines (87 loc) · 2.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
Introduction
------------
Functions for parsing INI-style file natively in bash.
The INI file format supports the following features:
Sections: [section]
Properties: name=value
Comments: ; comment
# comment
Blank lines and trailing writespace are ignored as is whitespace around
the '=' - ie.
name = value
is equivalent to
name=value
Whitespace and quotes within a value are preserved (though values don't
in general need to be quoted and will not be subject to shell parameter
splitting)
Values can be continuted onto subsequent lines if these are prefixed with
whitespace - ie.
name=line1
line2
is equivalent to:
name = line1 line2
Properties are stored in the global _CONFIG array as ( k1 v1 k2 v2 ... ) with
keys in the format "<section>.<name>" (properties without an associated
section are stored as ".<name>". In most cases this is transparent as the
list/get commands can be used to query the data
The functionality is more or less equivalent to the Python ConfigParser
module with the following exceptions
- Properties are allowed outside sections
- Multi-line properties are joined with ' ' rather than '\n' (due to shell
quoting issues)
Usage
-----
Given the following ini file (test.ini) -
; A test ini file
global = a global value
[section1]
abc = def ; a comment
ghi = jkl
[section2]
xyz = abc ; extends over two lines
def
Parse config file -
$ parseIniFile < test/t2.ini
$ listKeys
.global
section1.abc
section1.ghi
section2.xyz
$ listAll
.global a global value
section1.abc def
section1.ghi jkl
section2.xyz abc def
$ listSection section1
section1.abc def
section1.ghi jkl
$ getProperty global
a global value
$ getProperty section2.xyz
abc def
$ getPropertyVar XYZ section2.xyz && echo OK
OK
$ echo ">${XYZ}<"
>abc def<
Commands
--------
parseIniFile < file
Parse ini file (reads from stdin) and saves data to global _CONFIG var
listKeys
List keys present in config file in format "<section>.<property>"
listAll
List keys and data in format "<section>.<property> <value>"
listSection <section>
List keys and data for given section (sepcified as $1) in format
"<property> <value>"
getProperty [name|section.name]
Print value for given property (sepcified as $1)
Properties without a section can be queried directly as
"name" (rather than ".name")
Returns 0 (true) if property found otherwise 1 (false)
getPropertyVar <variable> [name|section.name]
Save value for given property (sepcified as $2)
into shell variable (specified as $1)
Properties without a section can be queried directly as
"name" (rather than ".name")
Returns 0 (true) if property found otherwise 1 (false)