Lenguaje de comandos DIGITAL - DIGITAL Command Language

Lenguaje de comandos DIGITAL
Openvms-8.4-2L1-dcl.png
OpenVMS Alpha 8.4-2L1, que muestra la CLI de DCL en una sesión de terminal
Paradigma imperativo
Diseñada por Corporación de equipos digitales
Desarrollador VMS Software Inc. (VSI)
SO RSTS / E , RSX-11 , RT-11 , OpenVMS , VAXELN , MICA
Influenciado
Windows PowerShell

DIGITAL Command Language ( DCL ) es el lenguaje de comandos estándar adoptado por la mayoría de los sistemas operativos vendidos por la antigua Digital Equipment Corporation . DCL tiene sus raíces en IAS , TOPS-20 y RT-11 y se implementó como estándar en la mayoría de los sistemas operativos de Digital, en particular RSX-11 y RSTS / E , pero tomó su forma más poderosa en VAX / VMS (más tarde OpenVMS ). DCL continúa siendo desarrollado por VSI como parte de OpenVMS.

Escrito cuando el lenguaje de programación Fortran estaba en uso intensivo, DCL es un lenguaje de scripting que admite varios tipos de datos , incluidas cadenas, enteros , matrices de bits , matrices y booleanos, pero no números de punto flotante . El acceso a los servicios del sistema OpenVMS ( API del kernel ) se realiza a través de funciones léxicas , que realizan lo mismo que sus contrapartes en el lenguaje compilado y permiten que los scripts obtengan información sobre el estado del sistema. DCL incluye IF-THEN-ELSE , acceso a todos los tipos de archivos de Record Management Services (RMS), incluidos stream, indexados y secuenciales, pero desafortunadamente carece de DO-WHILE u otra construcción de bucle , lo que requiere que los usuarios se las arreglen con IF y GOTO - etiquetas de declaraciones en su lugar.

DCL también está disponible para otros sistemas operativos, incluidos

DCL es la base del lenguaje XLNT , implementado en Windows mediante una combinación de motor intérprete-IDE-WSH con capacidades CGI distribuidas por Advanced System Concepts Inc. desde 1997.

Analizador de línea de comandos

Para la implementación de OpenVMS, el analizador de línea de comandos es una biblioteca en tiempo de ejecución ( CLI $ ) que se puede compilar en aplicaciones de usuario y, por lo tanto, proporciona una interfaz de línea de comandos coherente para los comandos proporcionados por el sistema operativo y los comandos escritos por el usuario. La línea de comando debe comenzar con un verbo y luego es seguida por hasta 8 parámetros (argumentos) y / o calificadores (modificadores en terminología Unix ) que comienzan con un carácter '/'. A diferencia de Unix (pero similar a DOS ), no se requiere un espacio antes de la '/'. Los calificadores pueden ser independientes de la posición (que ocurren en cualquier lugar de la línea de comando) o dependientes de la posición, en cuyo caso el calificador afecta al parámetro que aparece después. La mayoría de los clasificados son independientes de la posición. A los calificadores también se les pueden asignar valores o una serie de valores. Solo se requiere la primera parte más significativa del verbo y el nombre del calificador. Los parámetros pueden ser números enteros o texto alfanumérico.

Un ejemplo de comando del sistema operativo puede verse así:

    set audit /alarm /enable=(authorization, breakin=all)
    show device /files $1$DGA1424:

El segundo comando show también se puede escribir como:

   sho dev $1$DGA1424:/fil

Si bien la documentación DCL generalmente muestra todos los comandos DCL en mayúsculas, los comandos DCL no distinguen entre mayúsculas y minúsculas y pueden escribirse en mayúsculas, minúsculas o con una combinación de mayúsculas y minúsculas.

Algunas implementaciones, como OpenVMS, utilizaban un esquema de unicidad mínimo para permitir que los comandos se acortaran, mientras que otras, como RSX-11, permitían que los comandos se abreviaran a un mínimo de tres caracteres.

A diferencia de otros sistemas que utilizan rutas para localizar comandos, DCL requiere que los comandos se definan explícitamente, ya sea a través de definiciones CLD (Definición del lenguaje de comandos) o un símbolo foráneo . La mayoría de los comandos nativos de OpenVMS se definen mediante archivos CLD; Estos son compilados por la CDU, la Utilidad de definición de comandos, y agregados a una 'tabla' DCL - SYS $ LIBRARY: DCLTABLES.EXE de forma predeterminada, aunque los procesos son libres de usar sus propias tablas y luego pueden ser invocados por el usuario . Por ejemplo, definir un comando FOO que acepte la opción "/ BAR" y sea implementado por la imagen SYS $ SYSEXE: FOO.EXE podría hacerse con un archivo CLD similar a:

 DEFINE VERB FOO
    IMAGE "SYS$SYSEXE:FOO.EXE"
    QUALIFIER BAR

A continuación, el usuario puede escribir " FOO " o " FOO / BAR " y se invocará el programa FOO. El lenguaje de definición de comandos admite muchos tipos de opciones, por ejemplo, fechas y especificaciones de archivo, y permite que un calificador cambie la imagen invocada, por ejemplo, "CREAR", para crear un archivo, frente a "CREAR / DIRECTORIO" para crear un directorio.

El otro método (más simple, pero menos flexible) para definir comandos es a través de comandos externos . Esto es más parecido al método Unix de invocar programas. Al dar el comando:

 foo :== $sys$sysexe:foo.exe

el comando 'FOO' invocará FOO.EXE y proporcionará cualquier argumento adicional literalmente al programa, por ejemplo, "foo -v". Este método se usa generalmente para programas portados desde Unix y otros sistemas no nativos; para programas en C que utilizan la sintaxis de comandos argc y argv.

Las versiones de OpenVMS DCL que comienzan con V6.2 admiten el nombre lógico DCL $ PATH para establecer rutas de comandos de estilo Unix. Este mecanismo se conoce como comando externo automático. DCL $ PATH permite especificar una lista de directorios, y luego estos directorios se buscan para procedimientos de comando DCL ( comando .COM) y luego imágenes ejecutables ( comando .EXE) con nombres de archivo que coincidan con el comando que ingresó el usuario. Al igual que los comandos externos tradicionales, los comandos externos automáticos también permiten la entrada de comandos al estilo Unix.

Scripting

Las secuencias de comandos DCL se parecen mucho a cualquier otro lenguaje de secuencias de comandos, con algunas excepciones. Todos los verbos DCL de una secuencia de comandos están precedidos por un símbolo $; otras líneas se consideran entradas del comando anterior. Por ejemplo, para usar el comando TIPO para imprimir un párrafo en la pantalla, se puede usar un guión similar a:

$ TYPE SYS$INPUT:
This is an example of using the TYPE verb
in the DCL language.
$ EXIT

Referenciación de variables indirectas

Es posible construir matrices en DCL a las que se hace referencia mediante símbolos traducidos. Esto permite al programador construir estructuras de datos de tamaño arbitrario utilizando los datos en sí como una función de indexación.

$ i = 1
$ variable'i' = "blue"
$ i = 2 
$ variable'i' = "green"
$ j = 1
$ color = variable'j'
$ rainbow'color' = "red"
$ color = variable'i'
$ rainbow'color' = "yellow"

En este ejemplo, a la variable rainbowblue se le asigna el valor "rojo" y al rainbowgreen se le asigna el valor "amarillo".

Comandos

La siguiente es una lista de comandos DCL para tareas informáticas comunes que son compatibles con la interfaz de línea de comandos OpenVMS .

Funciones léxicas

Las funciones léxicas proporcionan funciones de cadena y acceso a datos mantenidos por VMS.

Algunos léxicos son:

  • F$EXTRACT(start,length,string) - extraer una subcadena
  • F$CVTIME - obtener información de fecha / hora, p. Ej.
    YEST_DOW=F$EXTRACT(0,3,F$CVTIME(DATE_EXPR,,"WEEKDAY"))
  • F$ELEMENT(0," ",ABC_DEF) - porque ABC_DEF = "ABC DEF" volvería "ABC"
  • F$SEARCH - busca un archivo, devuelve un valor nulo ("") si no se encuentra
  • F$LOCATE(needle,haystack)
  • F$SetPRV("BYPASS,CMKRNL,ALTPRI") - Es un privilegio tener acceso a esto.

Ver también

Referencias

Otras lecturas

  • Paul C. Anagnostopoulos; Steve Hoffman (1998). Redacción de programas reales en DCL (Segunda ed.). Prensa digital. ISBN   1-55558-191-9 .

enlaces externos