#! /bin/csh -f
#### 初期設定 ####
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 j=1
foreach url ( `grep "^#" $urllistf` )
if ( $myverbose ) then
echo "[$j] $url ==> $j.html"
endif
$wget "$url" > $datad/$j.html
@ j ++
end
[3] の 7 節のスクリプトと比べると、 先頭に workd, oldd の変数が追加されていますが、 workd は、``~/wwwcheck'' が繰り返し使われるので それを置き換えたもので、 oldd は前に取得したファイルを保存するディレクトリです。
繰り返し現れる名前は、変数値にしておいてその変数を使用するようにしておくと、 それを変更する必要がある場合にその一箇所だけを変更すればよくなります。
コマンドラインオプションのチェックは foreach 文から if 文に変えて、 最初のオプション $argv[1] のみを調べるようにしてあり、 さらに -b, -nb のオプションを削除していますが、 最も大きな変更は実行部分の最初の行にある mv の行です。 mv はファイルの移動やファイル名の変更に使われる Unix 標準コマンドで、 以下のように使用します。
なお、[3] で説明したように、*.html は、 mv の実行前に実際のファイル名に展開されて実行されるので、実際には
mv $datad/1.html $datad/2.html $olddのようなものが実行されることになります (もちろん実際は $datad や $oldd もその値に展開されてから 実行されます)。 ところがその展開の際に、 $datad 内にそのパターンにマッチするファイルが一つもない場合には、 そのファイル名パターンの展開に失敗し csh がエラーを出してしまいますので、 本当はそのようなファイルがあるかどうか チェックしてから実行するようにした方が安全なのですが、 とりあえずここではそのチェックは省略することにします1。
竹野茂治@新潟工科大学