csh 入門 ---- foreach 文

条件を満たすものについてそれぞれに実行せよというのが foreach 文です。私は csh の スクリプトを使う時には、この foreach 文 をしばしば使います。

5.1 いらない file を消すコマンド pur

いらない file を消すとき、rm で * を使うと、file を過って全 て消してしまう場合があります。それを避けるために、あらかじめ いらない file の形を特定します。
#!/bin/csh     
#           5.1 いらない file を消すコマンド pur 
echo purge: start.
# ls で実行される file が 全てひとつずつ $i になります。
foreach i(`/bin/ls`)
#  =~ は正規表現を許す 比較でした。
if($i =~ *.dvi) then
rm $i
endif
#
if($i == core) then
rm $i
endif
if($i =~ *.o) then
rm $i
endif
if($i =~ *~) then
rm $i
endif
if($i =~ "#"*) then
rm $i
endif
# foreach 文は end で終ります。
end
echo purge: nomal end.

これで この directory にある、いらない file を消去できます。

5.2 管理用 コマンド kadai

特定の user に関して、特定の file が更新されているかを調べる コマンドです。これを応用すると、演習の進行状況を把握できます。

まず user.dat に 管理したい user 名を書きます。

a9810001
b9810002
c9810003
この file を利用して ~/public_html/index.html ができているか を調べます。
#!/bin/csh     
#           5.2 管理用 コマンド kadai 
foreach i (`cat user.dat`)
# もし file があれば
if (-e  ~$i/public_html/index.html) then
echo "$i :  file あり。`ls -l ~$i/public_html/index.html`"
else
echo "$i :  file 無し。"
endif
#
end

さらに、中身をみて得点を加えることもできます。foreach は directory の下全てを見たい場合には、ls -R を使うと ok です。 クラスの人全員の検索をする場合には、不必要な file を見ないよ うな配慮が必要です。
rsaito@ee.uec.ac.jp