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:

¿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!


13 comentarios

  1.   d4ny dijo

    Lilo .. Linux Loader .. el resto muy buena info .. gracias .. salu2 d4ny.-

  2.   Ing. Jose Albert dijo

    Saludos a todos aquellos que van siguiendo el Curso Online de “Aprender Shell Scripting” pronto continuaremos con otros básicos script para seguir apropiándonos del conocimiento y seguir socializando el mismo a todos.

    Espero, que sigan atentos porque pronto empezare con códigos más avanzados pero expuestos de forma que sean visualmente entendibles a pesar de su complejidad.

    Recuerden que con el Shell Scripting se pueden hacer muchas cosas complejas que sean multi-plataformas (Distros Diferentes) usando archivos muy pequeños. Les dejaré este pequeño screencast de algo que pronto les enseñaré, a los que sigan viendo el curso, y que con solo 50Kb promete bastante! Y no es sino la mitad de lo que se puede hacer con Shell Scripting.

    ScreenCast de Testeo del LPI-SB8 (LINUX POST INSTALL – SCRIPT BICENTENARIO 8.0.0)
    (lpi_sb8_adecuación-audiovisual_2016.sh / 43Kb)

    Ver Screencast: https://www.youtube.com/watch?v=cWpVQcbgCyY

    1.    Alberto Cardona dijo

      Hola, es increíble tu aporte, de verdad muchas gracias!!
      Tengo una pequeña duda, puedo programar un compilador con bash?
      O por lo menos un analizador léxico?
      tiene esa potencia?

  3.   Ing. Jose Albert dijo

    Saludos a todos aquellos que van siguiendo el Curso Online de “Aprender Shell Scripting” pronto continuaremos con otros básicos script para seguir apropiándonos del conocimiento y seguir socializando el mismo a todos. Espero, que sigan atentos porque pronto empezare con códigos más avanzados pero expuestos de forma que sean visualmente entendibles a pesar de su complejidad.

    Recuerden que con el Shell Scripting se pueden hacer muchas cosas complejas que sean multi-plataformas (Distros Diferentes) usando archivos muy pequeños. Les dejaré este pequeño screencast de algo que pronto les enseñaré, a los que sigan viendo el curso, y que con solo 50Kb promete bastante! Y no es sino la mitad de lo que se puede hacer con Shell Scripting.

    ScreenCast de Testeo del LPI-SB8 (LINUX POST INSTALL – SCRIPT BICENTENARIO 8.0.0)
    (lpi_sb8_adecuación-audiovisual_2016.sh / 43Kb)

    Ver Screencast: https://www.youtube.com/watch?v=cWpVQcbgCyY

  4.   Alberto dijo

    Hola Jose,
    Primero agradecer que compartas tus conocimientos. Tus artículos son muy interesantes.

    Dos cosas, pienso que es muy importante el uso de las comillas dobles “Hola Mundo” y tener una salida limpia de nuestro script con exit 0

  5.   Ing. Jose Albert dijo

    Gracias por tus aportes, en los próximos Script verás el uso del exit 0, break, y otros!

  6.   Willarmand dijo

    Saludos.
    Muy interesante, lo haces ver sencillo; ahora bien, yo me he topado con que no puedo programar en Linux con cron o at, el apagar/suspender/hibernar, con el consiguiente encendido automático usando el comando rtc wake, no se si un script con dicho comando ayudaría, o seguirían cron y at sin hacer nada, o simplemente no se puede, o se hace de otra forma, o soy muy ambicioso, pero en Windows es relativamente simple hacerlo. Quiero mudarme a Linux, pero es importante para mí, programar apagar/suspender/hibernar y que se inicie sola la PC. Saludos.

  7.   Ing. Jose Albert dijo

    Tal vez esto te de ideas innovadoras: http://cirelramos.blogspot.com/2016/01/reiniciar-apagar-o-ejecutar-otra-tarea.html

  8.   Ing. Jose Albert dijo

    http://cirelramos.blogspot.com/2015/12/programar-servidor-para-enviar-mensajes.html

  9.   Willarmand dijo

    Gracias, los voy a leer a fondo, algo me servira. Saludos.

  10.   Eduardo Cuomo dijo

    Hace tiempo comencé un proyecto, el cual creo es único en su tipo. Es un prototipo para un Framewok Bash. Solo requiere de Bash en el sistema.
    Si alguien más está interesado, está invitado a probarlo y colaborar!

    https://github.com/reduardo7/bashx

    Saludos!

    1.    lagarto dijo

      Estimado Eduardo, me parece un gran proyecto, quizás podrías compartirlo con toda la comunidad de desdelinux, recuerda que puedes publicar un artículo sobre tu proyecto en nuestra web, si no sabes como hacerlo te recomiendo leer http://blog.desdelinux.net/guia-redactores-editores/ donde están las mejores prácticas para crear artículos en desdelinux y el procedimiento a realizar. Posiblemente para la comunidad sea bastante bueno primero conocer de las bondades de tu proyecto y segundo aprender como realizar este tipo de cosas. Te invitamos e invitamos al resto a dar a conocer sus proyectos con nosotros y la amplia comunidad que nos rodea.

  11.   Miguel Urosa Ruiz dijo

    Hola, buenos días.
    Soy nuevo en el mundo de la administración de máquinas Linux, y quería saber qué me recomendáis para la misma: ksh, bash, perl, php, python….
    Muchas gracias y un saludo.
    Miguel.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.