Creando entornos de instalación con bash (Episodio I: La amenaza del #!/bin/bash)

Jeison Samir Castro S.
devStories
Published in
6 min readAug 15, 2016

Hace algunas semanas atrás, un compañero que se incorporaba a devAcademy (lugar donde laboro como web developer y hago algunas actividades que son una suerte de seguridad informática) pude observar que al momento de incorporarse al equipo eran necesario una lista de herramientas de desarrollo actualizadas y bien instaladas, y por lo general lo que uno hace es recurrir a nuestro amigo imaginario y real “google” y en el, buscar foros o recurrir a la pagina oficial de la herramienta para poder obtener la guía de instalación. Bien todo esto esta bien, y es muy bueno consultar las paginas oficiales y documentarse de aquello que queremos instalar. Pero si uno llegase a medir su tiempo en la medida que vas buscando, copiando y pegando los enlaces de descargas, el tiempo que generalmente uno se toma en ello es abismal y esto de alguna manera te “quita el tiempo” en lugar de empezar a ser productivo la pasas buscando los mejores links de instalación.

Entonces ¿Por qué no tener integrado en uno o en un par de Scripts todas aquellas herramientas? Me refiero a construir nuestros propios instaladores con las cosas que necesitamos o simplemente las cosas que queramos.

Quiero hacer una observación importante, este post lo hice por la necesidad que observé y me pareció de mi parte un buen aporte para reducir el tiempo que mis compañeros se tomaban en buscar links de instalación cuando por circunstancias tenían que formatear su PC o simplemente cuando alguien más se incorporaba al equipo. Y por lo general, (casi absoluto) que en el equipo usara un entorno basado en UNIX (Linux Debian, Ubuntu, Xubuntu, Mint etc). De mi parte espero pronto crear también instaladores usando el batch en DOS, para automatizar algunas cosas también en un ambiente Windows (aunque es más que seguro que solo usarán un .exe, de todas formas es bueno saber un poco de Scripting en los distintos ambientes).

¿Shell, Script, bash, batch, CLI, GUI …?

Este post será más que un tutorial, trataré de definir algunos conceptos muy importantes a tener en cuenta y obviamente lo escrito aquí no resumiría lo extenso y amplio que es hablar de Scripting o de la infinidad de posibilidades que nos podemos crear al automatizar tareas que a la larga nos son muy útiles en nuestra vida laboral.

Lo que les mostraré sera un Script. ¿Script? Sí, un Script, esto es en buen cristiano básicamente un archivo de órdenes, o también llamado archivo de procesamiento por lotes, se trata de un programa muy simple que creamos dentro de un archivo de texto y lo que en el se contiene básicamente es interpretado.

Unix

Para crear un archivo de comandos o Script en Unix por lo general tienen que ir identificados por un encabezamiento que es conocido como shebang.

#!/bin/bash ; #!/bin/ksh ; #!/bin/csh

Actualmente un archivo de comando puede contener o no este encabezado, ya que la Shell que lo interpreta lo puede identificar como “.sh” por lo tanto puede ser ejecutado de esas dos formas o ambas.

Windows

en Windows las líneas a ser interpretados por el cmd.exe, tiene como nombre “batch” y acaban en una extesion “.bat”.

Hablando de interpretes

el Shell o intérprete de comandos es un programa que provee una interfaz de usuario, para que este pueda acceder a servicios que contiene el SO.

Esta Shell pueden ser de tres tipos:

  • De lineas de texto (CLI, Command-Line Interface, interfaz de línea de comandos),
  • Gráficos (GUI, Graphical User Interface, interfaz gráfica de usuario),
  • De lenguaje Natural(NUI, Natural User Interface, interfaz natural de usuario).

Ordenando nuestros conceptos

Entonces luego de repasar un poco de lo que significa cada concepto antes mencionado, nos vamos a la pregunta ¿Qué es un Scripting?

Un Scripting es una actividad programada, una lista de órdenes que le daremos a nuestro ordenador y esto pueden tener lineas básicas o Scripts muy complejos.

No es mas que un lenguaje de programación que permite el control de una o más aplicaciones de software.

Pero seguro te estarás preguntando …

¿Cuál es la diferencia entre los lenguajes de programación y los lenguajes de Scripting?

Vamos a observar que la diferencia principal radica en la forma como se utilizan.

los Script son simples, rápidos y sucios (informalmente hablando), que hace de tu vida más simple con solo darle algunas instrucciones, pero si hablamos de lenguajes de programación estos son mucho mas pensandos e intencionados.

Esto no quiere decir que con los lenguajes Scripting no se pueda hacer cosas complejas, más adelante en el episodio II (spoiler) veremos que podemos integrarles GUI lo que lo hace más poderoso e intuitivo.

Nuestro primer Script

Esto sera muy simple.

Vamos a nuestro editor favorito o si ya manejas bien tu terminal sería genial, yo particularmente usaré la terminal.

Como vemos en la imagen estoy situado en mi /home y mi carpeta personal con el comando touch crearemos un archivo con la extensión “.sh”, y seguidamente lo abriré con el editor nano que viene por defecto en mi distro Xubuntu.

Una vez que le damos Enter abrimos el editor y ya podemos editarlo.

La primera linea:

#!/bin/bash

Con esta línea indicamos a nuestro intérprete del SO que se trata de un Script.

La segunda línea (seguro ya lo has visto en html) es básicamente para poder usar tildes cuando escribamos en nuestro archivo.

Nuestra primera orden

Nuestra primera orden sera escribir algo que seguramente ya has hecho con otros lenguajes, un simple hola mundo.

echo  “hola mundo”;

Genial lo guardamos (el mismo editor te da instrucciones de como puedes guardar lo que escribiste), si observamos la imagen notaremos que ingreso el siguiente comando al final:

$ sudo chmod a+x primerscript.sh

Existen dos formas de ejecutarlo:

sh primerscript.sh./primerscript.sh

Las acciones que acabo de mostrar y el orden en que estas son colocadas es muy importante, vamos a recordar que por ejemplo en un lenguaje de programación o simplemente cuando creamos algún algoritmo, notamos que las instrucciones son ejecutadas una a una, entonces lo mismo hará nuestro interprete Shell, ejecutar secuencialmente las instrucciones.

Podemos crear algoritmos, para poder controlar las secuencias de instrucciones o incluso agregar GUI para que también sea interpretado y nos vuelva nuestro hola mundo tal ves un button o un label.

Con este primer episodio tenemos las bases teóricas y prácticas como para poder adentrarnos un poquito más y hacer programas mas complejos, el cual veremos en el episodio II.

--

--