我如何在bash循环中从文件中分配这些配置变量

时间:2014-06-10 15:10:49

标签: linux bash shell

我有一个配置文件,其定义如下:

[BEGIN 1]
age=16
sex=M
height=1.5
weight=20
[END 1]
...
[BEGIN 4]
age=17
sex=F
height=1.3
weight=40
[END 4]

我需要在另一个脚本中循环使用这些:

worker_exec  $age  $sex  $height $weight -update | tee output.log

我在想,如果我只在配置文件中出现一次,我会删除[BEGIN ..和[END ..行和来源。但现在有多个定义,我将如何读取此文件并在bash变量中获取这些定义并使用它们? 我还想过使用临时文件,然后我发现提取N ^(th)部分 是我不知道如何处理awk的东西

最终结果是我可以运行

for item in ...# something here i dont get, maybe also unset any previous
               # definitions in previous loop if neccessary.
do
 worker_exec  $age  $sex  $height $weight -update | tee output.log
done

1 个答案:

答案 0 :(得分:1)

如果我明白你想要什么,这应该有用。

要格式化它 将FS(场分隔符)设置为=
将ORS(输出记录分隔符)设置为空

如果有[END在线打印新行 如果它有[END[BEGIN打印行带空格(注意,因为ORS不是什么,这不会打印新行)

然后只需按照正确的顺序读取这些行,就可以将整行传递给worker_exec,因为它将在之前解析

三重重定向用于将变量传递给循环。

VARS=$(awk 'BEGIN {FS="=" ;ORS=""};/\[END/ {print"\n"} !/\[END/ && !/\[BEGIN/ {print $2" "}' test)


while read line; do

     worker_exec $line -update | tee output.log

done <<< "$VARS"

希望这会有所帮助:)