HP OpenVMS Systems Documentation |
OpenVMS 用户手册
12.14.1 使用自动外部命令注意以下:
12.14.2 自动外部命令限制注意以下限制:
第 13 章
|
$ 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 正确地解释,但是 Compaq 强烈建议任何 DCL
命令行从一个美元符开始。13.2 在命令行中使用标号
在 DCL 命令过程中,标号用于标记循环、代码段或子例行程序的开始。使用标号时,注意以下规则:
当命令解释程序遇到标号时,它把标号放入局部符号表的特殊节。标号可用的空间是有限的。如果一个命令过程使用许多符号,并且包含许多标号,那么命令解释程序可能用完符号表的空间而发出一条出错消息。如果发生这种情况,就在您的过程中包括 DELETE/SYMBOL 命令删除不再需要的符号。(然而,要注意不能删除标号。)
13.2.2 重复标号
如果命令过程使用同一标号一次以上,新定义就会替换局部符号表中的现有一个。
当重复标号存在时,GOTO 命令把控制传递给 DCL 最近处理的标号。处理重复标号时,GOTO 命令也使用以下规则:
把注释包括在命令过程中是好的编程习惯。当更新命令过程或解决故障时,注释是有用的。注释用途如下:
在命令过程中编写注释时应用以下规则:
在开始编写命令过程之前,交互地执行命令过程将要执行的任务。键入必要的命令时,注意使用的任何变量和条件,和出现的任何循环。
以下几节包含编写简单命令过程的步骤。在这些节中使用的例子是命令过程 CLEANUP.COM。这个过程可以用来清除目录。
遵循以下步骤编写命令过程:
步骤 | 任务 |
---|---|
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 命令过程,作出以下决定:
任务 | 如何完成 |
---|---|
装入变量 | 命令过程从终端获得文件名。 |
测试条件 |
命令过程:
|
退出循环 | 必须输入 EXIT 命令退出循环。 |
要使命令过程易于理解和维护,编写语句时使过程的执行从第一个命令到最后一个命令。
13.5.2 第 2 步: 变量赋值和条件测试
有许多方法赋值给变量。本节论述如何使用 INQUIRE 命令。有关其他方法,请参阅第 14 章。
遵循以下步骤赋值给变量和测试条件:
步骤 | 任务 |
---|---|
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"")
内。
13.5.2.3 使用 IF 和 THEN 测试条件
在 INQUIRE 命令提示输入变量后,命令过程必须包括一个语句确定要采取什么动作。例如,要确定执行哪个命令,必须在命令过程中包括一些语句,从每个可能命令中识别用户输入的命令。
要测试一个条件是否为真,使用 IF 和 THEN 命令。下表展示必须在 CLEANUP.COM 中检查的可能性:
If... | Then... |
---|---|
找到一个匹配, | 执行这个命令。 |
没有找到一个匹配, | 继续下一个命令。 |
在检查所有有效命令后没有找到一个匹配, | 输出一条出错消息。 |
程序桩是一个在测试设计时过程中使用的临时代码段。通常,程序桩输出一条消息声明它替换的函数。在全部设计工作都正确后,用正确的编码替换每个桩。
以下例子展示如何赋值变量和测试条件:
$ INQUIRE COMMAND- "Enter command (DELETE, DIRECTORY, EXIT, PRINT, PURGE, TYPE)" $ IF COMMAND .EQS. "EXIT" THEN EXIT $! $! Execute if user entered DELETE $ DELETE: $ IF COMMAND .NES "DELETE" THEN GOTO DIRECTORY (1) (2) $ WRITE SYS$OUTPUT "This is the DELETE section." (3) $! Execute if user entered DIRECTORY $ DIRECTORY: (4) $ IF COMMAND .NES "DIRECTORY" THEN GOTO PRINT $ WRITE SYS$OUTPUT "This is the DIRECTORY section." . . . $! Execute if user entered TYPE $ TYPE: $ IF COMMAND .NES "TYPE" THEN GOTO ERROR (5) $ WRITE SYS$OUTPUT "This is the TYPE section." $! $ ERROR: $ WRITE SYS$OUTPUT "You have entered an invalid command." (6) $! $ EXIT |
当您检查这个例子时,注意以下各点:
前页 | 后页 | 目录 | 索引 |