課題2

課題2の説明

授業時間内に課題を提出してもらう。

課題

ホームディレクトリの下のunixディレクトリに
kadai2.shという名前でシェルスクリプトを作り、
画像ファイル名の前半部分と番号の種類を変換できるようにせよ。

実行例

% ls *.iff
tmp.1.iff tmp.2.iff tmp.3.iff tmp.4.iff tmp.5.iff
tmp.11.iff tmp.12.iff tmp.13.iff tmp.14.iff tmp.15.iff
tmp.101.iff tmp.102.iff tmp.103.iff tmp.104.iff tmp.105.iff
% csh kadai2.sh 3 5 tmp test
% ls *.iff
tmp.1.iff tmp.2.iff test.0003.iff test.0004.iff test.0005.iff
tmp.11.iff tmp.12.iff tmp.13.iff tmp.14.iff tmp.15.iff
tmp.101.iff tmp.102.iff tmp.103.iff tmp.104.iff tmp.105.iff
% csh kadai2.sh 11 13 tmp test
% ls *.iff
tmp.1.iff tmp.2.iff test.0003.iff test.0004.iff test.0005.iff
test.0011.iff test.0012.iff test.0013.iff tmp.14.iff tmp.15.iff
tmp.101.iff tmp.102.iff tmp.103.iff tmp.104.iff tmp.105.iff
% csh kadai2.sh 102 104 tmp test
% ls *.iff
tmp.1.iff tmp.2.iff test.0003.iff test.0004.iff test.0005.iff
test.0011.iff test.0012.iff test.0013.iff tmp.14.iff tmp.15.iff
tmp.101.iff test.0102.iff test.0103.iff test.0104.iff tmp.105.iff

解答例

基本的にwhileを使用する。

ifを使った解答例

ifを使用した素直な解答。

set i = $argv[1]
while($i <= $argv[2])
	if($i < 10) then
		mv $argv[3].$i.iff $argv[3].000$i.iff
	else if($i < 100) then
		mv $argv[3].$i.iff $argv[3].00$i.iff
	else if($i < 1000) then
		mv $argv[3].$i.iff $argv[3].0$i.iff
	else
		mv $argv[3].$i.iff $argv[3].$i.iff
	endif
	@ i ++
end

その他の解答例

printfというコマンドを使用すると以下のように短くなる。

set i = $argv[1]
while($i <= $argv[2])
	mv $argv[3].$i.iff $argv[4].`printf "%04d" $i`.iff
	@ i ++
end

printfはC言語のprintfと同じような使い方のできるコマンドである

% printf "%d\n" 78
78
% printf "%04d\n" 7
0007
% printf "%04d\n" 78
0078
% printf "%04d\n" 178
0178
% printf "%04d\n" 2178
2178

Prev | Next
Home | Contents
abe@injapan.net