[an error occurred while processing this directive]
HP OpenVMS Systems Documentation |
OpenVMS 用户手册
第 12 章
|
$ WORK :== SET DEFAULT DISK1:[JONES.WORK] $ WORK $ SHOW DEFAULT DISK1:[JONES.WORK] |
虽然逻辑名和符号类似,但它们的使用不同。以下表格比较逻辑名和符号的功能、使用和其他特征:
特征 | 逻辑名 | 符号 |
---|---|---|
功能 | 表示设备、目录、文件、队列和其他系统对象说明。 | 表示命令或部分命令串。 |
使用 | 用于代替任何完整的设备、目录、文件、队列或其他系统对象说明。逻辑名必须用作命令串参数的一部分,以便传送给文件系统翻译。 | 用于代替任何命令串。符号必须用作命令字符串中的第一个字,以便命令语言解释程序翻译。 |
存储 | 存储在进程、作业、组或系统逻辑名表内。请参阅 11.10 节。 | 存储在全局或局部符号表。请参阅 12.10 节。 |
建立 | 使用 ASSIGN 或 DEFINE 命令建立逻辑名。请参阅 11.3 节。 | 使用赋值语句 (= 或 ==) 建立符号。请参阅 12.2 节。 |
显示 | 使用 SHOW LOGICAL 或 SHOW TRANSLATION 命令显示逻辑名。请参阅 11.6 节。 | 使用 SHOW SYMBOL 命令显示符号。请参阅 12.3 节。 |
删除 | 使用 DEASSIGN 命令删除逻辑名。请参阅 11.4 节。 | 使用 DELETE/SYMBOL 命令删除符号。请参阅 12.2.5 节。 |
您可以建立两类符号,局部和全局。局部符号可从当前命令级和当前命令级执行的命令过程中存取。全局符号则可从所有命令级存取。
您可以用一个字符串、数、词法函数、逻辑值或另一个符号定义一个符号。符号名可以是 1 至 255 个字符长,并且必须开始是一个字母、下划线 (_) 或美元符 ($)。在符号名中,小写和大写字母都被处理为大写字母。
要建立一个符号,使用赋值语句 (= 或 ==) 或字符串赋值 (:= 或 ::=、=)。当使用字符串赋值时,所有字母字符被转换为大写字母,而多个空格和制表符被压缩为单个空格。可以使用字符串赋值来建立一个表示 DCL 命令或定义外部命令的符号 (注意,在任何一种情况下,都有 255 个字符长的限制)。要在一个字符串赋值中使字符串跨行,使用一个连字号。
您也可以使用 READ 和 INQUIRE 命令建立符号 (请参阅第 13 章和第 14 章)。
在以下例子中,局部符号 SS 被赋值为 DCL 命令 SHOW SYMBOL:
$ SS = "SHOW SYMBOL" |
在以下例子中,局部符号 DB 赋值为 DCL 命令 DIRECTORY ACCOUNTS:[BOLIVAR]:
$ DB := DIRECTORY ACCOUNTS:[BOLIVAR] |
在以下例子中,全局符号 DC 用来表示一个 DCL 命令行。当输入这个符号名时,DCL 命令 DIRECTORY 带指定限定词执行:
$ DC == "DIRECTORY/SIZE=ALL DISK1:[JONES.TAX]MONEY.LIS" |
在以下例子中,全局符号 READY 用来表示一个 DCL 命令行。当输入这个符号名时,DCL 命令 PRINT 带指定限定词执行:
$ READY :== PRINT/CONFIRM/QUEUE=AKI$LN03/NOTIFY/RESTART $ READY FILE.DAT |
您可以在注册命令文件 (LOGIN.COM) 或在 DCL 级交互地定义一个表示 DCL 命令的符号。在注册命令文件中定义符号时,就可以每次注册时使用这个符号;当您交互地定义符号时,只可以在当前进程期间使用这个符号。
如果定义的符号与 DCL 命令同名,您的定义将取代这个 DCL 命令名。例如,如果把符号 HELP 定义为命令 TYPE HELP.LST,那么键入
HELP 时就可以不再调用系统的 Help 公用程序。12.2.2 符号缩写
使用星号 (*) 建立一个可以缩写的符号。一般而言,可以在允许使用符号的任何情形下使用缩写符号定义。包括子串替换的符号是一个例外。有关详情,请参阅 12.6.5 节。
注意,现有的符号也许被取代。如果一个现有符号正确匹配带星号的新符号,那么新符号将替换现有的符号。另外,不能定义另一个其名称部分匹配于带星号的现有符号的符号。
以下例子建立局部符号 PRINT,它可以缩写为 PR、PRI 或 PRIN:
$ PR*INT = "PRINT/CONFIRM/QUEUE=AKI$LN03/NOTIFY/RESTART" |
要带指定限定词执行这个 DCL 命令 PRINT,可以输入这个符号或它的任何缩写。12.2.3 定义外部命令
如果把一个非 DCL 映象的文件说明等同于一个符号,键入这个符号名就可以运行这个映象。一个运行映象的符号被称为一个外部命令。外部命令是一个映象,它不被命令解释程序识别为 DCL 命令。(注意,象 DCL 命令一样,外部命令也有 255 个字符长的限制。)
把符号定义为外部命令的格式如下所示:
symbol-name :=[=] $image-file-spec
symbol-name =[=] "$image-file-spec"
注意,在符号定义的开始,美元符 ($) 在文件说明之前并且在美元符和文件说明之间不带任何空格时,意味着请求运行这个映象。
对于映象文件说明,默认设备和目录名是 SYS$SYSTEM,默认文件类型是 .EXE,而默认文件版本号是最高版本。
使用外部命令的另一个方法是使用 Command Definition 公用程序定义新命令。有关详情,请参阅 OpenVMS Command Definition, Librarian, and Message Utilities Manual。
也有自动执行外部命令的一种方法,不必指定符号。有关详情,请参阅 12.14 节。
在以下例子中,定义全局符号 PRINTALL 执行映象 DISK1:[ACCOUNTS]PRINTALL.EXE:
$ PRINTALL :== $[ACCOUNTS]PRINTALL |
在命令行中,PRINTALL 后面可以跟随一个参数。
在以下例子中,文件说明 RAT.DAT 是一个传送给 PRINTALL 定义的映象的参数:
$ PRINTALL RAT.DAT |
命令解释程序寻找括入省略号 (') 内的符号,并翻译它们。因而,如果使用前面加上省略号指定参数的符号或词法函数,就发生符号替换 (请参阅
12.12 节)。否则,命令解释程序不分析这一行。映象必须获得参数,并且执行命令行的任何分析或求值。12.2.5 删除符号
DELETE/SYMBOL 命令删除符号。要删除全局符号,可包括 /GLOBAL 限定词。例如,要删除全局符号 TEMP,输入以下命令:
$ DELETE/SYMBOL/GLOBAL TEMP |
SHOW SYMBOL 命令显示符号的值。要显示特定符号的值,输入 SHOW SYMBOL 命令,并且后面跟随这个符号的名称。要显示特定全局符号的值,要包括 /GLOBAL 限定词。SHOW SYMBOL/ALL 命令显示所有局部符号。命令 SHOW SYMBOL/ALL/GLOBAL 显示所有全局符号。
注意,当符号有整数值时,SHOW SYMBOL 命令以十进制、十六进制和八进制符号显示这个值。
在以下例子中,显示符号 PR:
$ SHOW SYMBOL PR PR*INT = "PRINT/CONFIRM/COPIES=2/QUEUE=DOC$LN03/NOTIFY/RESTART" |
在以下例子中,显示符号 TOTAL 的整数值:
$ SHOW SYMBOL TOTAL TOTAL = 4 Hex = 00000004 Octal = 00000000004 |
在定义了一个符号后,可以使用它作为另一个符号定义的一部分。DCL 把符号解释为一个字符串或一个数字,视使用符号的环境而定。
在以下例子中,整数值 3 赋值给符号 COUNT:
$ COUNT = 3 |
然后,COUNT 的值可以使用在其他赋值语句中。例如,这里把 COUNT 的值加 1:
$ TOTAL = COUNT + 1 |
结果 (4) 是等于符号 TOTAL。12.4.1 符号串联
使用加号 (+),可以把几个符号连接起来建立一个长字符串。使用省略号 (') 括住每个符号名,也可以连接两个或更多的符号。
有关请求符号替换的详情,请参阅 12.12.2 节。
在以下例子中,使用符号 "Saturday" 和 "Sunday" 建立符号 "WEEKEND":
$ DAY1 = "Saturday, " $ DAY2 = "Sunday" $ WEEKEND = DAY1 + DAY2 $ SHOW SYMBOL WEEKEND WEEKEND = "Saturday, Sunday" |
在以下例子中,省略号用来连接符号 NAME 和 TYPE:
$ NAME = "MYFILE" $ TYPE = ".DAT" $ PRINT 'NAME''TYPE' |
PRINT 命令打印 MYFILE.DAT 的一个副本。12.4.2 在字符串赋值中包括符号
要在字符串赋值中包括局部符号,使用一个冒号和一个等号 (:=)。要在字符串赋值中包括全局符号,使用一个冒号和两个等号 (:==)。对于任意一类符号 (局部或全局),把符号括入省略号 (' ') 内。否则,DCL 将不把它识别为符号。
在以下例子中,符号 COUNT 包括在一个字符串赋值语句中:
$ BARK := P'COUNT' |
在上一个例子中,COUNT 被赋值为整数值 3。在这个例子中,COUNT 被转换为一个字符串值,并且附加在字符 P 之后。局部符号 BARK 现在的值是 P3。
在以下例子中,符号 A 为空:
$ A = "" $ B = 2 $ C = A + B $ SHOW SYMBOL C C = 2 Hex = 00000002 Octal = 00000000002 |
在命令过程中,可以把符号用作变量。变量拥有您计算或分配不同于文字值的值。例如,可以把词法函数的值分配给变量,或者把文件记录的值读入变量。
表达式是值的混合。在命令过程中,表达式用于符号赋值语句 (在等号的右边)、IF 语句、WRITE 命令和词法函数的变元。
定义一个符号时,赋值语句的左边定义符号名;赋值语句的右边包含表达式。表达式中的每个值 (也称为操作数) 可以通过运算符连接到另一个值。DCL 求表达式的值,并把结果分配给符号。如果表达式求值为字符串,那么符号有字符串值。
在以下例子中,局部符号 BARK 等于一个加三个数的表达式:
$ BARK = 1 + 2 + 3 |
操作数是 1、2 和 3。运算符是加号 (+)。求值的表达式是整数,因而符号有一个整数值。12.6 字符串
字符串可以包含任何可以打印的字符。附录 A 包括 ASCII 字符集和 DEC 多国字符集的表。这些表列出可以在字符串中包括的字符。
字符主要分为三类:
字符 | 功能 |
---|---|
HT | 在下一个水平制表符开始打印或键入 |
LF | 在下一行开始打印或键入 |
FF | 在下一页顶部开始打印或键入 |
CR | 在同一行第一个空格处开始打印或键入 |
ESC | 引入终端换码符 |
SP | 插入一个空格 |
把一个字符串括入引号 (" ") 内可以定义它。按这种方法进行符号赋值时,保持字母大小写和空格。注意以下几点:
在以下例子中,字符串 "YES" 被引用,因而它必须在引号内定义:
$ PROMPT = "Type ""YES"" or ""NO""" $ SHOW SYMBOL PROMPT PROMPT = "Type "YES" or "NO"" |
在以下例子中,字符串跨行:
$ HEAD = "MONTHLY REPORT FOR" + - _$ " DECEMBER 1999" $ SHOW SYMBOL HEAD HEAD = "MONTHLY REPORT FOR DECEMBER 1999" |
字符串表达式可以包含字符串、求值为字符串的词法函数或有字符串值的符号。在表达式中使用字符串时,必须把它括入引号 (" ") 内。如果不使用引号,DCL 把字符串处理为符号。
字符串表达式结合以下值 (称为字符串操作数):
如果在一个字符串和一个数之间执行一个操作或比较,那么 DCL 将把字符串转换为一个数。
字符串操作数可以添加 (字符串串联)、减去 (字符串缩减)、比较或用其他字符串替换,如以下小节所述。
在以下例子中,字符串 "CAT" 必须出现在引号内:
$ TEMP = "CAT" |
在以下例子中,符号 TEMP 表示字符串 "CAT"。符号 TOPIC 是字符串 "THE" 和符号 TEMP 表示的字符串 ("CAT") 的串联。其结果是 "THE CAT"。
$ TOPIC = "THE" + TEMP |
在以下例子中,符号 COUNT 表示词法函数 F$STRING(65):
$ COUNT = F$STRING(65) |
可以指定以下字符串操作:
在以下例子中,加号 (+) 用来连接两个字符串:
$ COLOR = "light brown" $ WEIGHT = "30 lbs." $ DOG2 = "No tag, " + COLOR + ", " + WEIGHT $ SHOW SYMBOL DOG2 DOG2 = "No tag, light brown, 30 lbs." |
在以下例子中,减号 (-) 用来除去一个字符串:
$ SHOW SYMBOL DOG2 DOG2 = "No tag, light brown, 30 lbs." $ DOG2 = DOG2 - ", 30 lbs." $ SHOW SYMBOL DOG2 DOG2 = "No tag, light brown" |
前页 | 后页 | 目录 | 索引 |