BASH – 在configuration文件中读入同一个“variables”的多个实例

我正在尝试读取一个configuration文件,然后将configuration文件的“部分”放到一个bash脚本的数组中,然后运行一个命令,然后再次重新configurationconfigs,然后继续执行,直到configuration文件的末尾。

这是一个示例configuration文件:

 PORT = “5000”
 USER = “没有人”
 PATH = “1”
 OPTIONS = “”

 PORT = “5001”
 USER = “没有人”
 PATH = “1”
 OPTIONS = “”

 PORT = “5002”
 USER = “没有人”
 PATH = “1”
 OPTIONS = “”

我想让bash脚本在第一个“部分”中读取,将其引入到脚本中,然后运行以下命令:
scriptname -p $PORT -u $USER -P $PATH -o $OPTIONS

但是,我希望根据configuration文件中有多less“部分”来执行“部分”的每次迭代,然后运行带有相应configuration设置的命令并将其应用于最终命令。 所以如果是从上面的configuration文件读取,输出将是:

 scriptname -p $ PORT -u $ USER -P $ PATH -o $ OPTIONS
 scriptname -p $ PORT -u $ USER -P $ PATH -o $ OPTIONS
 scriptname -p $ PORT -u $ USER -P $ PATH -o $ OPTIONS

反过来看起来像这样:

 scriptname -p 5000 -u nobody -P 1 -o“”
 scriptname -p 5001 -u nobody -P 1 -o“”
 scriptname -p 5002 -u没有人-P 1 -o“”

提前致谢。

 #!/bin/bash if [[ $# -ne 1 ]]; then echo "Usage: $0 script.cfg" >&2 exit 1 fi function runscript() { scriptname -p $PORT -u $USER -P $PATH -o $OPTIONS } while read LINE; do if [[ -n $LINE ]]; then declare "$LINE" else runscript fi done < "$1" runscript 

如果你想同时在后台运行脚本,试试这个:

 function runscript() { nohup scriptname -p $PORT -u $USER -P $PATH -o $OPTIONS &> /dev/null & } 

&最后使它们在后台运行, nohup确保它们在shell退出时不会被终止。 最终效果是将脚本变成守护进程,以便不管父脚本发生什么情况,都可以在后台继续运行。

 #!/bin/bash awk 'BEGIN{ FS="\n";RS=""} { for(i=1;i<=NF;i++){ gsub(/.[^=]*=|\042/,"",$i) } print "scriptname -p "$1" -u "$2" -P "$3" -o "$4 }' file | bash 

假设部分之间只有一条空行:

 cat <yourfile> | while read ; do if [ -z "$REPLY" ] ; then scriptname -p $PORT -u $USER -P $PATH -o "$OPTIONS" else eval "$REPLY" # NOTE: eval is evil fi done