シェルでもC言語のようなwhile文が使用できる。
シェルで使用するwhile文の形式は次の通り。
while(条件)
コマンド
end
C言語の { と } は無くて、そのかわり end が最期につく。
条件は if で紹介した条件と同じである。
MAYAでレンダリングされた画像ファイル名を変換するシェルスクリプトを作ってみよう。
viで以下のシェルスクリプトをrename1.shという名前を作る。
上のシェルスクリプトを実行すると以下のようになる。
set i = 1
while($i <= 3)
mv persp_test.$i.iff kadai.$i.iff
@ i ++
end
# ls persp_test.1.iff persp_test.2.iff persp_test.3.iff rename1.sh # csh rename1.sh # ls kadai.1.iff kadai.2.iff kadai.3.iff rename1.sh #
シェルではC言語には無い、foreach というループが使用できる。
特定の名前のファイルなどに対してコマンドを実行する場合などに便利である。
foreachではリストの中の要素を一つづつ変数に代入してコマンドを実行する。
リストの部分にはファイル名、変数(配列)やコマンドの結果(コマンド置換)などが使用できる。
foreach 変数 ( リスト )
コマンド
end
下の例ではMAYAのデータファイル(*.ma)を別の名前でコピーしている。
上のcpold.shという名前で作り、実行すると以下のようになる。
foreach f (*.ma)
cp $f $f.old
end
# ls cpold.sh kadai.ma test.ma tmp.ma # csh cpold.sh # ls cpold.sh kadai.ma kadai.ma.old test.ma test.ma.old tmp.ma tmp.ma.old #
上のforeachでは以下の様に処理が進む。
# ls rename2.sh persp_test.iff.1 persp_test.iff.2 persp_test.iff.3 persp_test.iff.4 persp_test.iff.5 persp_test.iff.6 persp_test.iff.7 persp_test.iff.8 persp_test.iff.9 persp_test.iff.10 # csh rename2.sh # ls rename2.sh persp_test.1.iff persp_test.2.iff persp_test.3.iff persp_test.4.iff persp_test.5.iff persp_test.6.iff persp_test.7.iff persp_test.8.iff persp_test.9.iff persp_test.10.iff #