Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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") - иметь к этому доступ - это привилегия.

См. Также [ править ]

  • Сравнение командных оболочек

Ссылки [ править ]

  1. ^ "Руководство по языку и инструментам программного обеспечения VAX / VMS" (PDF) . bitsavers.org . 1985 . Проверено 31 декабря 2020 .
  2. ^ a b «Руководство пользователя VSI OpenVMS» (PDF) . VSI. Июль 2020 . Проверено 27 января 2021 .
  3. ^ «Описание программного продукта и краткие спецификации - VSI OpenVMS версии 8.4-2L1 для серверов Integrity» (PDF) . VMS Software Inc. Июль 2019 . Проверено 2 января 2021 .
  4. ^ «Сравнение 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