Синтаксис символов DCL в OpenVMS
Я действительно смущен некоторым синтаксисом в DCL OpenVMS. Например, вот некоторые из строк, которые меня смутили:
$ wo = "write sys$output"
Создает ли это символ wo
для записи вывода sys$?
$ 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.
имею в виду? равны? Я также видел.не..eqs. тоже. Чем они отличаются?
Почему "и" и "или" окружены двумя точками? Специфичный для DCL синтаксис?
Было бы неплохо, если бы был бесплатный онлайн-учебник, который легко понять. Спасибо вам всем!
4 ответа
Документацию VMS можно найти в Интернете по адресу http://hp.com/go/vms
Руководство, которое вы хотите прочитать, - это руководство пользователя OpenVMS, которое можно найти по адресу http://h71000.www7.hp.com/doc/731final/documentation/pdf/ovms_731_users.pdf (в частности, глава 2).
Из памяти: $ wo = "write sys$output"
как вы говорите, присваивая wo в качестве псевдонима "write sys$output", VMS эквивалентно стандартному выводу Unix.
.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 знает, что делать, когда он видит две одинарные кавычки в строке, как это...
Официальным заклинанием является '' symbol '', чтобы фактический текст DCL заменялся значением символа
это поможет вам начать, по крайней мере... большинство магазинов, использующих VMS, имеют несколько сотен фунтов документации в 3-кольцевых папках. поспрашивать.
В дополнение к упомянутой выше документации имеется также обширная информация с помощью команд HELP HINTS, HELP:=, HELP = и HELP @. Я полагаю, что P9-P16 стал доступен с OpenVMS V8.4.
Кроме того, обратите особое внимание на разницу между глобальными символами (определенными двойным знаком равенства {== или:==}) и локальными символами (определенными единственным знаком равенства {= или:=}). Как и в чувствительных к регистру языках, символ, определенный A = 1, является другим символом, чем один определенный A == 1, и локальный символ может маскировать ссылки на глобальный символ - также некоторые команды, такие как READ и INQUIRE, могут создавать символы, но я думаю, что они всегда локальный символ - проверьте, так как я работаю из памяти.\
Команда SET SYMBOL /SCOPE[={LOCAL|NOLOCAL},{GLOBAL|NOGLOBAL}) также может влиять на то, видите ли вы символы определенных типов.
В общем, оставайтесь с локальными символами всякий раз, когда можете - обычно вам нужен только глобальный символ, если требуется доступ к (вызывающей) командной процедуре более высокого уровня, или если вам нужен символ, все еще определенный после возвращения в интерактивный DCL - исключением является любая программа что вы запускаете, который специально читает или пишет, или создает глобальный символ - редко, но я сталкивался с несколькими.
Является ли 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 ((статус.nes. "P") .and. (статус.nes. "M")) .or. (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'
напечатает Привет, мир!