일부 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