不明な数の変数セットを含む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[@]}

おすすめ記事