いくつかの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