#!/bin/sh echo > quiz1.txt #新しくスクリプトを実行する際、前回の実行結果を消去し、新しく書き込む。 b=0 c=1 e=0 f=0 #ファイル名が数字であるということを利用し、ファイル名を数字に置き換える。ここでは、変数cとfを比較する2つのファイル名の末尾の数字に対応させ、0bc.datと0ef.datというファイル名にする。b,eはそれぞれ10の桁に対応する部分である。ここで、100.datを入れていないのは、以下のスクリプトの内容上、100.datのみを別のスクリプトで処理させる必要があったためである。 while [ $b -le 9 ]; do while [ $c -le 9 ]; do f=`expr $c + 1` #fという文字を付けられたファイルは比較するcという文字を付けられたファイルより数字の大きさを1つ大きくしておくことで、比較するファイルの重複を避ける。 while [ $e -le 9 ] do while [ $f -le 9 ] do if diff -q -s dat/0$b$c.dat dat/0$e$f.dat > /dev/null #diffは2つのファイルの内容が異なっているかを返すコマンドであるため、これによって2つのファイルの内容を比較させる。-qは比較したファイルの詳細な内容は返さず、内容が異なっているか同一かのみを返すオプション。また、-sはファイルが同一のときもその結果を返すオプション。スクリプトを実行した際、画面に比較結果が1つずつ出るのが見づらかったため、/dev/nullで画面表示を消した。 then echo "0$b$c.dat" "0$e$f.dat" >> quiz1.txt #比較する2つのファイル名を上で置いた文字に対応させ、cのついたファイルと$e$fの文字を付けたファイルを1つずつ比較していく。このとき、ループの順番から、cのついたファイルはファイル名が変化せず固定される。 fi f=`expr $f + 1` #fを1つずつ増やして比較していく。 done e=`expr $e + 1` f=0 #fのループは9までしか繰り返さないので、f=10になったときはループの外に出し、fを0に、eを1つ増やすことで010以上のファイルも比較させる。ファイルの桁をこの作業で繰り上げる。 done c=`expr $c + 1` e=$b #cを固定して片方のファイルを全て比較し終えたら、cのつくファイルの数字を1つ増やし、またファイルを比較していく。このとき、fのつくファイルは必ずcのつくファイルより1つ数字の大きいものにする必要があるため、0ef.datのeを0bc.datのbと一致させておく。 done b=`expr $b + 1` e=$b c=0 #cもfと同様、9までしか繰り返さないので、c=10になったときループの外に出し、bの数字を1つ増やし、cをゼロに戻すことで010以上のファイルも比較できる。ここでもeはbと同じ数字にしておかないと0bcと0efが順番に比較できない。 done #以上より、001.datから099.datまで比較することができる。 e=0 f=1 while [ $e -le 9 ] do while [ $f -le 9 ] do if diff -q -s dat/100.dat dat/0$e$f.dat > /dev/null then echo "100.dat" "0$e$f.dat" >> quiz1.txt fi f=`expr $f + 1` done #上では001から099までしか比較できていないので、ファイル100.datを固定してもう一方のファイルを001から099まで100.datと比較していく。比較の方法は上のループと同様。 e=`expr $e + 1` f=0 done