この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

構文エラーが発生しました。 2番目のforループ置換エラーです。

このbash構造をsh互換構造にどのように適用できますか?

答え1

配列に要素が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

関連情報