이 bash 구조를 유효한 sh 구조로 조정하는 방법

이 bash 구조를 유효한 sh 구조로 조정하는 방법

일부 bash 스크립트를 /bin/sh만 사용할 수 있는 플랫폼으로 변환하는 동안 우연히 다음 bash 구성을 발견했습니다.

#!/bin/sh

   RSTPD=/sbin/rstpd
   RSTPCTL=/sbin/rstpctl
   RSTP=0
   bridgeprefix="gbr"
   #UPDATE_STRING=-b eth2 eth3
   BRIDGES="0"
   CSIF[0]="eth2"
   SSIF[0]="eth3"

       for b in $BRIDGES ; do
            echo Starting service bridge $bridgeprefix$b
            brctl addbr $bridgeprefix$b  ||  RETVAL=1
            if [ $RSTP == 0 ] ; then
              brctl stp $bridgeprefix$b on 
              brctl setbridgeprio $bridgeprefix$b 65000
            fi

            for br in ${CSIF[$b]} ; do  #<--bad substitution
                echo Adding CSIF $br on $bridgeprefix$b
                ifup $br
                brctl addif $bridgeprefix$b $br  ||  RETVAL=1
            done
       done

구문 오류가 발생했습니다. 두 번째 for 루프 대체 오류입니다.

이 bash 구조를 sh 호환 구조에 어떻게 적용할 수 있나요?

답변1

배열에 요소가 하나만 있고 상수 변수를 테스트하는 경우 스크립트는 다음과 동일하게 작성됩니다.

#!/bin/sh

bridge="gbr0"
CSIF="eth2"

echo Starting service bridge $bridge
brctl addbr $bridge || RETVAL=1
brctl stp $bridge on 
brctl setbridgeprio $bridge 65000

echo Adding CSIF $CSIF on $bridge
ifup $CSIF
brctl addif $bridge $CSIF ||  RETVAL=1

관련 정보