日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトルページ
目次
まえがき
第 1 章:OpenVMS オペレーティング・システムの概要
第 2 章:DCL を使用したシステムとの会話
第 3 章:ファイル情報の格納
第 4 章:ディレクトリ・ファイルの編成
第 5 章:拡張ファイル指定
第 6 章:ディスクとテープ・ドライブの使用方法
第 7 章:Mail を使用して他のユーザと通信する
第 8 章:EVE エディタによるテキスト・ファイルの編集
第 9 章:ファイルのソートとマージ
第 10 章:資源へのアクセスの制御
第 11 章:デバイスとファイルの論理名定義
第 12 章:シンボル,コマンド,式の定義
第 13 章:コマンド・プロシージャの概要
第 14 章:DCL での拡張プログラミング
第 15 章:レキシカル関数を使用しての情報の取得と処理
第 16 章:プロセスとバッチ・ジョブ
付録 A :文字セット
付録 B :コマンド・プロシージャの例
用語集
索引
PDF
OpenVMS ホーム
OpenVMS

OpenVMS
ユーザーズ・マニュアル


目次 索引

第 13 章
コマンド・プロシージャの概要

コマンド・プロシージャ とは,DCL コマンドと, DCL コマンドで使用されるデータ行が格納されたファイルです。 1 つか 2 つの DCL コマンドしか入っていない簡単なコマンド・プロシージャもありますが,複雑なコマンド・プロシージャになると,洗練されたコンピュータ・プログラムのような働きをします。コマンド・プロシージャを実行すると,DCL インタプリタはファイルを読み込んで,その中に入っているコマンドを実行します。

システム管理者がシステム・ログイン・コマンド・プロシージャを設定した場合には,ログインするたびにそれが実行されます。システム・ログイン・コマンド・プロシージャを使用すれば,システム管理者は,自分を含むシステム上のすべてのユーザがログインしたときに,必ず特定のコマンドが実行されるように設定できます。

システム・ログイン・コマンド・プロシージャを実行した後,システムはパーソナル・ログイン・コマンド・プロシージャを実行します (存在する場合)。パーソナル・ログイン・コマンド・プロシージャは,システム環境をカスタマイズするためのものです。パーソナル・ログイン・コマンド・プロシージャに登録されているコマンドは,ログインするたびに実行されます。つまり,ログイン時には,最大 2 つのログイン・コマンド・プロシージャが自動的に実行されます ( システム全体のログイン・コマンド・プロシージャの他にユーザ独自のログイン・コマンド・プロシージャがある場合はその両方 )。

ユーザのアカウントを設定した人が,ユーザの最上位ディレクトリにログイン・コマンド・プロシージャを格納することもあります。ログイン・コマンド・プロシージャが最上位ディレクトリに格納されていない場合には,自分でログイン・コマンド・プロシージャを作成し, LOGIN.COM という名前を付け,最上位ディレクトリに格納することもできます。システム管理者が特に指定しない限り,ユーザがログインしたとき,そのユーザが作成した LOGIN.COM ファイルが実行されます。

本章では,次のことについて説明します。

  • コマンド・プロシージャを作成するための基礎的な説明

  • コマンド・プロシージャの作成手順

  • コマンド・プロシージャの実行

  • コマンド・プロシージャの終了,解釈,エラー処理

  • ログイン・コマンド・プロシージャ

DCL コマンド・プロシージャには,次の 2 種類があります。

  • 単純なプロシージャ
    作成された順に,一連の DCL コマンドを実行する。

  • 複雑なプロシージャ
    プログラムのような機能を実行する。



13.1 コマンド・プロシージャを作成するための基礎的な説明

コマンド・プロシージャを作成するには,次の 2 種類の方法があります。

  • EVE のようなテキスト・エディタを使用して,新しいファイルを作成する方法

  • DCL コマンド CREATE を使用して,新しいファイルを作成する方法

作成するファイルには,コマンド行,ラベル,コメント,条件文,変数を格納できます。

13.1.1 省略時のファイル・タイプ

コマンド・プロシージャの省略時のファイル・タイプは .COM です。コマンド・プロシージャの名前を指定するときに,ファイル・タイプとして .COM を指定した場合には,ファイル名を指定するだけで,コマンド・プロシージャを実行できます。 SUBMITコマンドとプロシージャ実行 (@) コマンドでは,特に指定した場合を除き,ファイル・タイプは .COM であるものと解釈されます。

13.1.2 コマンドの作成

コマンド・プロシージャにコマンドを登録する場合には,次のことに注意してください。

  • コマンドと修飾子の名前は完全に指定する。このようにすると, OpenVMS の将来のリリースに対して,コマンド・プロシージャの互換性を維持できる。

  • プロシージャを読みやすくするために,継続行を使用する。継続行の先頭には,ドル記号がない。次の例を参照。

    $ PRINT LAB.DAT   - 
         /AFTER=17:00 - 
         /COPIES=20   - 
         /NAME="COMGUIDE" 
    



13.1.3 コマンド行の作成

コマンド行を作成する場合には,次のことに注意してください。

  • コマンド,コメント,ラベルを指定する各行の先頭には,ドル記号 ($) を指定しなければならない。

  • データを含む行が必要な場合には,その行にはドル記号 ($) を指定しない。

  • ドル記号 ($) から始まるデータ行を指定しなければならない場合には,DCL コマンド DECK と EOD を使用する。次の例を参照。

          $ ! 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 コマンド・プロシージャでは,ループ,コード・セクション,サブルーチンの先頭をマークするためにラベルを使用します。ラベルを使用する場合には,次の規則に注意してください。

  • ループ,サブルーチン,条件コードをわかりやすく区別するために,ラベルは単独の行に指定する。

  • 255 文字以内のラベル名を使用し,名前の内部ではスペースを使用しない。

  • ラベルとコマンドの区別は,ラベルの場合は,ドル記号 ($) のすぐ後に指定し,コマンドの場合は,その前にスペースを指定することにより行う。

  • 各ラベルの最後にはコロンを指定する。

  • ラベルを削除することはできない。



13.2.1 ローカル・シンボル・テーブル内のラベル

コマンド・インタプリタがラベルを検出すると,ローカル・シンボル・テーブルの特殊なセクションにそのラベルが登録されます。ラベルのために使用できる容量は制限されています。コマンド・プロシージャで多くのシンボルを使用し,多くのラベルが含まれている場合には,コマンド・インタプリタはシンボル・テーブル空間をすべて使用してしまう可能性があり,エラー・メッセージが表示されます。この場合には,プロシージャに DELETE/SYMBOL コマンドを指定して,不要になったシンボルを削除します ( ただし,ラベルを削除することはできません )。

13.2.2 重複するラベル

コマンド・プロシージャで同じラベルを 2 回以上使用する場合には,ローカル・シンボル・テーブルの既存の定義は新しい定義に置き換えられます。

重複するラベルが存在する場合には,GOTO コマンドは, DCL が最後に処理したラベルに制御を渡します。また,GOTO コマンドは重複するラベルを処理するときに,次の規則も使用します。

  • 重複するラベルがすべて GOTO コマンドの前に指定されている場合には,制御は,GOTO コマンドにもっとも近いラベルに渡される。

  • 重複するラベルが GOTO コマンドの前と後に指定されている場合には,制御は,前に指定されているラベルのうち,GOTO コマンドにもっとも近いラベルに渡される。

  • 重複するラベルがすべて GOTO コマンドの後に指定されている場合には,制御は,GOTO コマンドにもっとも近いラベルに渡される。



13.3 コマンド・プロシージャでのコメントの使用

コマンド・プロシージャを作成する場合には,なるべくコメントを指定してください。コマンド・プロシージャを更新したり,問題を解決するときに,コメントが指定されていると役立ちます。コメントは次の方法で使用できます。

  • プロシージャの先頭で,プロシージャについて説明し,プロシージャに渡されるパラメータについても説明する。

  • 各コマンド・ブロックの先頭で,プロシージャのそのセクションについて説明する。

  • ドル記号 ($)と感嘆符 (!) をどちらも含む行で,コマンド・シーケンスを区切る。このようにすると,コマンド・プロシージャの概略がわかりやすくなる。ブランク行を挿入すると,コマンド・インタプリタはそれらの行をデータ行として解釈し,データ行が無視されたことを警告するメッセージが生成される。

コマンド・プロシージャにコメントを指定する場合には,次の規則が適用されます。

  • コメントの先頭を示すには,感嘆符 (!) を使用する。コマンド・プロシージャを実行する場合,コマンド・インタプリタは感嘆符の右側のすべてのテキストを無視する。

  • コマンド行にリテラルとして感嘆符を指定するときは,感嘆符を引用符で囲む (" ")。



13.4 コマンド・プロシージャの作成方法

コマンド・プロシージャの作成を開始する前に,コマンド・プロシージャが実行するタスクを会話形式で実行します。必要なコマンドを入力し,使用される変数と条件,および発生する会話を記録します。

これ以降の節では,簡単なコマンド・プロシージャの作成方法を説明します。これ以降で使用する例は,CLEANUP.COM というコマンド・プロシージャです。このコマンド・プロシージャは,ディレクトリを整理するために使用します。

定義

  • 変数
    タスクを実行するたびに変化するデータ

  • 条件
    変化する可能性のあるコマンドまたはコマンドの集合であり,タスクを実行するたびにテストしなければならない。

  • 繰り返し
    条件が満足されるまで繰り返し実行されるコマンドまたはコマンドの集合。



13.5 コマンド・プロシージャの作成手順

コマンド・プロシージャを作成するには,次の手順を実行します。

手順 操作
1 コマンド・プロシージャを設計する。
2 変数を割り当て,条件をテストする。
3 ループを追加する。
4 コマンド・プロシージャを終了する。
5 プログラム・ロジックをテストおよびデバッグする。
6 クリーアップ・タスクを追加する。
7 プロシージャを完成する。



13.5.1 手順 1: コマンド・プロシージャを設計する

コマンド・プロシージャを設計するには,次の操作を実行します。

手順 操作
1 プロシージャが実行するタスクを決定する。
2 コマンド・プロシージャが使用する変数と,その変数のロード方法を判断する。
3 コマンド・プロシージャが必要とする条件と,条件をテストする方法を判断する。
4 コマンド・プロシージャを終了する方法を決定する。

クリーンアップ操作で一般に実行される特定のコマンドがあります。次の表は,これらのコマンドと,そのコマンドが実行するタスクを示しています。

コマンド 実行するタスク
DIRECTORY カレント・ディレクトリの内容を表示する。
TYPE filespec ファイルを表示する。
PURGE filespec ファイルをパージする。
DELETE filespec ファイルを削除する。
COPY filespec new-filespec ファイルをコピーする。

変数

タスクを実行するときに変化するデータは変数です。ディレクトリにファイルを作成したり,ファイルを削除する場合には,ディレクトリを整理するたびに,ファイル名が異なります。したがって,CLEANUP.COM でファイル名は変数です。

条件

コマンド・プロシージャを実行するたびにテストしなければならないコマンドは,条件であると考えられます。 CLEANUP.COM のコマンドは,実行しなければならない操作に応じて,一部またはすべてが実行されるため,各コマンドは条件です。

設計の決定

CLEANUP.COM コマンド・プロシージャで使用する変数と条件を判断した後,変数のロード方法,条件のテスト方法,コマンド・プロシージャの終了方法を判断しなければなりません。 CLEANUP.COM コマンド・プロシージャの場合には,次の判断を下しました。

タスク 実現方法
変数のロード コマンド・プロシージャはターミナルからファイル名を入手する。
条件のテスト コマンド・プロシージャ:

  • ターミナルからコマンド名を入手し,コマンド名をもとにして適切な文を実行する。

  • DELETE コマンドと DIRECTORYコマンドを区別するために,各コマンド名の最初の 2 文字を確実に読み込む。

ループの終了 ループを終了するには,EXIT コマンドを入力しなければならない。

コマンド・プロシージャを理解しやすく,また管理しやすくするには,プロシージャが最初のコマンドから最後のコマンドへと順に実行されるように,文を作成しなければなりません。

13.5.2 手順 2: 変数を割り当て,条件をテストする

値を変数に割り当てるには,多くの方法があります。この節では,INQUIRE コマンドの使い方について説明します。他の方法については, 第 14 章 を参照してください。

値を変数に割り当て,条件をテストするには,次の操作を実行します。

手順 操作
1 INQUIRE コマンドを使用して,値を変数に割り当てる。
2 実行しなければならない処理を判断する。
3 IF 文と THEN 文を使用して条件をテストする。
4 プログラム・スタブを作成し,コマンドのプレースホルダとしてコマンド・プロシージャに挿入する。
5 必要に応じてエラー・メッセージを作成する。



INQUIRE コマンドは,値を要求するプロンプトを表示し,ターミナルから値を読み込み,その値をシンボルに割り当てます。

省略時の設定では,INQUIRE コマンドは次の操作を実行します。

  • 応答を大文字に変換する。

  • 複数のブランクとタブを 1 つのスペースに置換する。

  • 先頭と後続のスペースを削除する。

  • 応答にシンボルやレキシカル関数が含まれている場合には,引用符置換を実行する。

次の例は,コマンド・プロシージャCLEANUP.COM の中でコマンド名の入力を求めるコマンドです。 INQUIRE コマンドは入力された値をシンボル COMMANDに割り当てます。

$ INQUIRE COMMAND- 
  "Enter command (DELETE, DIRECTORY, PRINT, PURGE, TYPE)" 



INQUIRE コマンドを使用するときに,小文字や複数のスペースとタブを保存するには,応答を引用符 (" ") で囲みます。応答の内部で引用符を使用するときは,引用符で囲んだテキストを引用符で囲みます (""text"")。

INQUIRE コマンドで変数を要求するプロンプトを表示した後,どのような処理を実行するかを判断する文をコマンド・プロシージャに指定しなければなりません。たとえば,どのコマンドを実行するかを判断するには,ユーザが入力したコマンドを可能な各コマンドに対してチェックする文を,コマンド・プロシージャに指定しなければなりません。

条件が真であるかどうかをテストするには, IF コマンドと THEN コマンドを使用します。次の表は,CLEANUP.COM でチェックしなければならない可能性を示しています。

場合 結果
一致するものが見つかった場合 コマンドを実行する
一致するものが見つからない場合 次のコマンドに進む
有効なすべてのコマンドをチェックした後,一致するものが見つからない場合 エラー・メッセージを出力する


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.