shell脚本从属性文件中读取数组中的属性

时间:2015-12-22 09:47:16

标签: linux shell sh

conf.properties文件包含以下内容:

src1=abc
dest1=xyz

src2=123
dest2=456

...

以下shell脚本正在访问conf.properties文件中的src和dest属性。

. /tmp/conf.properties

echo "$src1"
echo "$dest1"

echo "$src2"
echo "$dest2"

现在,文件中可能有任意数量的src和dest属性。

如何编写代码以将属性文件中的所有src和dest读入数组。

2 个答案:

答案 0 :(得分:0)

您可以将它们分别读取并放在两个变量中。 逐行读取文件继续在srcVal中附加src的东西,用空格分隔。

set -A srcArrVar -- $srcVal set -A destArrVar -- $destVal 或者您可以使用下面的关联

typeset -A srcArray
srcArray[src1]="abc"
srcArray[dest1]="xyz"

是的,你需要解析它..我可以立即想到一种方法,如下所示

grep "src" filename > srcFile
grep "dest" filename > destFile
sort srcFile > sortedSrcFile
sort destFile > sorteddestFile
srcVal=`cut -d"=" -f2 sortedSrcFile`
destVal=`cut -d"=" -f2 sorteddestFile`
set -A srcArrVar -- $srcVal
set -A destArrVar -- $destVal

通过使用sed / awk可以有更优雅的方式做上面的事情...我假设你没有缺失值,系列是连续的src1,src2 ......类似于dest1,dest2,dest3 ......

答案 1 :(得分:0)

从Ajay的答案中得到线索后创建了自己的逻辑:

filename=/tmp/conf.properties

srcArr=($(grep "src" $filename)) 
destArr=($(grep "dest" $filename))

len=${#srcArr[@]}

for (( i=0; i<${len}; i++ ))
do
    srcVal=$(cut -d"=" -f2 <<< ${srcArr[i]})
    destVal=$(cut -d"=" -f2 <<< ${destArr[i]})

...

done