Asignatura: Entornos de programación

Lenguajes de guiones (Scripting languages)

Lenguaje de órdenes de Windows NT/2000/XP


En este tema se introducen los lenguajes de "guiones" en el contexto de los lenguajes de programación en general. Como caso concreto se introduce el lenguaje de órdenes de MS-DOS/Windows.

Los lenguajes de guiones no son un elemento propio de los entornos de programación. La razón de dedicarles un tema en esta asignatura es porque se necesita manejar algún lenguaje de este tipo para realizar parte de los ejercicios prácticos, y que los alumnos pueden no conocerlo suficientemente al matricularse de esta asignatura.

La descripción del lenguaje de órdenes de MS-DOS/Windows sólo muestra una parte de sus posibilidades. Los elementos que se mencionan son suficientes para realizar las prácticas de la asignatura.


Contenido

  1. Grupos de lenguajes de programación
  2. Lenguajes de órdenes
  3. El lenguaje de órdenes de WinNT
    1. Sintaxis general
    2. Ejemplo: imprimir serie de Fibonacci
    3. Ayuda en línea
    4. Orden ECHO
    5. Orden EXIT
    6. Ejecución de programas u otros guiones
    7. Acceso a los argumentos o parámetros
    8. Redirección de los canales estándar de Entrada/Salida
    9. Entorno o contexto de ejecución (variables, directorio actual)
    10. Estructuras de control: órdenes condicionales
    11. Estructuras de control: bucles
    12. Manejo de ficheros
    13. "Expansión" de parámetros y variables
    14. Ayuda para la interacción

Grupos de lenguajes de programación

Desde cierto punto de vista se pueden clasificar los lenguajes de programación en:

  1. Lenguajes para programación de sistemas (en inglés: System programming languages)
    • En general son rigurosos, seguros y eficientes
    • Facilitan y/o exigen cierta disciplina de programación
    • Son adecuados para desarrollar programas complicados
    • Suelen tener buenos mecanismos para definir tipos de datos
    • Suelen procesarse mediante compiladores
  2. Lenguajes de guiones o scripts (en inglés: Scripting languages)
    • En general son permisivos, menos seguros y menos eficientes que los anteriores
    • No exigen mucha disciplina para usarlos
    • Son adecuados para desarrollar programas sencillos
    • Suelen permitir el uso de variables no tipadas
    • Suelen procesarse mediante intérpretes

A veces es difícil determinar a qué categoría corresponde un lenguaje de programación en particular, ya que las características indicadas pueden darse en mayor o menor grado. A continuación se indican ejemplos de cada una de estas clases de lenguajes.

Dentro de los lenguajes de guiones, los lenguajes de órdenes constituyen un grupo particular. Podría decirse que los lenguajes de órdenes tienen como objetivo principal gobernar la ejecución de otros programas y automatizar así operaciones complejas combinando programas ya existentes. El resto de los lenguajes de guiones vienen a ser lenguajes de programación de uso general o especializado y que no requieren la existencia de otros programas para construir aplicaciones con ellos.

Lenguajes de órdenes

Se denominan también lenguajes de "shell". Poseen las siguientes características:

El nombre de "lenguajes de órdenes" se debe a que el guión (script) se plantea básicamente como una secuencia de órdenes que se van ejecutando sucesivamente. Históricamente surgieron como un mecanismo para gobernar el funcionamiento en "batch" (sin interacción con el usuario) de los primeros computadores y sistemas operativos. Con la aparición de UNIX se popularizó el uso interactivo de los computadores y el empleo de estructuras generales de programación en los lenguajes de órdenes. En UNIX se introdujo también el término "shell" para designar el intérprete de órdenes que permitía gobernar el funcionamiento del computador invocando los servicios del sistema operaivo.

Los lenguajes de órdenes no suelen tener un nombre propio. El nombre del lenguaje se corresponde con el nombre del intérprete o "shell" que lo procesa. Como ejemplos de intérpretes de lenguajes de órdenes se pueden citar los siguientes:

El lenguaje de órdenes de WinNT

Está disponible en la familia de sistemas Windows NT/2000/XP. Es una extensión del lenguaje de órdenes de MS-DOS. Un guión de órdenes es un fichero de texto con la extensión .BAT o .CMD. El intérprete (shell) de este lenguaje es un programa llamado cmd.exe.

Sintaxis general

Ejemplo: imprimir serie de Fibonacci

Aunque los lenguajes de órdenes no se usan habitalmente para realizar tareas de cálculo, el caso es que tienen posibilidad de hacerlo. Para tener una idea de cómo es un guión de órdenes aquí se presenta un ejemplo que permite imprimir los términos de la serie de Fibonacci hasta un límite dado como argumento. El significado de las órdenes utilizadas se irá viendo en los siguientes apartados. El guión estará almacenado en un fichero de texto llamado fibonacci.bat:

@echo off
rem Imprimir la serie de Fibonacci hasta un límite dado como argumento

:: comprobar si hay argumento
if  not .%1.==..  goto iniciar
  echo -- Faltan argumentos
  echo -- Uso:  %0  limite
  exit /B

:iniciar
echo Serie de Fibonacci
set x1=0
echo %x1%
set x2=1
echo %x2%

:repetir
  set x0=%x1%
  set x1=%x2%
  set /A x2=x0+x1
  if  %x2% GTR %1  exit /B
  echo %x2%
goto repetir

Para ejecutar el guión de ejemplo hay que abrir una ventana de órdenes (Microsoft la llama "Simbolo del sistema"), escribir en ella el nombre del fichero y pulsar la tecla  Intro  (Enter). Ejemplo:

Ejemplo: serie de Fibonacci

Ayuda en línea

Se puede obtener información de ayuda acerca de las órdenes de CMD mediante:

Orden ECHO

En realidad son dos órdenes distintas con el mismo nombre:

Orden EXIT

Ejecución de programas u otros guiones

El código de retorno que sirve como indicador de nivel de error es un valor numérico no negativo que se designa simbólicamente como ERRORLEVEL. Por convenio se asume que el valor 0 indica que no hubo error, y valores distintos de cero indican que sí hubo error. El valor particular de ERRORLEVEL permite distinguir entre varios tipos de error.

Acceso a los argumentos o parámetros

Los argumentos de una orden se escriben a continuación del nombre de la orden, separando unos de otros por espacios en blanco. Dentro del guión se pueden usar los argumentos de la siguiente manera:

Redirección de los canales estándar de Entrada/Salida

Entorno o contexto de ejecución (variables, directorio actual)

Estructuras de control: órdenes condicionales

En un guión de órdenes se pueden programar acciones condicionales mediante los siguientes mecanismos:

También se pueden programar acciones condicionales mediantes saltos. El siguiente esquema de código equivale a un IF-THEN-ELSE

IF NOT condición GOTO es-falso
   ... acción si se cumple la condición (then) ...
   GOTO fin-condición
:es-falso
   ... acción si no se cumple la condición (else) ...
:fin-condición

Estructuras de control: bucles

La orden FOR permite programar bucles controlados por una variable de índice:

Otras formas de bucle (WHILE, bucles indefinidos, ...) se deben programar mediante saltos. El siguiente esquema de código equivale a un bucle WHILE:

:inicio-bucle
   IF NOT condición GOTO fin-bucle
   ... acción del bucle
   GOTO inicio-bucle
:fin-bucle

Manejo de ficheros

Las operaciones con ficheros o grupos de ficheros son uno de los objetivos fundamentales de los lenguajes de órdenes. Los ficheros tienen un nombre y una extensión (que por convenio designa el tipo del fichero), y se organizan en directorios, que puede estar jerarquizados. Los directorios tienen nombre y no suelen tener extensión (si se les pone extensión, no significa nada). En MS-DOS y Windows cada unidad de disco se designa por una letra, y tiene su propio sistema de ficheros.

"Expansión" de parámetros y variables

Con mucha frecuencia los parámetros de un guión o las variables de índice de un FOR contienen referencias a ficheros o directorios. El lenguaje de órdenes permite extraer partes seleccionadas (directorio, nombre, extensión,...) y construir nuevas designaciones a partir de otras. Microsoft denomina "expansión de parámetros" a este mecanismo.

Ayuda para la interacción

Los lenguajes de órdenes no suelen disponer de mecanismos adecuados para construir programas interactivos. De todas maneras ofrecen ciertas facilidades para la ejecución en modo interactivo, por consola, dando manualmente las órdenes una a una.