系统相关
首页 > 系统相关> > linux-BASH-使用相同“变量”的多个实例读入配置文件

linux-BASH-使用相同“变量”的多个实例读入配置文件

作者:互联网

我正在尝试读取配置文件,然后将配置的“部分”放入bash脚本中的数组中,然后运行该命令,然后再次重新遍历配置,并继续执行此操作,直到配置文件的末尾.

这是一个示例配置文件:

PORT="5000"
USER="nobody"
PATH="1"
OPTIONS=""

PORT="5001"
USER="nobody"
PATH="1"
OPTIONS=""

PORT="5002"
USER="nobody"
PATH="1"
OPTIONS=""

我希望bash脚本能在第一个“部分”中阅读,并将其带入脚本中,然后运行以下命令:
脚本名-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 $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 nobody -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退出时不会被杀死.最终结果是将脚本转换为守护程序,因此无论父脚本发生了什么,它们都将在后台连续运行.

标签:bash,configuration-files,arrays,linux
来源: https://codeday.me/bug/20191023/1916550.html