1. INTRODUCCIÓN
A día de hoy, en la fecha que se redacta este escrito,
existen muchas tecnologías arcaicas que aún se siguen agitando por diferentes
entornos de desarrollo. Muchas de estas ciencias tienen la capacidad de
desplegar soluciones a muchas incógnitas que se le presentan a diario a la
ciencia que estudia métodos, técnicas y procesos (Informática).
En la búsqueda de instrucciones sobre las tecnologías que
ya parecen desvanecidas para muchos, hace que haya poca documentación, a lo que
se hace difícil consolidar información de calidad, en la que podamos cultivar
una buena granja de conocimiento en nuestro ser. Ahora, después de tanta
búsqueda dinámica en algunas guías, documentaciones, textos y de mucha
redundancia de información, que siguen sin darnos un final feliz, donde el
lector pueda decirse que conoce correctamente de la tecnología, he logrado ser
raudo sobre ciertos temas, los cuales estoy emocionado por compartir, auxiliar
en colaboración a esa tecnología que se cree por perdida, de la cual ya no
hacen comparaciones con las que antes hacían, porque según, ha sido superada
con facilidad, de las que muchos presumen, son las mejores.
Obviamente, como tal lo indica el título, la tecnología
que se tratará es «Shell Script Batch»,
a la misma que también se le conoce cómo «Sistema por Lotes (en inglés Batch
Processing)», los cuales son una manera de
llevar a cabo de información, en lenguaje llano, una manera de hacer
informática, donde en estos sistemas, los programas y tareas se ejecutan de
manera secuencial.
Es muy pronto para llegar al Clímax sobre este tema, el
cual es muy gigantesco; desearía ser un experto en el área, para compartir lo
mejor, con detalle absoluto sobre cada cosa que se mencione, así que desde ya
les aviso, daré mi 100% en el desarrollo de estos textos, claramente, con ayuda
de otros colaboradores por la red.
Desde ya hace buen período del desarrollo de los Sistemas
Operativos, se viene relacionando la programación en Shell Script Batch o con
el uso de los comandos que interpreta el OS (Sistema Operativo) con DOS (Disk
Operating System) o bien, MS-DOS (Microsoft – Disk Operating System), hasta el
punto de señalar las terminales actuales como el mismo sistema; que, aunque
está demás decir, Batch sólo es aplicable en OS Windows y algunas plataformas
anteriores pertenecientes a Microsoft. Hago constar que la realización de esta
redacción sobre esta tecnología, está inspirada principalmente en que he
quedado embelesado (fascinado) de la programación en Shell Script Batch, de la
manipulación de las terminales o Shell, que interpretan las órdenes de
comandos, o como es bien visto en muchos entornos, el CLI (Command Line
Interface, Interfaz de Línea de Comandos). Por otro lado, la ilusión de que
muchos interesados como mi persona, logren penetrar en este maravilloso orbe, y
se tenga la mejor experiencia con estos humildes escritos.
1.1 BATCH
Es un lenguaje de programación orientado a
scripting que utiliza un sistema de interpretación de secuencias de
procesamientos por lotes de forma ordenada. Interpretado por MS-DOS o bien, la
línea de comandos del OS (Sistema Operativo) Windows.
Por
adjuntar detalles sobre el concepto anteriormente escrito, hay que tener en
cuenta algunas palabras y enunciados que son claves para entender mejor la
definición, por ejemplo: Lenguaje de programación, Scripting, MS-DOS,
Interpretación, procesamiento por lotes, línea de comandos, sistema operativo,
Windows. Me causa gracia que este párrafo es más extenso que el propio concepto
anterior.
1.1.1 LENGUAJE DE PROGRAMACIÓN
Es un software que se comunica con los
componentes de un dispositivo físico, como tal puede ser el ordenador, utilizando
un lenguaje técnico en la comunicación de los mismos, que para el ser humano de
forma rápida es difícil de comprender, pero que existen traducciones que en
ciertos desempeños hacen fácil su entendimiento y aprobación; con el principal
propósito de ordenar a una máquina, la
realización de tareas, teniendo como resultado la tercera ley de Newton,
aplicando el principio de acción y reacción (dependiendo de la lógica aplicada).
Existen muchos conceptos por la red,
el que he escrito, es completamente extraído de mi experiencia que he venido
obteniendo a lo largo de mi estadía en el mundo informático. Intentaré ser lo
más claro posible, pero sin perder la elegancia técnica que amerita la
tecnología.
Batch no es un lenguaje de
programación compilado, sino uno interpretado. Con esta respuesta, quizá te
haya nacido la pregunta «¿Cuál es la diferencia de un lenguaje
de programación compilado y uno que es interpretado?»
Lenguaje compilado
Traducción
directa a un fichero binario entendible por la máquina.
Lenguaje interpretado
Traducido por el
intérprete de otro lenguaje, luego este lo traduce a binario.
1.1.2 SCRIPTING
Se trata de un fichero o archivo que
contiene instrucciones de órdenes que entienden las máquinas. En el contenido
de este fichero, debe utilizar un lenguaje técnico (Tipo de sintaxis), haciendo
referencia a uno o más lenguajes de programación, donde dicha aplicación, sea
cuando se haga ejecución de ese fichero. Este fichero tendrá efecto, si las
instrucciones que contiene, son de total autoridad en su lectura, dirigidas a
algún componente que está en escucha y entiende el mensaje, se da la
comunicación, este componente o servicio debe estar instalado en la misma plataforma
o al menos sea correctamente interpretada por el mismo sistema operativo,
téngase en cuenta que se define de forma general, no en directo como un fichero
por lotes Batch.
En caso de Batch, en la definición ya
se mencionó quién lo interpreta. Las instrucciones que se agreguen sobre Batch,
deben ser reconocidas por el OS, leídas y ejecutadas de forma secuencial.
1.1.3 DOS (Disk Operating System)
El Sistema Operativo de Disco o
Sistema Operativo en Disco, es una familia de sistemas operativos para
computadoras personales, conocidas como PC (Personal Computer). Creado originalmente para una empresa
multinacional estadounidense de tecnología y consultoría, la cual fabrica y
comercializa hardware (dispositivos físicos, lo tangible) y software
(componentes virtuales, lógicos e intangibles) para ordenadores.
DOS contaba con una interfaz de línea
de comandos en modo texto y alfanumérico. Tiene su propio intérprete de
órdenes, Command.com. La más popular en sus variantes es la perteneciente a la
familia MS-DOS, que, a continuación, les comentaré.
Existen varias versiones de DOS:
-
MS-DOS,
de Microsoft (el más conocido)
-
PC-DOS,
de IBM
-
DR-DOS,
de Digital Research, que pasaría posteriormente a Novell
-
FreeDOS,
es el más reciente, de licencia libre y código abierto
Esto es sólo por mencionar,
próximamente comprenderán que son todas estas versiones y de qué nos puede
servir conocerlas, aunque sea de forma teórica, desde ya les dejo una pista, la
compatibilidad.
1.1.4 MS-DOS (Microsoft DOS)
El
Sistema Operativo de Disco de Microsoft, es un OS para ordenadores basado en
x86 (arquitectura de microprocesadores, sobre el circuito integrado central más
complejo de un sistema informático) que, a modo de ilustración, se le suele
llamar por analogía el «cerebro» de un computador.
Es el principal sistema para PC compatible con IBM en la
década de los 1980 y mediados de 1990, hasta que fue sustituida gradualmente
por OS que ofrecían GUI (Graphical User Interfaces) que, traducido al español
sería Interfaz gráfica de usuario, la cual actúa de interfaz de usuario,
utilizando un conjunto de imágenes y objetos gráficos para representar la
información y acciones disponibles mediante dicha interfaz. En particular,
éstas la ofrecieron por varias generaciones de Microsoft Windows.
Por otro lado, antes de que el seudónimo de MS-DOS
naciera, había un Sr. Llamado QDOS (Quick and Dirty Operating System), en español “Sistema Operativo Rápido y Sucio” escrito
y comercializado por Tim Paterson, era un sistema de 16 bits que pertenecía a
la compañía estadounidense Seattle Computer Products. Antes de que el gran Bill
Gates (Fundador de Microsoft) hubiese sacado las garras para tomar (negociar su
comercio) este OS, también era conocido como 86-DOS.
Según cuenta la leyenda, MS-DOS se desarrolló a partir de
QDOS. Dicho desarrollo inició oficialmente en 1981 y fue lanzado el siguiente
año como MS-DOS en su versión 1.0. Tuvo 8 versiones principales y alcanzó gran
difusión, pero fue gradualmente reemplazado por OS que ofrecían interfaz
gráfica de usuario (GUI), en particular, por varias generaciones del OS
Microsoft Windows (En la actualidad, es un nombre de una familia de
distribuciones de software para PC, Smartphone, servidores y sistemas
empotrados (integrado o incrustado diseñado para realizar pocas funciones
dedicadas), desarrollados, disponibles para múltiples arquitecturas).
1.1.5 PC-DOS & MS-DOS
| Versiones
Esta sección está en el documento que he compartido. No la he escrito ya que son ilustraciones.
1.1.6 INTERPRETACIÓN
En general, la interpretación de lenguas o simplemente interpretación, es
la actividad de mediación lingüística que consiste en transmitir un discurso de
tipo oral o en lengua de señas, dando lugar a un discurso equivalente en una
lengua diferente, bien de tipo oral o de lengua de señas.
Continuando con la idea anterior, en informática, intérprete o
interpretador es un software capaz de analizar y ejecutar otros programas,
donde existe un software mediador que toma el código que le envía el editor, lo
interpreta para traducirlo a un lenguaje nativo, de compilador para luego
compilarlo y lograr obtener el binario, listo para ser ejecutado.
En el punto «1.1.1 Lenguaje de programación» he reflejado
la diferencia entre un intérprete y compilador, por lo que seguiré un poco ese
guion. Los intérpretes se diferencian de los compiladores o de los
ensambladores en que mientras estos traducen un programa desde su descripción
en un lenguaje de programación al código máquina, también conocido como binario
(0, 1). Los intérpretes sólo realizan la
traducción a medida que sea necesaria, típicamente, instrucción por
instrucción, y normalmente no guardan el resultado de dicha instrucción.
Los programas interpretados suelen ser más lentos que los compilados debido
a la necesidad de traducir el programa mientras se ejecuta, pero a cambio son
más flexibles como entornos de programación y depuración (lo que se traduce,
por ejemplo, en una mayor facilidad para reemplazar partes enteras del programa
o añadir módulos completamente nuevos), y permiten ofrecer al programa
interpretado un entorno no dependiente de la máquina donde se ejecuta el
intérprete, sino del propio intérprete (lo que se conoce comúnmente como
máquina virtual).
En varias ocasiones se ha mencionado que Batch es un lenguaje interpretado.
El software que lo interpreta es MS-DOS. Dicho procedimiento sería, elaborar un
script Batch, donde este script contiene instrucciones que según definen el
lenguaje; intentando ejecutar ese script, MS-DOS lo reconoce y procede a
interpretarlo, toma las instrucciones y las traduce a lenguaje de máquina, y
dependiendo del resultado, es que devuelve datos o procede a realizar las
acciones que se instruyeron en el Batch. De esta forma, se nota que el
intermediario es MS-DOS, la versión ejecutada va dependiendo de la versión de
OS Windows que tengas instalada, considerando obvio que tienen OS Windows en
sus versiones más o menos actuales (desde Windows XP a posteriores).
En el documento existe más información al respecto sobre los lenguajes interpretados.
1.1.7 COMPILACIÓN
Desempolvando un poco el concepto de compilación en términos generales, es
reunir varias obras o partes de ella en un solo volumen. En términos
informáticos sería codificar un lenguaje en lenguaje binario del ordenador.
En literatura, tiene muchos sinónimos, entre ellos, reunir, recopilar,
codificar, agrupar, coleccionar. Parece tener sentido ¿no?, piénsese de la
siguiente forma, en estado de compilación, se trata de agrupar un conjunto de
instrucciones que contiene un script para su futura traducción a lenguaje
binario (máquina).
Específicamente, es un programa informático que traduce un programa que ha
sido escrito en un lenguaje de programación a un lenguaje diferente, usualmente
lenguaje de máquina, aunque también puede ser traducido a un código intermedio
Bytecode (es un código intermedio más abstracto que el código máquina) o a
texto. Este proceso de traducción se conoce como compilación.
Dos ficheros fuentes que contienen
instrucciones (código) que pronuncian a un lenguaje de programación, son
llevados al proceso de compilación (traducido a lenguaje de máquina).
Es analizado para la comprobación y corrección del programa fuente e
incluye las fases correspondientes al análisis léxico que consiste en la
descomposición del programa en componentes léxicos, análisis sintáctico
(agrupación de los componentes léxicos en frases gramaticales) y análisis
semántico (comprobación de su validez semántica de las sentencias aceptadas en
la fase de análisis sintáctico).
Un objetivo o paso es la síntesis, la cual es la generación con salida
expresada en lenguaje objeto y que suele estar formado por una(s)
combinaciones.
En el documento existe más información sobre el proceso de compilación.
1.1.8 DEPURACIÓN
Proceso de identificar y corregir errores de programación. En inglés se le
conoce como Debugging, porque se asemeja a la eliminación de bichos (bugs),
manera a la que se conoce informalmente a los errores de programación.
Ilustración de
cómo funciona la depuración o Debugging.
Una breve
descripción. Se inicia programando el código fuente en el lenguaje que sea, en
este caso, debería ser un Batch, donde hay que recordar, MS-DOS lo
interpretaría. Cuando el código ya está finalizado, listo para darle ejecución,
el intérprete (MS-DOS) verifica el código y lo intenta traducir, sin embargo,
si el detecta un error, este no funcionará, por lo tanto, tendrá que darle
corrección, desarrollar mejor el código y repetir el procedimiento hasta que
funcione.
1.1.9
PROCESAMIENTO POR LOTES
Se refiere a Batch Processing, en español, procesando Batch o modo Batch, a
la ejecución de un programa sin el control o supervisión directa del usuario, a
este se le denomina procesamiento interactivo. Estos programas se caracterizan
porque su ejecución no precisa ningún tipo de interacción con el usuario.
Generalmente, este tipo de ejecución se utiliza en tareas repetitivas sobre
grandes conjuntos de información, ya que sería tedioso y propenso a errores
realízalo manualmente. Estos programas que se ejecutan por lotes, suelen
especificar su funcionamiento mediante scripts o guiones (procedimientos), que
son las instrucciones que comentaba, en los que se indica qué se quiere
ejecutar y, posiblemente, qué tipo de recursos necesita reservar.
Casi cualquier programa puede ejecutar en modo Batch, siempre y cuando
pueda especificarse los distintos pasos de ejecución o las entradas
(parámetros) de usuario a partir de un script.
Algunos programas conocidos que pueden funcionar en modo por lotes: GIMP
(GNU Image Manipulation Program), R-Project, GNUPlot, GNU Octave (ya se ha
mencionado), COMMAND.COM, EXEC II, entre otros muchos.
Téngase en cuenta que no hay que confundir el procesamiento por lotes con
los programas o archivos con extensión (.bat) de los sistemas Batch (de los
cuales heredan su nombre debido a su metodología). Estos ficheros se ejecutan
de manera secuencial, y cerrando la ejecución al usuario ya que este no puede
interactuar ni intervenir en el programa que se ejecuta.
1.1.10 LÍNEA DE COMANDOS
Es una implementación de la consola MS-DOS para la interfaz gráfica de las
diversas versiones Microsoft Windows.
La línea de comandos de Windows como accesorio de sistema existió a partir de la versión de Windows 3.0 sin entregar más funcionalidades adicionales, a excepción de ejecutarse en una ventana independiente al entorno gráfico del sistema.
1.1.11 INTERFAZ DE LÍNEA DE COMANDOS (CLI)
Interfaz de línea de órdenes (en inglés, Command-Line
Interface, CLI) es un método que permite a los usuarios dar instrucciones a
algún programa informático por medio de una línea de texto simple. Los
conceptos de CLI, Shell o emulador de terminal, no son lo mismo, ya que CLI es
un método mientras que Shell o terminal son programas informáticos. Sin
embargo, suelen utilizarse como sinónimos. En el punto 1.1.10, ya he dejado
claro algunos seudónimos.
Hago esta captura a la fecha que se escribe este
documento, con respecto a este tipo de tecnologías que tienen que ser válidas
en tiempo, siempre estaré creando mi propio contenido, por lo que evitaré sacar
imágenes de internet con respecto al mismo, mostrando de esta forma, realismo
de lo que se expone.
¡No te asustes! La terminal “Símbolo del sistema” no
tiene una imagen de fondo como tal, sino es que le he agregado un poco de
transparencia en sus propiedades, así que lo que se ve al fondo, es mi
escritorio.
Las CLI pueden emplearse interactivamente, escribiendo
instrucciones en alguna especie de entrada de texto, o pueden utilizarse de una
forma más automatizada (archivo Batch), leyendo órdenes desde un fichero de
scripts. Estamos casi listos por empezar una estupenda travesía.
Podría apostar que la CLI existe desde los comienzos
de la computación, superada en la antigüedad solo por las tarjetas perforadas
(es una lámina hecha de cartulina que contiene información en forma de
perforaciones según un código binario) y mecanismos similares. Existen para diversos
programas y OS, para diverso Hardware, y con distinta funcionalidad.
La contraparte de CLI es la interfaz gráfica de
usuario (GUI), que ofrece una estética mejorada y una mayor simplificación, a
costa de un mayor consumo de recursos computacionales, y, en general, de una
reducción de la funcionalidad alcanzable. Asimismo, aparece el problema de una
mayor vulnerabilidad dad su complejidad.
1.1.12
COMMAND.COM
Es el nombre del intérprete de comandos para DOS (ya se
ha mencionado) y versiones de Windows de 16/32 bits (95/98/98 SE/Me). Al ser el
primer programa que se ejecuta después del inicio, posee también el rol de la
configuración del sistema ejecutando el archivo AUTOEXEC.BAT (en los OS
actuales, este no tiene funcionalidad).
El intérprete de comandos, tiene dos modos de
ejecución. Ya se ha mencionado en el punto anterior. Recapitulando un poco.
El Sucesor de COMMAND.COM en Windows
NT/2000/XP/2003/Vista/7 y OS/2 es cmd.exe, aunque sigue manteniéndose en los
sistemas Windows para ofrecer compatibilidad con los viejos programas de DOS.
Hay información extra en el documento. Un diagrama interesante.
1.1.13 AUTOEXEC
Es un fichero de sistema que tiene una ejecución
automática, originario del OS MS-DOS. Este fichero alude a su cometido de
reunir ciertos comandos que serán ejecutados automáticamente al iniciar el
sistema.
El fichero tiene una extensión (.BAT), por lo que su
nombre en general sería AUTOEXEC.BAT, el cual se utiliza en MS-DOS y Windows
3.x (que correo bajo MS-DOS), que hace uso de él para cargar controladores y
establecer variables de entorno (esto será explicado en posteriores resúmenes).
Asimismo, algunas versiones posteriores de Windows, como W95 (OS con GUI
híbrida entre 16 y 32 bits), W98 (OS gráfico y monolítico sucesor de W95) y WME
(Windows Millenium Edition) mantenían su
funcionalidad por razones prácticas de compatibilidad con el software anterior.
El fichero se ejecuta una vez que el OS ha arrancado y
después de que el fichero CONFIG.SYS (fichero de configuración para MS-DOS y
OS/2) ya sido procesado. En Windows, esto ocurre antes de que el entorno
gráfico sea lanzado.
1.1.13 EXTENSIÓN
Los scripts Batch se pueden ejecutar con diferentes
extensiones. En el punto 1.1.10 sobre Línea de comandos, he ilustrado de donde
provienen los nombres de estos formatos o extensiones que se le agregan a los
ficheros Batch. Igualmente, se estará presentando por este apartado.
Primero está en entrar un poco sobre la definición de
la extensión, ya que esta se trata de una cadena de caracteres anexada al
nombre de un archivo, usualmente precedida por un punto. Su función principal
es diferenciar el contenido del archivo, de modo que el OS disponga el
procedimiento necesario para ejecutarlo o interpretarlo, sin embargo, la
extensión es solamente parte del nombre del fichero y no representa ningún tipo
de obligación respecto a su contenido.
La extensión puede ser escrita en mayúsculas o en
minúsculas.
La primera extensión que se explicará será el (.BAT).
Esta es la primera extensión de nombre de fichero utilizada por Microsoft para
los archivos por lotes. Esta extensión se ejecuta con DOS y todas las versiones
de Windows, bajo COMMAND.COM o cmd.exe, a pesar de las diferentes formas en que
los dos intérpretes de comandos ejecutan archivos por lotes.
La segunda extensión que se explicará será el (.CMD).
Esta se utiliza para ficheros por lotes en la familia Windows ME y se envía a
bat.exe para su interpretación. COMMAND.COM no reconoce esta extensión de
nombre de fichero, por lo que las secuencias de comandos cmd.exe no se ejecutan
en el entorno incorrecto de Windows por error.
Existe
otra extensión, sin embargo, en los OS actuales, no es utilizada. Dicha
extensión es (.BTM). Esta extensión se utilizaba por 4DOS (es un intérprete de
línea de comandos), 4OS2 (es el análogo de OS/2 de 4NT), 4NT (intérprete de
comandos diseñado para sustituir el intérprete de comandos predeterminado en
Microsoft Windows), y Take Command (intérprete de línea de comandos GUI para
Windows 3.1).
Existe más información sobre esto en el documento.
Los ficheros por lotes .CMD y .BAT
Los ficheros por lotes, se les habilita tener
la extensión .cmd después de Windows 2000. No hay ninguna diferencia en el
funcionamiento con respecto a los .bat, sin embargo, lo que lo hace interesante
a estas dos extensiones, es que los ficheros .cmd trabajan con arquitecturas de
OS de 32 bits y los .bat con 16 bits.
Para que se tenga una mejor idea, intentaré
clarificar un poco el asunto de las arquitecturas en aplicación a lo que
compete.
16 bits
Una aplicación de 16 bits es cualquier
software escrito para MS-DOS, OS/2 1.x (OS de IBM que intentó suceder a DOS
para las computadoras personales) o las primeras versiones de Microsoft Windows
que originalmente se ejecutaban en los microprocesadores de 16 bits Intel 8086
e Intel 80286.
32 bits
Tal y como 16 bits, utiliza microarquitectura
de CPU y ALU para describir registros, bus de direcciones y datos o
instrucciones de 32 bits (4 octetos). Lo interesante a mencionar sobre esta
arquitectura, es sobre el Efecto 2038.
El efecto 2038 es un bug (error) producido en
programas que usen la representación del tiempo basada en el sistema POSIX, y
que afecta a sistemas UNIX y basados en UNIX.
ANUNCIO
Pueden
observar que este proyecto está iniciando, estoy intentando redactar
una guia que cree soluciones a problemas realistas, he elaborado otros
documentos, dinámicos, con proyectos y prácticas de necesidad, hay que
escarbar en tierras no muy transitadas de Shell Script Batch.
Si
deseas contribuir con algo más de contenido o agregar alguna crítica
constructiva, por favor, hazla saber, se te agradecerá, y aparecerá en
la zona de contribuidores de la próxima versión del documento.
Comentarios
Publicar un comentario
Hola, ¿Qué tal colega?
Por favor, no la piense tanto y exponga su duda o crítica constructiva, estaré encantado de responderle.
¡Saludos!