Script Bash com arquivo conf com número desconhecido de conjuntos de variáveis

3

Estou escrevendo um script bash que possui um arquivo de configuração. O arquivo de configuração terá conjuntos de valores mode e mtu. Pode haver zero ou quantos conjuntos o usuário definir. O script bash irá fornecer o arquivo de configuração.

Esse vai ser um programa muito simples, então eu não preciso ficar muito chique com isso.

Cada conjunto pode ser definido por uma string alfanumérica (é um / dev / name, sem o / dev /).

Então, em cada conjunto, há um modo e um valor mtu.

Meu pensamento é criar um arquivo / etc / conf no formato:

ib0_mode=connected
ib0_mtu=65520

Ou, para outro sistema:

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

Uma vez que conheço os nomes das variáveis, posso lidar com os valores e fazer o resto.

Mas, como um script bash manipula não saber exatamente quais nomes existirão?

Eu preciso adicionar ao conf:

devices=('inf0' 'inf1')

Ou isso não é necessário?

Se isso for adicionado, como você usa um nome de variável com o prefixo de um nome de variável e o sufixo codificado como "_mode" e "_mtu"?

    
por user1902689 30.07.2015 / 00:57

1 resposta

3

Supondo que você esteja usando o bash 4.0 ou superior, convém considerar o uso de matrizes associativas. Você pode fazer o seguinte no arquivo de configuração:

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

E o seu script faria algo assim:

# 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

Observe que a lista de índices para esses arrays é obtida de ${!mode[@]} .

    
por 30.07.2015 / 01:42