包含包含未知数量变量集的conf文件的Bash脚本

包含包含未知数量变量集的conf文件的Bash脚本

我正在编写一个包含配置文件的 bash 脚本。配置文件将包含多组模式和 mtu 值。可以有零个或用户定义的任意多个集合。 bash 脚本将获取配置文件。

这将是一个非常简单的程序,所以我不需要真正喜欢它。

每个集合都可以由字母数字字符串定义(它是 /dev/ 名称,没有 /dev/)。

然后,在每个集合中,都有一个模式和一个 MTU 值。

我的想法是创建一个以下格式的 /etc/conf 文件:

ib0_mode=connected
ib0_mtu=65520

或者,对于另一个系统:

inf0_mode=connected
inf0_mtu=65520
inf1_mode=datagram
inf1_mtu=2044

一旦我知道了变量名称,我就可以解析这些值并完成剩下的工作。

但是,bash 脚本如何处理不知道确切名称的情况呢?

我是否需要在配置文件中添加:

devices=('inf0' 'inf1')

或者说,不需要这样吗?

如果添加了这个,如何使用带有变量名前缀和硬编码后缀(如“_mode”和“_mtu”)的变量名?

答案1

假设您使用的是 bash 4.0 或更高版本,您可能需要考虑使用关联数组。您可以在配置文件中执行以下操作:

# myscript.rc
mode[inf0]=connected
mtu[inf0]=65520
mode[inf1]=datagram
mtu[inf1]=2044

然后你的脚本会做这样的事情:

# myscript.sh
declare -A mode
declare -A mtu

source myscript.rc

for mode_idx in ${!mode[@]}; do
    echo "mode[$mode_idx] is ${mode[$mode_idx]}"
done

for mtu_idx in ${!mtu[@]}; do
    echo "mtu[$mtu_idx] is ${mtu[$mtu_idx]}"
done

请注意,这些数组的索引列表是从 获得的${!mode[@]}

相关内容