よって、そのブラウザの立ち上げを、 スクリプトの実行時にコマンドラインオプションを与えることで 切り替えられるようにすることを考えてみます。 まずは、とりあえず以下のようなオプションをサポートしてみることにします:
% csh -f wwwcheck1.csh -b : ブラウザを立ち上げるこのために変数 browserOn を設定し、 これが 1 のときはブラウザを立ち上げ、 0 のときはブラウザを立ち上げないようにします。 よってスクリプトの最初で、
% csh -f wwwcheck1.csh -nb : ブラウザを立ち上げない
% csh -f wwwcheck1.csh -h : オプションの説明のヘルプの表示のみ
% csh -f wwwcheck1.csh : ブラウザは立ち上げない (default)
set browserOn = 0 # 0 がデフォルトとし、最後のところは
if ( $browserOn ) thenのように if 文で条件分岐すればいいでしょう。 この if 文は、( ) 内の条件式が真 (0 以外) のときに endif までの部分が実行されます。
$browser $datad/*.html
endif
コマンドラインオプションの取得は、 特別なリスト変数 argv を参照することでできます。 オプションを調べるのには switch 文を利用します:
if ( $#argv > 0 ) then
switch ( $argv[1] )
case -b:
set browserOn = 1
breaksw
case -nb:
set browserOn = 0
breaksw
case -h:
default:
echo "csh -f $0 ([option])"
echo " [option]:"
echo " -b : ブラウザを立ち上げる"
echo " -nb: ブラウザを立ち上げない (default)"
echo " -h : このメッセージ"
exit
endsw
endif
$#argv はリスト変数 argv の要素の個数を意味し、 コマンドラインオプションを指定しなければ 0、 指定すればその個数になり、 また $argv[1] はその最初のオプション文字列になります。
switch 文は C 言語の switch 文とほぼ同様ですが、 文字列ベースで比較されますので、 case ラベルには比較対象となる各文字列を置きます。 C 言語では break で各 case 処理を中断して抜けますが、 csh スクリプトの switch 文では breaksw で抜けます。 endsw は switch 文の終わりを意味します。
switch 文の代わりに if 文を使って、
if ( $argv[1] == "-b" ) thenのようにしてもよさそうに見えるかもしれませんが、 csh スクリプトでは if などの構文の解析の前に変数置換が行われ、 よって最初の if 文が
set browserOn = 1
else if ( $argv[1] == "-nb" ) then
set browserOn = 0
else if ( $argv[1] == "-h" ) then
...
if ( -b == -b ) thenのような行になってしまい、 if 文のカッコ内では数式評価が行われるため、 それが - から始まるとファイル検査式であると見なされて、 エラーになってしまいます (詳しくは [2] 参照)。これは、
if ( "X$argv[1]" == "X-b" ) thenのようにする、という対処もありますが、 数式評価を行わない switch 文を使用する方が無難だし、楽だと思います。
ところで、この switch 文では、オプションに従って 変数 browserOn の値を切り替えてセットしていますが、 オプションが ``-h'' の場合と、 いずれのオプションにもマッチしないものが指定された場合には (default: ラベル)、 ヘルプメッセージを表示して exit でスクリプトを強制終了するようにしています。
また、このヘルプ出力では、以下のものが使用されています。
これをさらに拡張して、立ち上げるブラウザの種類を オプションで切り替えたりすることもできるでしょう。 特に firefox では、既に firefox が立ち上がっている場合は それを操作して別ウィンドウのみを開くオプション -remote がありますので、firefox が立ち上がっているかどうかを調べて、 立ち上がっている場合にはそれを利用する、 といった改良も考えられるでしょう。
竹野茂治@新潟工科大学