6 全ソースファイル

ここまでの、wwwcheck1.csh と wwwcheck2.csh の全ソースファイルを紹介します。

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'' のようなものになります。 これは一時ファイルを作るときによく使われる手法で、 こうしておけばそのようなスクリプトを (一人あるいは複数人が) 同時に立ち上げても、 それらの一時ファイル名はバラバラになり、 同じ一時ファイルを使ってしまうことはなくなります。

竹野茂治@新潟工科大学
2008年1月24日