ここではいままで学習したシェルスクリプトの応用例としてMayaでレンダリングされた画像ファイルの名前を色々なパターンで変換するスクリプトを作ってみよう。
よくある例として、アニメーションの画像ファイルの番号の桁数を変更したいという場合を考えてみよう。
シェルのスクリプトでは目的を達成するための方法は何種類も考えられる。
ここで紹介するのはそのうちの、いくつかに過ぎない。
どの方法がベストかはその場の状況によって変ってくる。
実際に自分でスクリプトを作って実行する時には、以下のサンプルをもとにして様々な状況に対処できるようにしよう。
例えば、test.iff.1 ~ test.iff.10 を test.iff.0001 ~ test.iff.0010に変更するスクリプトはどのように作れば良いだろうか。
1から10までの番号は変数を1から10まで変えてゆけば良い。
問題は0001から0010までの数字をどのように表せば良いかということだ。
if文などを使用して1桁の場合、10桁の場合と分けてファイル名を変更しても良いが、それだとプログラムが少しだけ複雑になる。
スクリプト例1
set i = 1
while($i <= 10)
if($i < 10) then
set n = 000$i
else if($i < 100) then
set n = 00$i
endif
mv test.iff.$i test.iff.$n
@ i ++
end
上のスクリプトの問題点は数字が100以上ある場合にelse if()を増やさなくてはならないのでさらにスクリプトが複雑になってしまうということである。
このような場合は、printfというコマンドを使用すると少しだけスクリプトが簡単になって汎用性も増す。
(printfはC言語のprintfと同じような使い方のできるコマンドである)
# printf "%d\n" 78 78 # printf "%04d\n" 78 0078
このprintfを使用して上のスクリプトと同じことを行うスクリプトを作ると以下のようになるだろう。
スクリプト例2 (rename1.sh)
set i = 1
while($i <= 10)
set n = `printf "%04d" $i`
mv test.iff.$i test.iff.$n
@ i ++
end
# ls rename1.sh test.iff.1 test.iff.2 test.iff.3 test.iff.4 test.iff.5 test.iff.6 test.iff.7 test.iff.8 test.iff.9 test.iff.10 # csh rename1.sh # ls rename1.sh test.iff.0001 test.iff.0002 test.iff.0003 test.iff.0004 test.iff.0005 test.iff.0006 test.iff.0007 test.iff.0008 test.iff.0009 test.iff.0010