7 2 つのスクリプトの統合について

今回は 2 つのスクリプトファイルの形で紹介しましたが、 これらには共通の設定も多く、 またこの 2 つを連続して実行することも多いだろうと思いますので、 いっそこの 2 つを統合して一つのスクリプトにする ということも考えられます。

その場合は、[3] の wwwcheck1.csh のオプション -b, -nb をサポートして、 -nb なら後半の wwwcheck2.csh の部分を実行しないとか、 また逆に wwwcheck2.csh の部分のみを実行するオプション (例えば -bo) をサポートすることなども考えてみるといいでしょう。

ところで、そのような csh スクリプトの統合には別の形もあり、 別の csh スクリプト wwwcheck3.csh を用意して、その中で

#! /bin/csh -f
csh -f wwwcheck1.csh
csh -f wwwcheck2.csh
のようにする、という手もあります。 もちろん、この wwwcheck3.csh でコマンドライン解析をして、 上に述べたオプションを実現したり、 あるいは wwwcheck1.csh 用のオプションを受けとった場合は それを wwwcheck1.csh にオプション引数として渡す、 ということもできます。 例:
set check1op = ""     # wwwcheck1.csh に渡すオプション
set check1On = 1     # 1 なら wwwcheck1.csh を実行する
set check2On = 1     # 1 なら wwwcheck2.csh を実行する
foreach option ( $argv )
    switch ( $option )
    case -v:
    case -q:
        # この 2 つのオプションは wwwcheck1.csh に渡す
        # set check1op = "$check1op $option"
        # 2 つ以上のオプションを渡すときは上のように書く
        set check1op = "$option"
        breaksw
    case -b:
        # wwwchech2.csh を実行する
        set check2On = 1
        breaksw
    case -nb:
        # wwwchech2.csh を実行しない
        set check2On = 0
        breaksw
    case -bo:
        # wwwchech2.csh のみ実行する
        set check1On = 0
        set check2On = 1
        breaksw
    endsw
if ( $check1On ) then
    csh -f wwwcheck1.csh $check1op
endif
if ( $check2On ) then
    csh -f wwwcheck2.csh
endif

このような統合を行う場合は、 wwwcheck1.csh, wwwcheck2.csh も残っているので、 あいかわらずそれぞれを単独で使えることになるのですが、 ファイルが別々になっていますので保守性は悪くなります。 特に、wwwcheck1.csh, wwwcheck2.csh では共通の設定がありますので、 それを変更する場合は両方のファイルを忘れずに修正しなければいけません。

共通の設定は、それらを wwwcheck1.csh, wwwcheck2.csh から分離し、 別の一つのファイルにまとめて書いておいて、 それを利用する csh スクリプト (wwwcheck1.csh, wwwcheck2.csh) で その共通の設定ファイルを source 内部コマンドで読み込む、 という手もありますが、後で修正する場合は、 結局複数のファイルの中身を見ないとわからないでしょうから、 その方法でも保守性がよくないという点はあまり改善しないだろうと思います。

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