Jump to content United States-English
HP.com Home Products and Services Support and Drivers Solutions How to Buy
» Contact HP
HP.com home

HP OpenVMS Systems Documentation

Content starts here

OpenVMS 用户手册


前页 目录 索引


第 12 章
定义符号、命令和表达式

符号是表示数字、字符或逻辑值 (例如真或假) 的名称。在 DCL 命令行中使用一个符号时,DCL 在执行这个命令之前用它的值替换符号。

输入包括参数、多个限定词和值的 DCL 命令行可能需要很多键入并且可能耗费很多时间。要简化与 DCL 的交互并节省时间,可以建立符号来代替频繁地键入命令。

您也可以在命令过程中使用符号来收集、存储和处理某些类型的数据。有关命令过程的详情,请参阅第 13 章第 14 章

本章描述:

  • 使用符号
  • 显示符号
  • 与其他符号一起使用符号
  • 使用符号存储和处理数据
  • 字符串
  • 使用数值和表达式
  • 使用逻辑值和表达式
  • 在表达式中转换值的类型
  • 理解符号表
  • 屏蔽符号值
  • 理解符号替换
  • 命令处理程序的三个阶段
  • 使用符号的备用方法: 自动外部命令

有关详情,请参阅以下:

  • OpenVMS DCL Dictionary,有关符号和使用的详情
  • OpenVMS Command Definition, Librarian, and Message Utilities Manual,有关定义新命令的详情

12.1 关于符号

您可以用以下方法使用符号:

  • 作为命令、参数或命令行的同义词。代替键入长命令行,您可以建立代替使用的符号。
  • 定义一个外部命令,允许您只输入符号名就可执行一个映象。该命令是 "外部的",因为对于 DCL 来说,它是未知的。
  • 在命令过程文件中,执行编程任务,如条件执行和变量替换。
    可以使用符号作为表达式中的变量,或者传送参数给命令过程和从命令过程传回。另外,DCL 命令 (如 READ、WRITE 和 INQUIRE) 可使用符号引用数据记录。

在以下例子中,建立一个符号,并把它设置为经常存取的默认目录。这些命令展示如何定义和使用符号 WORK 把默认目录设置为 WORK1:[JONES.WORK] 目录:


$  WORK :== SET DEFAULT DISK1:[JONES.WORK]
$  WORK
$  SHOW DEFAULT
   DISK1:[JONES.WORK]

12.1.1 比较逻辑名和符号

虽然逻辑名和符号类似,但它们的使用不同。以下表格比较逻辑名和符号的功能、使用和其他特征:

特征 逻辑名 符号
功能 表示设备、目录、文件、队列和其他系统对象说明。 表示命令或部分命令串。
使用 用于代替任何完整的设备、目录、文件、队列或其他系统对象说明。逻辑名必须用作命令串参数的一部分,以便传送给文件系统翻译。 用于代替任何命令串。符号必须用作命令字符串中的第一个字,以便命令语言解释程序翻译。
存储 存储在进程、作业、组或系统逻辑名表内。请参阅 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 节

12.2 使用符号

您可以建立两类符号,局部和全局。局部符号可从当前命令级和当前命令级执行的命令过程中存取。全局符号则可从所有命令级存取。

您可以用一个字符串、数、词法函数、逻辑值或另一个符号定义一个符号。符号名可以是 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

12.2.1 使用符号表示 DCL 命令

您可以在注册命令文件 (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.2.4 符号替换

命令解释程序寻找括入省略号 (') 内的符号,并翻译它们。因而,如果使用前面加上省略号指定参数的符号或词法函数,就发生符号替换 (请参阅 12.12 节)。否则,命令解释程序不分析这一行。映象必须获得参数,并且执行命令行的任何分析或求值。

12.2.5 删除符号

DELETE/SYMBOL 命令删除符号。要删除全局符号,可包括 /GLOBAL 限定词。例如,要删除全局符号 TEMP,输入以下命令:


$ DELETE/SYMBOL/GLOBAL TEMP

12.3 显示符号

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

12.4 与其他符号一起使用符号

在定义了一个符号后,可以使用它作为另一个符号定义的一部分。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 将不把它识别为符号。

如果为一个符号定义一个空字符串,那么这个符号的值是 0。

在以下例子中,符号 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

12.5 使用符号存储和处理数据

在命令过程中,可以把符号用作变量。变量拥有您计算或分配不同于文字值的值。例如,可以把词法函数的值分配给变量,或者把文件记录的值读入变量。

表达式是值的混合。在命令过程中,表达式用于符号赋值语句 (在等号的右边)、IF 语句、WRITE 命令和词法函数的变元。

定义一个符号时,赋值语句的左边定义符号名;赋值语句的右边包含表达式。表达式中的每个值 (也称为操作数) 可以通过运算符连接到另一个值。DCL 求表达式的值,并把结果分配给符号。如果表达式求值为字符串,那么符号有字符串值。

在以下例子中,局部符号 BARK 等于一个加三个数的表达式:


$ BARK = 1 + 2 + 3

操作数是 1、2 和 3。运算符是加号 (+)。求值的表达式是整数,因而符号有一个整数值。

12.6 字符串

字符串可以包含任何可以打印的字符。附录 A 包括 ASCII 字符集和 DEC 多国字符集的表。这些表列出可以在字符串中包括的字符。

字符主要分为三类:

  • 字母数字字符
    大写字母 A 至 Z、小写字母 a 至 z、数字 1 至 9、美元符 ($)、下划线 (_) 和连字号 (-)。
  • 特殊字符
    所有可以显示或打印的其他字符: 感叹号 (!)、引号 (")、数字符号 (#),等等。
  • 不可打印的字符
    所有不能打印或显示的字符。一般而言,显示和打印时,忽略不可打印的字符。然而,有几个不可打印的字符具有控制功能,如下所示:
    字符 功能
    HT 在下一个水平制表符开始打印或键入 
    LF 在下一行开始打印或键入
    FF 在下一页顶部开始打印或键入
    CR 在同一行第一个空格处开始打印或键入
    ESC 引入终端换码符
    SP 插入一个空格

12.6.1 定义字符串

把一个字符串括入引号 (" ") 内可以定义它。按这种方法进行符号赋值时,保持字母大小写和空格。注意以下几点:

  • 要在字符串内包括引号 ("),键入两个连续引号。
  • 要使字符串跨行,使用一个加号 (用于字符串串联) 和一个连字号 (用于续行)。
    在引用的字符串内,不能使用连字号续行字符。

在以下例子中,字符串 "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"

12.6.2 字符串表达式

字符串表达式可以包含字符串、求值为字符串的词法函数或有字符串值的符号。在表达式中使用字符串时,必须把它括入引号 (" ") 内。如果不使用引号,DCL 把字符串处理为符号。

字符串表达式结合以下值 (称为字符串操作数):

  • 必须出现在引号内的字符串
  • 表示字符串的符号
  • 求值为字符串的词法函数

如果在一个字符串和一个数之间执行一个操作或比较,那么 DCL 将把字符串转换为一个数。

字符串操作数可以添加 (字符串串联)、减去 (字符串缩减)、比较或用其他字符串替换,如以下小节所述。

在以下例子中,字符串 "CAT" 必须出现在引号内:


$  TEMP = "CAT"

在以下例子中,符号 TEMP 表示字符串 "CAT"。符号 TOPIC 是字符串 "THE" 和符号 TEMP 表示的字符串 ("CAT") 的串联。其结果是 "THE CAT"。


$  TOPIC = "THE" + TEMP

在以下例子中,符号 COUNT 表示词法函数 F$STRING(65):


$  COUNT = F$STRING(65)

12.6.3 字符串操作

可以指定以下字符串操作:

  • 串联 --- 加号连接两个字符串。
  • 缩减 --- 减号从第一个字符串除去第二个字符串。
    如果第二个字符串在第一个字符串中出现一次以上,那么只除去这个字符串的第一次出现。

在以下例子中,加号 (+) 用来连接两个字符串:


$ 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"


前页 后页 目录 索引

 

** About PDF files: The PDF files on this Web site can be read online or printed using Adobe® Acrobat® Reader. If you do not have this software installed on your system, you may download it from the Adobe Web site.
Privacy statement Using this site means you accept its terms Feedback to webmaster
© 2009 Hewlett-Packard Development Company, L.P.