| 日本-日本語 | 
      
  | 
  
      
  | 
  
| 
 | 
     
OpenVMS マニュアル | 
    
  
  | 
    
     
OpenVMS
 | 
    
    
  
| 目次 | 索引 | 
コマンド・プロシージャ とは,DCL コマンドと, DCL コマンドで使用されるデータ行が格納されたファイルです。 1 つか 2 つの DCL コマンドしか入っていない簡単なコマンド・プロシージャもありますが,複雑なコマンド・プロシージャになると,洗練されたコンピュータ・プログラムのような働きをします。コマンド・プロシージャを実行すると,DCL インタプリタはファイルを読み込んで,その中に入っているコマンドを実行します。
システム管理者がシステム・ログイン・コマンド・プロシージャを設定した場合には,ログインするたびにそれが実行されます。システム・ログイン・コマンド・プロシージャを使用すれば,システム管理者は,自分を含むシステム上のすべてのユーザがログインしたときに,必ず特定のコマンドが実行されるように設定できます。
システム・ログイン・コマンド・プロシージャを実行した後,システムはパーソナル・ログイン・コマンド・プロシージャを実行します (存在する場合)。パーソナル・ログイン・コマンド・プロシージャは,システム環境をカスタマイズするためのものです。パーソナル・ログイン・コマンド・プロシージャに登録されているコマンドは,ログインするたびに実行されます。つまり,ログイン時には,最大 2 つのログイン・コマンド・プロシージャが自動的に実行されます ( システム全体のログイン・コマンド・プロシージャの他にユーザ独自のログイン・コマンド・プロシージャがある場合はその両方 )。
ユーザのアカウントを設定した人が,ユーザの最上位ディレクトリにログイン・コマンド・プロシージャを格納することもあります。ログイン・コマンド・プロシージャが最上位ディレクトリに格納されていない場合には,自分でログイン・コマンド・プロシージャを作成し, LOGIN.COM という名前を付け,最上位ディレクトリに格納することもできます。システム管理者が特に指定しない限り,ユーザがログインしたとき,そのユーザが作成した LOGIN.COM ファイルが実行されます。
本章では,次のことについて説明します。
DCL コマンド・プロシージャには,次の 2 種類があります。
![]()
13.1 コマンド・プロシージャを作成するための基礎的な説明
![]()
コマンド・プロシージャを作成するには,次の 2 種類の方法があります。
作成するファイルには,コマンド行,ラベル,コメント,条件文,変数を格納できます。
13.1.1 省略時のファイル・タイプ
![]()
コマンド・プロシージャの省略時のファイル・タイプは .COM です。コマンド・プロシージャの名前を指定するときに,ファイル・タイプとして .COM を指定した場合には,ファイル名を指定するだけで,コマンド・プロシージャを実行できます。 SUBMITコマンドとプロシージャ実行 (@) コマンドでは,特に指定した場合を除き,ファイル・タイプは .COM であるものと解釈されます。
13.1.2 コマンドの作成
![]()
コマンド・プロシージャにコマンドを登録する場合には,次のことに注意してください。
$ PRINT LAB.DAT   - 
     /AFTER=17:00 - 
     /COPIES=20   - 
     /NAME="COMGUIDE" 
 | 
コマンド行を作成する場合には,次のことに注意してください。
      $ ! Everything between the commands DECK and EOD 
      $ ! is written to the file WEATHER.COM 
      $ ! 
      $ CREATE WEATHER.COM 
      $ DECK 
      $ FORTRAN SUMMER 
      $ LINK SUMMER 
      $ RUN SUMMER 
      $ EOD 
      $ ! 
      $ ! Now execute WEATHER.COM 
      $ @WEATHER 
      $ EXIT 
 | 
先頭にドル記号が指定されていないコマンド行も, DCL で正しく解釈されると思われますが,なるべく DCL コマンド行の先頭にはドル記号を指定してください。
![]()
13.2 コマンド行でのラベルの使用
![]()
DCL コマンド・プロシージャでは,ループ,コード・セクション,サブルーチンの先頭をマークするためにラベルを使用します。ラベルを使用する場合には,次の規則に注意してください。
コマンド・インタプリタがラベルを検出すると,ローカル・シンボル・テーブルの特殊なセクションにそのラベルが登録されます。ラベルのために使用できる容量は制限されています。コマンド・プロシージャで多くのシンボルを使用し,多くのラベルが含まれている場合には,コマンド・インタプリタはシンボル・テーブル空間をすべて使用してしまう可能性があり,エラー・メッセージが表示されます。この場合には,プロシージャに DELETE/SYMBOL コマンドを指定して,不要になったシンボルを削除します ( ただし,ラベルを削除することはできません )。
13.2.2 重複するラベル
![]()
コマンド・プロシージャで同じラベルを 2 回以上使用する場合には,ローカル・シンボル・テーブルの既存の定義は新しい定義に置き換えられます。
重複するラベルが存在する場合には,GOTO コマンドは, DCL が最後に処理したラベルに制御を渡します。また,GOTO コマンドは重複するラベルを処理するときに,次の規則も使用します。
コマンド・プロシージャを作成する場合には,なるべくコメントを指定してください。コマンド・プロシージャを更新したり,問題を解決するときに,コメントが指定されていると役立ちます。コメントは次の方法で使用できます。
コマンド・プロシージャにコメントを指定する場合には,次の規則が適用されます。
コマンド・プロシージャの作成を開始する前に,コマンド・プロシージャが実行するタスクを会話形式で実行します。必要なコマンドを入力し,使用される変数と条件,および発生する会話を記録します。
これ以降の節では,簡単なコマンド・プロシージャの作成方法を説明します。これ以降で使用する例は,CLEANUP.COM というコマンド・プロシージャです。このコマンド・プロシージャは,ディレクトリを整理するために使用します。
コマンド・プロシージャを作成するには,次の手順を実行します。
| 手順 | 操作 | 
|---|---|
| 1 | コマンド・プロシージャを設計する。 | 
| 2 | 変数を割り当て,条件をテストする。 | 
| 3 | ループを追加する。 | 
| 4 | コマンド・プロシージャを終了する。 | 
| 5 | プログラム・ロジックをテストおよびデバッグする。 | 
| 6 | クリーアップ・タスクを追加する。 | 
| 7 | プロシージャを完成する。 | 
コマンド・プロシージャを設計するには,次の操作を実行します。
| 手順 | 操作 | 
|---|---|
| 1 | プロシージャが実行するタスクを決定する。 | 
| 2 | コマンド・プロシージャが使用する変数と,その変数のロード方法を判断する。 | 
| 3 | コマンド・プロシージャが必要とする条件と,条件をテストする方法を判断する。 | 
| 4 | コマンド・プロシージャを終了する方法を決定する。 | 
クリーンアップ操作で一般に実行される特定のコマンドがあります。次の表は,これらのコマンドと,そのコマンドが実行するタスクを示しています。
| コマンド | 実行するタスク | 
|---|---|
| DIRECTORY | カレント・ディレクトリの内容を表示する。 | 
| TYPE filespec | ファイルを表示する。 | 
| PURGE filespec | ファイルをパージする。 | 
| DELETE filespec | ファイルを削除する。 | 
| COPY filespec new-filespec | ファイルをコピーする。 | 
タスクを実行するときに変化するデータは変数です。ディレクトリにファイルを作成したり,ファイルを削除する場合には,ディレクトリを整理するたびに,ファイル名が異なります。したがって,CLEANUP.COM でファイル名は変数です。
コマンド・プロシージャを実行するたびにテストしなければならないコマンドは,条件であると考えられます。 CLEANUP.COM のコマンドは,実行しなければならない操作に応じて,一部またはすべてが実行されるため,各コマンドは条件です。
CLEANUP.COM コマンド・プロシージャで使用する変数と条件を判断した後,変数のロード方法,条件のテスト方法,コマンド・プロシージャの終了方法を判断しなければなりません。 CLEANUP.COM コマンド・プロシージャの場合には,次の判断を下しました。
| タスク | 実現方法 | 
|---|---|
| 変数のロード | コマンド・プロシージャはターミナルからファイル名を入手する。 | 
| 条件のテスト | コマンド・プロシージャ:
 
  | 
| ループの終了 | ループを終了するには,EXIT コマンドを入力しなければならない。 | 
コマンド・プロシージャを理解しやすく,また管理しやすくするには,プロシージャが最初のコマンドから最後のコマンドへと順に実行されるように,文を作成しなければなりません。
 値を変数に割り当てるには,多くの方法があります。この節では,INQUIRE コマンドの使い方について説明します。他の方法については, 第 14 章 を参照してください。
 値を変数に割り当て,条件をテストするには,次の操作を実行します。
 
13.5.2 手順 2: 変数を割り当て,条件をテストする
![]()
| 手順 | 操作 | 
|---|---|
| 1 | INQUIRE コマンドを使用して,値を変数に割り当てる。 | 
| 2 | 実行しなければならない処理を判断する。 | 
| 3 | IF 文と THEN 文を使用して条件をテストする。 | 
| 4 | プログラム・スタブを作成し,コマンドのプレースホルダとしてコマンド・プロシージャに挿入する。 | 
| 5 | 必要に応じてエラー・メッセージを作成する。 | 
INQUIRE コマンドは,値を要求するプロンプトを表示し,ターミナルから値を読み込み,その値をシンボルに割り当てます。
省略時の設定では,INQUIRE コマンドは次の操作を実行します。
次の例は,コマンド・プロシージャCLEANUP.COM の中でコマンド名の入力を求めるコマンドです。 INQUIRE コマンドは入力された値をシンボル COMMANDに割り当てます。
$ INQUIRE COMMAND- "Enter command (DELETE, DIRECTORY, PRINT, PURGE, TYPE)"  | 
INQUIRE コマンドを使用するときに,小文字や複数のスペースとタブを保存するには,応答を引用符 (" ") で囲みます。応答の内部で引用符を使用するときは,引用符で囲んだテキストを引用符で囲みます (""text"")。
 INQUIRE コマンドで変数を要求するプロンプトを表示した後,どのような処理を実行するかを判断する文をコマンド・プロシージャに指定しなければなりません。たとえば,どのコマンドを実行するかを判断するには,ユーザが入力したコマンドを可能な各コマンドに対してチェックする文を,コマンド・プロシージャに指定しなければなりません。
 条件が真であるかどうかをテストするには, IF コマンドと THEN コマンドを使用します。次の表は,CLEANUP.COM でチェックしなければならない可能性を示しています。
 
13.5.2.3 IFとTHENを使用した条件のテスト
| 場合 | 結果 | 
|---|---|
| 一致するものが見つかった場合 | コマンドを実行する | 
| 一致するものが見つからない場合 | 次のコマンドに進む | 
| 有効なすべてのコマンドをチェックした後,一致するものが見つからない場合 | エラー・メッセージを出力する | 
| 目次 | 索引 | 
      
  | 
  ||||||||