구성 파일이 포함된 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[@]}
.