我正在编写一个包含配置文件的 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[@]}
。