OpenVMS中的DCL符号语法

时间:2011-07-04 07:42:33

标签: openvms dcl

我对OpenVMS的DCL中的一些语法感到困惑。例如,这些是困扰我的一些行:

$    wo = "write sys$output"

是否为write sys $ output创建符号wo

$ billing_run_number   == p1

p1是否在执行时将参数传递给.com文件?它可以提供多少个参数?

$ wo "BILLING_RUN_NUMBER   = ''billing_run_number'"

'abc'是否被符号abc的内容替换?为什么它''abc'而不是'abc'?我们可以使用“”吗?

$ if ((status .nes. "P") .and. (status .nes. "M")) .or. (ftp_status .nes. "Y")

.nes.是什么意思?等于?我也见过.ne。 ,.eqs。太。他们有什么不同?

为什么“和”和“或”被两个点包围? DCL特定的语法?

如果有任何易于理解的免费在线教程,那会不会很好。谢谢大家!

4 个答案:

答案 0 :(得分:5)

您可以在http://hp.com/go/vms

在线查找VMS文档

您要阅读的手册是http://h71000.www7.hp.com/doc/731final/documentation/pdf/ovms_731_users.pdf上的OpenVMS用户手册(特别是第2章)。

答案 1 :(得分:4)

从内存:$ wo = "write sys$output"如你所说,将wo指定为“write sys $ output”的别名,VMS相当于Unix stdout。

.nes.相比,

.ne.“不等于字符串”,这是一个数字“不等于”。

p1是您猜测的(第一个)参数。我不记得它是p1到p9还是更多,或者没有任意限制。 p0可能是程序名,就像Python的sys.argv [0]。

命令过程最多接受8个参数,称为P1 .. P8。

单引号(')插入以下变量名称,因此wo "BILLING_RUN_NUMBER = ''billing_run_number'"会输出,例如BILLING_RUN_NUMBER = '42',假设p1等于42.我不记得DCL究竟是怎么知道的当它看到一行中的两个单引号时......

官方咒语是''符号',用实际的DCL文本替换为符号的值

这将至少让你开始......大多数使用VMS的商店在3环活页夹中都有几百磅的文档。四处询问。

答案 2 :(得分:2)

除了上面提到的文档之外,还有大量信息可以通过HELP HINTS,HELP:=,HELP =和HELP @命令。我相信P9-P16可用于OpenVMS V8.4。

另外,要特别注意全局符号(用加倍等号{==或:==}定义)和局部符号(用单个等号{=或:=}定义)之间的区别。与区分大小写的语言一样,定义A = 1的符号与定义A == 1的符号不同,本地符号可以屏蔽对全局符号的引用 - 也有一些命令如READ和INQUIRE可以创建符号,但我认为它们永远是一个本地符号 - 验证,因为我在记忆中工作。\

命令SET SYMBOL / SCOPE [= {LOCAL | NOLOCAL},{GLOBAL | NOGLOBAL})也会影响您是否可以看到某些类型的符号。

一般情况下,尽可能使用本地符号 - 如果更高级别(调用)命令过程需要访问,或者如果需要在返回交互式DCL时仍然定义的符号,通常只需要全局符号 - 异常是你运行的任何程序,专门读取或写入或创建一个全局符号 - 很少见,但我遇到了一些。

答案 3 :(得分:1)

  

p1是传递给.com的参数   文件何时执行?多少   参数是否可以提供?

您最多可以传递8个参数。每一个都定义为P1,P2 ... P8

如果您需要8个以上的参数,可以使用

这样的技巧

@my_dcl“my_p1”“my_p2”“my_p3”“my_p4”“my_p5”“my_p6”“my_p7”“my_p8 my_p9 my_p10”

my_dcl中,P8将在一个字符串中包含“my_p8 my_p9 my_p10”的值。

  

$ wo“BILLING_RUN_NUMBER =   '' billing_run_number'“

     

'abc'是否被内容替代   符号abc?为什么''abc'   但不是'abc'?我们可以使用“”吗?

     

$ if((status .nes。“P”)。和。(状态   .nes。 “M”))。或。 (ftp_status .nes。   “Y”)

单引号意味着翻译字符串的内容。

因此,如果您定义wo = "write sys$output"

你可以使用

wo "Hello World!"

'wo "Hello World!"

但是如果你想展示write sys$output Hello World

怎么办?

如果你试试,

wo "'wo Hello World!"

你会得到'wo Hello World!

所以,你必须用单引号将它包围起来。

前两个是转义单引号,最后一个是停止翻译。

wo“''wo'Hello World!”


与其他脚本语言一样,您可以拥有变量...

var_hidden = "Hello world!"
my_var = "var_hidden"
wo 'my_var'

将打印Hello world!