알 수 없는 수의 변수 세트가 포함된 conf 파일이 포함된 Bash 스크립트

알 수 없는 수의 변수 세트가 포함된 conf 파일이 포함된 Bash 스크립트

구성 파일이 포함된 bash 스크립트를 작성 중입니다. 구성 파일에는 모드 및 mtu 값 세트가 포함됩니다. 사용자 정의 컬렉션은 0개 또는 개수에 제한 없이 있을 수 있습니다. 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[@]}.

관련 정보