ЦИФРОВОЙ командный язык
![]() OpenVMS Alpha 8.4-2L1, показывающий интерфейс командной строки DCL в терминальном сеансе. | |
Парадигма | императив |
---|---|
Разработано | Корпорация цифрового оборудования [1] |
Разработчик | VMS Software Inc. (VSI) [2] |
ТЫ | RSTS/E , RSX-11 , RT-11 , OpenVMS , VAXELN , MICA |
Под влиянием | |
Windows PowerShell |
DIGITAL Command Language ( DCL ) — это стандартный командный язык , принятый во многих операционных системах, созданных Digital Equipment Corporation . DCL берет свое начало в IAS , TOPS-20 и RT-11 и был реализован в качестве стандарта в большинстве операционных систем Digital, особенно в RSX-11 и RSTS/E , но наиболее мощную форму принял в VAX/VMS (позже OpenVMS ). ). DCL продолжает разрабатываться VSI как часть OpenVMS. [3]
Написанный в период языка программирования Fortran интенсивного использования , DCL представляет собой язык сценариев , поддерживающий несколько типов данных , включая строки, целые числа , битовые массивы, массивы и логические значения, но не с плавающей запятой числа . Доступ к OpenVMS системным сервисам ( ядра API ) осуществляется через лексические функции , которые выполняют то же самое, что и их скомпилированные языковые аналоги, и позволяют сценариям получать информацию о состоянии системы. DCL включает IF-THEN-ELSE , доступ ко всем типам файлов Службы управления записями (RMS), включая потоковые, индексированные и последовательные, но не имеет DO-WHILE или другой конструкции цикла , требующей от пользователей обходиться метками IF и GOTO . вместо этого заявления.
DCL доступен и для других операционных систем, включая
- VCL и VX/DCL для Unix,
- VCL для MS-DOS , OS/2 и Windows ,
- ПК-ДКЛ [4] и Open DCL для Windows/Linux
- и Accelr8 DCL Lite для Windows. [5]
DCL является основой языка XLNT , реализованного в Windows с помощью комбинации интерпретатора-IDE-WSH с возможностями CGI, распространяемой Advanced System Concepts Inc. с 1997 года.
Парсер командной строки
[ редактировать ]Для реализации OpenVMS анализатор командной строки представляет собой библиотеку времени выполнения ( CLI$ ), который может быть скомпилирован в пользовательские приложения и, следовательно, предоставляет согласованный интерфейс командной строки как для команд, предоставляемых ОС, так и для команд, написанных пользователем. Командная строка должна начинаться с глагола, за которым следуют до 8 параметров (аргументов) и/или квалификаторов (переключателей в терминологии Unix ), которые начинаются с символа «/». В отличие от Unix (но похоже на DOS ), пробел перед '/' не требуется. Квалификаторы могут быть независимыми от позиции (встречаться в любом месте командной строки) или зависеть от позиции, и в этом случае квалификатор влияет на параметр, после которого он появляется. Большинство квалификаторов не зависят от позиции. Квалификаторам также могут быть присвоены значения или серия значений. Требуется только первая наиболее значимая часть имени глагола и определителя. Параметры могут быть целыми числами или буквенно-цифровым текстом.
Пример команды ОС может выглядеть так:
set audit /alarm /enable=(authorization, breakin=all)
show device /files $1$DGA1424:
Вторую команду show также можно ввести так:
sho dev $1$DGA1424:/fil
Хотя в документации DCL все команды DCL обычно показаны в верхнем регистре, команды DCL нечувствительны к регистру и могут вводиться в верхнем, нижнем или смешанном регистре.
Некоторые реализации, такие как OpenVMS и RSX, использовали схему минимальной уникальности, позволяющую сокращать команды.
В отличие от других систем, которые используют пути для поиска команд, DCL требует, чтобы команды были определены явно либо через определения CLD (определение командного языка), либо через внешний символ . Большинство собственных команд OpenVMS определяются через файлы CLD; они компилируются CDU, утилитой определения команд, и добавляются в «таблицу» DCL — SYS$LIBRARY:DCLTABLES.EXE
по умолчанию, хотя процессы могут использовать свои собственные таблицы, а затем могут быть вызваны пользователем. Например, определение команды FOO, которая принимает параметр «/BAR» и реализуется изображением. SYS$SYSEXE:FOO.EXE
можно сделать с помощью файла CLD, подобного:
DEFINE VERB FOO
IMAGE "SYS$SYSEXE:FOO.EXE"
QUALIFIER BAR
Затем пользователь может ввести " ФУ ", или " FOO/BAR ", и будет вызвана программа FOO. Язык определения команд поддерживает множество типов параметров, например даты и спецификации файлов, а также позволяет квалификатору изменять вызываемое изображение, например " CREATE ", чтобы создать файл, а не " CREATE/DIRECTORY », чтобы создать каталог.
Другой (более простой, но менее гибкий) метод определения команд — через внешние команды . Это больше похоже на метод вызова программ в Unix. Дав команду:
foo :== $sys$sysexe:foo.exe
команда «FOO» вызовет FOO.EXE и буквально передаст программе любые дополнительные аргументы, например: « foo -v
". Этот метод обычно используется для программ, портированных из Unix и других неродных систем; для программ C, использующих синтаксис команд argc и argv.
Версии OpenVMS DCL, начиная с V6.2, поддерживают DCL$PATH логическое имя для установления путей команд в стиле Unix. Этот механизм известен как автоматическое внешнее командование. DCL$PATH позволяет указать список каталогов, и в этих каталогах затем осуществляется поиск командных процедур DCL ( команда .COM), а затем исполняемых образов ( команда .EXE) с именами файлов, соответствующими команде, введенной пользователем. Как и традиционные внешние команды, автоматические внешние команды также допускают ввод команд в стиле Unix.
Сценарии
[ редактировать ]Сценарии DCL очень похожи на любой другой язык сценариев, за некоторыми исключениями. Всем глаголам DCL в сценарии предшествует символ $; остальные строки считаются входными для предыдущей команды. Например, чтобы использовать команду TYPE для печати абзаца на экране, можно использовать сценарий, аналогичный:
$ TYPE SYS$INPUT:
This is an example of using the TYPE verb
in the DCL language.
$ EXIT
Косвенное обращение к переменной
[ редактировать ]В DCL можно создавать массивы, на которые ссылаются через преобразованные символы. Это позволяет программисту создавать структуры данных произвольного размера, используя сами данные в качестве функции индексации.
$ i = 1
$ variable'i' = "blue"
$ i = 2
$ variable'i' = "green"
$ j = 1
$ color = variable'j'
$ rainbow'color' = "red"
$ color = variable'i'
$ rainbow'color' = "yellow"
В этом примере переменная Rainbowblue присваивается значение «красный», а Rainbowgreen присвоено значение «желтый».
Команды
[ редактировать ]Ниже приведен список команд DCL для распространенных вычислительных задач, которые поддерживаются интерфейсом командной строки OpenVMS . [2]
- КОПИРОВАТЬ
- КОПИРОВАНИЕ/FTP
- СОЗДАВАТЬ
- УДАЛИТЬ
- СПРАВОЧНИК
- РЕДАКТИРОВАТЬ
- ВЫХОД
- ПЕЧАТЬ
- ПЕРЕИМЕНОВАТЬ
- НАБОР
- ПОКАЗЫВАТЬ
- ТИП
Лексические функции
[ редактировать ]Лексические функции предоставляют строковые функции и доступ к данным, поддерживаемым VMS.
Некоторые лексики:
F$EXTRACT(start,length,string)
— извлечь подстрокуF$CVTIME
— получить информацию о дате/времени, напримерYEST_DOW=F$EXTRACT(0,3,F$CVTIME(DATE_EXPR,,"WEEKDAY"))
F$ELEMENT(0," ",ABC_DEF)
- дляABC_DEF = "ABC DEF"
вернусь"ABC"
F$SEARCH
— ищет файл, возвращает ноль («»), если не найденF$LOCATE(needle,haystack)
F$SetPRV("BYPASS,CMKRNL,ALTPRI")
— иметь к этому доступ — это привилегия.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Справочник по языку и инструментам программного обеспечения VAX/VMS» (PDF) . bitsavers.org . 1985 год . Проверено 31 декабря 2020 г.
- ^ Jump up to: а б «Руководство пользователя VSI OpenVMS» (PDF) . ВСИ. июль 2020 года . Проверено 27 января 2021 г.
- ^ «Описание программного продукта и краткие характеристики — VSI OpenVMS версии 8.4-2L1 для серверов Integrity» (PDF) . VMS Software Inc. Июль 2019 г. Проверено 02 января 2021 г.
- ^ «Мишель Валентин/PC-DCL» . Гитхаб . 29 мая 2022 г.
- ^ «Сравнение PC-DCL и Open DCL Lite» .
Сравнение PC-DCL Валентина и Accelr8 Open DCL Lite
Дальнейшее чтение
[ редактировать ]- Пол К. Анагностопулос; Стив Хоффман (1998). Написание реальных программ в DCL (второе изд.). Цифровая пресса. ISBN 1-55558-191-9 .