OpenVMS Alpha 8.4-2L1, показывающий интерфейс командной строки DCL в терминальном сеансе | |
Парадигма | императив |
---|---|
Разработано | Корпорация цифрового оборудования [1] |
Разработчик | VMS Software Inc. (VSI) [2] |
Операционные системы | RSTS / E , RSX-11 , RT-11 , OpenVMS , VAXELN |
Под влиянием | |
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]
DCL, написанный в период интенсивного использования языка программирования Fortran , представляет собой язык сценариев, поддерживающий несколько типов данных , включая строки, целые числа , битовые массивы, массивы и логические значения, но не числа с плавающей запятой . Доступ к системным службам OpenVMS ( API ядра ) осуществляется через лексические функции , которые выполняют те же функции , что и их скомпилированные языковые аналоги, и позволяют скриптам получать информацию о состоянии системы. DCL включает IF-THEN-ELSE , доступ ко всем службам управления записями (RMS) типы файлов, включая потоковые, индексированные и последовательные, но, к сожалению, в них отсутствует конструкция DO-WHILE или другая конструкция цикла , требующая, чтобы вместо этого пользователи обходились операторами IF и GOTO -label.
DCL также доступен для других операционных систем, включая
- VCL и VX / DCL для Unix,
- VCL для MS-DOS , OS / 2 и Windows ,
- PC-DCL и Open DCL для Windows / Linux
- и Accelr8 DCL Lite для Windows. [4]
DCL - это основа языка XLNT , реализованная в Windows с помощью комбинации интерпретатора-IDE-WSH и возможностей CGI, распространяемых Advanced System Concepts Inc. с 1997 года.
Парсер командной строки [ править ]
Для реализации OpenVMS синтаксический анализатор командной строки представляет собой библиотеку времени выполнения ( CLI $ ), которая может быть скомпилирована в пользовательские приложения и, следовательно, обеспечивает согласованный интерфейс командной строки как для команд, поставляемых ОС, так и для команд, написанных пользователем. Командная строка должна начинаться с глагола, за которым следуют аргументы или квалификаторы (переключатели в терминологии Unix ), которые начинаются с символа '/'. В отличие от Unix (но похож на DOS), пробел перед '/' не требуется. Квалификаторы могут быть независимыми от позиции (встречающиеся где угодно в командной строке) или зависимыми от позиции, и в этом случае квалификатор влияет на параметр, который появляется после. Большинство квалификаторов не зависят от позиции. Требуется только первая наиболее значимая часть имени глагола и квалификатора. Пример команды ОС может выглядеть так:
установить audit / alarm / enable = ( авторизация , взлом = все ) показать устройство / файлы $ 1 $ DGA1424 :
Вторую команду show можно также ввести как:
sho dev $ 1 $ DGA1424: / fil
В то время как документация DCL обычно показывает все команды DCL в верхнем регистре, команды DCL нечувствительны к регистру и могут вводиться в верхнем, нижнем или смешанном регистре.
Некоторые реализации, такие как OpenVMS, использовали схему минимальной уникальности, позволяющую сокращать команды, в то время как другие, такие как RSX-11, позволяли сокращать команды минимум до трех символов.
В отличие от других систем, которые используют пути для поиска команд, DCL требует, чтобы команды определялись явно либо через определения CLD (определение языка команд), либо через внешний символ . Большинство команд OpenVMS определяются через файлы CLD; они компилируются CDU, утилитой определения команд, и добавляются в «таблицу» DCL - SYS $ LIBRARY: DCLTABLES.EXE по умолчанию, хотя процессы могут использовать свои собственные таблицы - и затем могут быть вызваны Пользователь. Например, определение команды FOO, которая принимает параметр "/ BAR" и реализуется образом SYS $ SYSEXE: FOO.EXE, может быть выполнено с файлом CLD, подобным следующему:
DEFINE ГЛАГОЛА FOO IMAGE "SYS $ SYSEXE: foo.exe" QUALIFIER BAR
Затем пользователь может ввести « FOO » или « FOO / BAR », и программа FOO будет запущена. Язык определения команд поддерживает множество типов параметров, например даты и спецификации файлов, и позволяет квалификатору изменять вызываемое изображение - например, «СОЗДАТЬ» для создания файла или «СОЗДАТЬ / КАТАЛОГ» для создания каталога. .
Другой (более простой, но менее гибкий) метод определения команд - через внешние команды . Это больше похоже на метод вызова программ в 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 : это пример использования глагола TYPE в языке DCL. $ ВЫХОД
Косвенная ссылка на переменную [ править ]
В DCL можно создавать массивы, на которые будут ссылаться переведенные символы. Это позволяет программисту создавать структуры данных произвольного размера, используя сами данные в качестве функции индексации.
$ i = 1 $ переменная 'i' = "синий" $ i = 2 $ переменная 'i' = "зеленый" $ j = 1 $ color = переменная 'j' $ rainbow 'color' = "красный" $ color = переменная 'i' $ rainbow 'color' = "желтый"
В этом примере переменной 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 .
- ^ a b «Руководство пользователя VSI OpenVMS» (PDF) . VSI. Июль 2020 . Проверено 27 января 2021 .
- ^ «Описание программного продукта и краткие спецификации - VSI OpenVMS версии 8.4-2L1 для серверов Integrity» (PDF) . VMS Software Inc. Июль 2019 . Проверено 2 января 2021 .
- ^ «Сравнение PC-DCL и Open DCL Lite» .
Сравнение PC-DCL Валентина и Accelr8 Open DCL Lite
Дальнейшее чтение [ править ]
- Пол К. Анагностопулос; Стив Хоффман (1998). Написание реальных программ в DCL (второе изд.). Цифровая пресса. ISBN 1-55558-191-9.
Внешние ссылки [ править ]
- Словарь VSI OpenVMS DCL: AM
- Словарь VSI OpenVMS DCL: NZ
- Архив DCL OpenVMS.org