while, foreachの例

ファイル名の変換

ここでは、whileforeachの使用例としてファイル名を変更するシェルスクリプトを作ってみよう。

whileの使用例

4桁の番号がついたファイル名を他のファイル名に番号はそのままで変換するシェルスクリプト(rename1.sh)。

set i = 1
while($i <= 3)
	set n = `printf "%04d" $i`
	mv test.$i.iff kadai.$i.iff
	@ i ++
end

# ls
rename1.sh test.0001.iff test.0002.iff test.0003.iff   <- 最初test.*.iffというファイルがある
# csh rename1.sh
# ls
rename1.sh kadai.0001.iff kadai.0002.iff kadai.0003.iff   <- kadai.*.iffというファイル名に変換された
#

printfコマンド

UNIXのコマンドにprintfというC言語のprintfと同じような働きをするものがある。
複雑な書式で表示したり、上の例のように数字の変換などに使用すると便利である。

# set i = 5
# printf "%d\n" $i
5
# printf "%04d\n" $i
0005
#

foreachの使用例

ファイル名の前半部分(ピリオドの左側)はそのままで後半部分(ピリオドの右側)だけを変更するシェルスクリプト(rename2.sh)。

foreach f (*.iff)
	mv $f $f:r.tif
end

# ls
rename2.sh kadai.iff test.iff tmp.iff
# csh rename2.sh
# ls
rename2.sh kadai.tif test.tif tmp.tif
#

ファイル名からピリオドの前半・後半部分を取り出すためには、変数の右に:r:eをつける。

# set f = kadai.iff
# echo $f:r
kadai
# echo $f:e
iff
#

まとめ

参考


Prev | Next
Home | Contents
abe@injapan.net