wwwcheck1.csh のソースファイル:
#! /bin/csh -f
# wwwcheck1.csh
# shige 01/18 2008
#
#### 初期設定 ####
set workd = ~/wwwcheck # 作業ディレクトリ
set urllistf = $workd/urllist # URL リストファイル
set datad = $workd/data # 取得したファイルの置き場所
set oldd = $workd/old # 以前取得したファイルの置き場所
set wget = "wget -q -O -" # wget のコマンドライン
set myverbose = 0 # 冗長出力をするかどうか
##### コマンドライン解析 ####
if ( $#argv > 0 ) then
switch ( $argv[1] )
case -v:
set myverbose = 1
breaksw
case -q:
set myverbose = 0
breaksw
case -h:
default:
echo "csh -f $0 ([option])"
echo " [option]:"
echo " -v : 冗長出力"
echo " -q : 画面出力を抑制 (default)"
echo " -h : このメッセージ"
exit
endsw
endif
##### 実行部分 ####
mv $datad/*.html $oldd # 前回取得したファイルを移動
set urldata = ( `awk '!/^#/{print $1}' $urllistf` )
set namedata = ( `awk '!/^#/{print $2}' $urllistf` )
if ( $#urldata == 0 || $#urldata != $#namedata ) then
echo "$urllistf に不正な行が存在するようです。"
exit
endif
while ( $#urldata > 0 )
set url = "$urldata[1]"
set name = "$namedata[1]"
if ( $myverbose ) then
echo "$url ==> $name.html"
endif
$wget "$url" > $datad/$name.html
shift urldata
shift namedata
end
wwwcheck2.csh のソースファイル:
#! /bin/csh -f
# wwwcheck2.csh
# shige 01/18 2008
#
#### 初期設定 ####
set workd = ~/wwwcheck # 作業ディレクトリ
set urllistf = $workd/urllist # URL リストファイル
set datad = $workd/data # 新しいファイルの置き場所
set oldd = $workd/old # 古いファイルの置き場所
set tmpf = $workd/tmpf-$$ # 一時ファイル
set browser = "w3m -N" # ブラウザ定義
#set browser = firefox
##### 実行部分 ####
set newflist = ( )
foreach newf ( $datad/*.html )
set fname = `basename $newf`
set oldf = $oldd/$fname
if ( -f $oldf ) then
diff $oldf $newf > $tmpf
if ( ! -z $tmpf ) then
set newflist = ( $newflist $newf )
endif
else
set newflist = ( $newflist $newf )
endif
end
rm $tmpf
if ( $#newflist > 0 ) then
$browser $newflist
endif
一つだけ説明を追加します。 wwwcheck2.csh では一時ファイルの名前が ``tmpf-$$'' のように設定されていますが、 $$ は csh スクリプトではその csh のプロセス番号に展開され、 よって ``tmpf-2536'' のようなものになります。 これは一時ファイルを作るときによく使われる手法で、 こうしておけばそのようなスクリプトを (一人あるいは複数人が) 同時に立ち上げても、 それらの一時ファイル名はバラバラになり、 同じ一時ファイルを使ってしまうことはなくなります。
竹野茂治@新潟工科大学