Shell, Bash y Scripts: Todo sobre Shell Scripting.

En esta nueva oportunidad (Entrada # 8) sobre «Aprender Shell Scripting» nos centraremos más en la teoría que la practica. es decir, no instalaremos ni estudiaremos un código o instalaremos un software (paquete) en especifico, sino que nos adentraremos en lo que es el mundo del Shell Scripting propiamente dicho, mediante la respuestas a pequeñas pero directas preguntas, que son mostradas a continuación, para aclarar hasta ahora mucho de enseñado, que no se refiere directamente al código interno que se programa:

Shell Scripting

¿Que es la Shell en un Sistema Operativo GNU/Linux?

Shell que en Español significa CONCHA (coraza, cubierta, protección). Aplicado este termino en Sistemas Operativos se refiere al interprete de comandos del Sistema Operativo. Por lo general, es una interfaz de texto de altas prestaciones, y que se manifiesta en forma de Terminal (Consola) y que sirve esencialmente para 3 importantes áreas de trabajo:

1.- Administrar el S.O.,
2.- Ejecutar aplicaciones e interactuar con ellas, y
3.- Servir de entorno básico de programación.

Muchos S.O., GNU/Linux todavía se administran más eficientemente editando sus ficheros configuración, vía Terminal. Como norma general, estos se encuentran en la ruta de destino: «/etc», y dentro de directorios específicos para cada aplicación. Por ejemplo, el programa Lilo (que significa Linux Loader) se configura editando el archivo de texto ubicado y llamado como «/etc/lilo/lilo.conf». En el caso de los programas (aplicaciones), estos se lanzan (ejecutan / activan)  escribiendo el nombre del ejecutable, si el mismo se encuentran en el path (ruta por defecto) para todos los ejecutables, como normalmente es «/usr/bin» , o escribiendo el nombre del ejecutable precedido por: ./, desde el directorio donde estén ubicados.

Todo esto, es bien conocido por cualquier usuario de Shell. Sin embargo, no tan conocidas y apreciadas son sus capacidades como entorno de programación. Los Script (programas) realizados en el Shell no necesitan compilarse. La Shell los interpreta linea a linea. Por lo tanto, a estos se les conocen o nombran como Shells Scripts, y pueden llegar ha ser desde sencillas ordenes hasta complejas series de instrucciones para el arranque del propio S.O. En general, tienen una sintaxis (construcción, ordenación) bastante limpia (obvia), convirtiéndolos en un buen punto de inicio para iniciarse en el mundo de la programación.

¿Que es el Shell Scripting?

Es la técnica (habilidad / destreza) de diseñar y crear Script (archivo de automatización de tareas) mediante un Shell (preferiblemente) de un Sistema Operativo, o un Editor de Texto (Gráfico o Terminal). Este es un tipo de lenguaje de programación que generalmente es interpretado. Es decir, que  mientras la mayoría de los programas son compilados (codificados), porque son convertidos permanente a un código especifico (especial) antes de que puedan ejecutarse (proceso de compilación), un script de shell permanece en su forma original (su código fuente en forma de texto) y son interpretados comando por comando cada vez que se ejecutan. Aunque cabe la posibilidad de que los scripts pueden ser compilados también, aunque no es usual.

¿Cuales son las características de los programas basados en programación bajo Shell Scripting?

1.- Son más fácil de escribirse (programarse), pero con un costo mayor de procesamiento cuando son ejecutados.

2.- Usan intérpretes en lugar de compiladores para ejecutarse

3.- Tienen una relación de comunicación con componentes escritos en otros lenguajes de programación.

4.- Los archivos que los contienen son almacenados como texto sin formato.

5.- El diseño final (código) suele ser más pequeño que lo que sería el equivalente en un lenguaje de programación compilado.

¿Cuales son los Tipos de lenguajes más conocidos bajo Shell Scripting?

1.- Lenguaje de control de tareas y shells:

a) cmd.exe (Windows NT, Windows CE, OS/2),
b) COMMAND.COM (DOS, Windows 9x),
c) csh, Bash, AppleScript, sh,
d) JScript vía Windows Script Host,
e) VBScript vía Windows Script Host,
f) REXX, entre muchos otros.

2.- GUI Scripting (Lenguajes de Macros):

a) AutoHotkey,
b) AutoIt,
c) Expect,
d) Automator, entre otros.

3.- Lenguaje scripting de aplicaciones específicas:

a) ActionScript en Flash,
b) MATLAB,
c) mIRC script,
d) QuakeC, entre otros.

4.- De programación web (para páginas dinámicas):

a) Del lado del servidor:

– PHP,
– ASP (Active Server Pages),
– JavaServer Pages,
– ColdFusion,
– IPTSCRAE,
– Lasso,
– MIVA Script,
– SMX,
– XSLT, entre otros.

b) Del lado del cliente:

– JavaScript,
– JScript,
– VBScript,
– Tcl, entre otros.

5.- Lenguajes de procesamiento de textos:

– AWK,
– Perl,
– Sed,
– XSLT,
– Bash, entre otros.

6.- Lenguajes dinámicos de propósito general:

– APL,
– Boo,
– Dylan,
– Ferite,
– Groovy,
– IO,
– Lisp,
– Lua,
– MUMPS (M),
– NewLISP,
– Nuva,
– Perl,
– PHP,
– Python,
– Ruby,
– Scheme,
– Smalltalk,
– SuperCard,
– Tcl,
– Revolution, entre otros.

¿Que es el Bash en GNU/Linux?

Es un programa informático cuya función consiste en interpretar órdenes. Está basado en la shell de Unix y es compatible con POSIX. Fue escrito para el proyecto GNU y es el intérprete de comandos por defecto en la mayoría de las distribuciones de Linux.

¿Que es un Script de Shell en GNU/Linux?

Los Scripts de Shell son extremadamente útiles. Es buena idea escribir aquellas necesidades que tengamos y luego editar scripts que realicen este trabajo por nosotros. A estas alturas, ya es hora de preguntarse que es exactamente un script. Es un archivo de texto, que contiene una serie de comandos para shell, que el sistema ejecuta ordenadamente, de arriba abajo. Para editarlos, tan solo hace falta un editor de textos, como Emacs, Vi, Nano, entre muchos existentes. Se guardan con extensión “.sh” (o sin ella, en algunos casos) y se ejecutan desde la Shell mediante el comando: sh nombre de script.sh. Los scripts, se comportan de igual manera que los comandos de la shell.

El enfoque de enseñanza que yo personalmente utilizo para «Aprender Shell Scripting» es muy practico y directo, es decir, examinar un Script totalmente funcional, descomponerlo, estudiarlo sentencia por sentencia, linea a linea, comando por comando, variable por variable, hasta entender, como funciona cada elemento por separado y como se engrana en el código general. Es una especie de Ingeniería Inversa o Reingeniería de Software. Todo esto con la finalidad de apropiarme del conocimiento, mejorarlo (optimizarlo) y compartirlo, en beneficio colectivo y una mejor administración y optimización de los Sistema Operativo libres.

¿Como se ejecuta y trabaja en una Shell de GNU/Linux?

El primer paso para trabajar con una Shell es ejecutar una shell. Esto que parece una perogrullada tiene su razón de ser. En algunas distribuciones de GNU/Linux muy enfocadas al usuario final, la shell está bastante escondida. Normalmente, se llama: Konsole, Terminal, Terminal de X, o algo similar. Otra opción es utilizar una consola virtual. Mediante: Ctrl+Alt+f1, o f2, o f3 hasta f7 u f8, dependiendo de la Distribución GNU/Linux que use. La Shell más utilizada en GNU/Linux es Bash, aunque existen otras, como ksh o C Shell. En mi caso, muy particular para mis publicaciones uso Bash Shell.

Dado un Script hecho en Bash Shell llamado hola_mundo.sh se puede explicar lo siguiente:

Contenido:

#!/bin/bash
echo Hola Mundo

Desglose:

Primera línea del script
#!/bin/bash

Indica el programa que debe ejecutar el script. Si no se encuentra el programa, se producirá un error.

Segunda línea del script
echo Hola Mundo

Ejecuta el comando echo con los argumentos Hola Mundo, haciendo que se muestren por pantalla.

Ejecución: Podemos ejecutar el script de dos formas

Invocando al intérprete para que ejecute el script:
# bash hola_mundo.sh

También se puede ejecutar como:
# sh hola_mundo.sh

Pero al no ser su Shell correcto invocado, puede funcionar a medias. Lo ideal es que el Shell invocado en la primera linea sea el utilizado para ejecutarlo.

También se puede ejecutar directamente el script de la siguiente manera:
# ./hola_mundo.sh

Nota: ./ indica ejecutar desde el directorio actual.

De resto lo que queda por analizar es el código que usted inserte dentro del mismo. Espero que como siempre les este gustando (a unos mas que otros, según las necesidades de aprendizaje y conocimiento) esta serie de Shell Scripting.

Hay muchos buenos enlaces sobre este tema en la web, pero les dejo esta pequeña guía ubicada aquí mismo en DesdeLinux.net y esta otra Guía Externa.

Hasta la próxima publicación!