¿Qué es un script?

marzo 23, 2018 , 0 Comments

Script

La red está llena de terminología que para los que no son informáticos podría resultar algo confusa. Algunos de estos términos pueden ser código fuente, guiones o script, snippets, etc. Bien, en cuanto a código fuente, es todo aquel texto o información escrita usando algún lenguaje de programación y respetando una determinada sintaxis para formar un algoritmo o función específica que compondrá al programa.

Por tanto, código fuente es un término algo más genérico y amplio, pudiendo englobar también dentro a los otros términos, ya que un snippet es un fragmento de código fuente que no llega a ser demasiado complejo por lo general. Por ejemplo, cuando nos dedicamos al diseño web o necesitamos insertar algún banner en nuestra web, normalmente los proveedores de anuncios como Google Adsense o Amazon Afiliados nos dan un snippet con el código HTML para poderlo insertar en nuestra web. Por tanto no es un programa completo, sino más bien pequeñas partes de código reutilizables.

Lenguaje interpretado vs lenguaje compilado:

Interpretado vs compilado

Si te estás preguntando qué es un script o guión, debes saber que en programación se usa este término para referise al código fuente escrito en algún tipo de lenguaje interpretado (casi siempre). ¿Y qué diferencia existe con respeto a los lenguajes de programación compilados tradicionales? Pues que a diferencia de éstos, el código fuente no se compila una sola vez y se transforma en un binario, sino que se necesita de un intérprete que haga de intermediario y cada vez que se quiere ejecutar el programa, el intérprete deberá traducir el código para que la máquina lo entienda. Es decir, los pasos resumidos serían:

  1. Escribir el código fuente del programa usando algún lenguaje de programación para compilar como C, BASIC, C++, Ada, ALGOL, D, COBOL, GO, Fortran, G, Lisp, Pascal, Swift, Visual Basic, etc. El código se puede escribir en un editor de texto cualquier o usando un entorno de desarrollo más completo o IDE.
  2. Compilamos el código fuente utilizando algún compilador, como por ejemplo GCC de GNU. Con ello conseguimos transfromar esas órdenes en un lenguaje de alto nivel que solo comprenden los programadores y los compiladores en un lenguaje máquina o bnario que es entendible o ejecutable por la CPU.
  3. El binario puede ser ejecutado todas las veces que necesitemos sin volver a pasar por los pasos previos. De hecho, la mayoría de distribuidores de software nos hacen llegar directamente el binario para ejecutarlo en nuestro equipo. Será el sistema operativo el que gestione los procesos necesarios para ello, syscalls, etc.

Por otro lado, los scripts no siguen esos pasos y se usan lenguajes interpretados. Existen muchos lenguajes interpretados, como pueden ser el propio usado en el intérprete Bash, que será el más usado en GNU/Linux y otros Unix, además de lenguajes tan conocidos como Perl, Python, Ruby, JavaScript, etc. Con ellos se puede escribir el código que compondrá el script que no será más que un fichero de órdenes o procesmaiento por lotes. Evidentemente según el lenguaje usado, la sintaxis variará. En el caso de un lenguaje interpretado, el orden cambiaría a:

  1. Escribimos el script o código fuente usando un lenguaje de programación cualquiera. También podemos usar un IDE o simplemente un editor de texto.
  2. En este caso no se compila, sino que directamente se puede ya ejecutar con ayuda del intérprete. Es decir, si usamos Bash, necesitamos de éste instalado en el sistema para poder ejecutar nuestro script. Si usamos un script en Python, necesitamos el intérprete Python instalado, etc.
  3. Cuando ejecutamos el script, será el intérprete el que interprete las órenes o lenguaje que hay en él (de ahí su nombre), es decir, esas instrucciones no pasan directamente al sistema operativo y CPU, ya que no las reconocería sin ayua del intermediario o traductor que es el intérprete.

Dicho esto vemos que en uno u otro caso hay ventajas y desventajas. En el caso de los compilados no necesitan compilación en tiempo de ejecución, por tanto, una vez compilados la primera vez podremos ejecutar el binario todas las veces que queramos sin perder recursos en ello. No es así en los scripts, que necesitarán destinar recursos también para el intérprete, por tanto correrá más lento por lo general.

Creando nuestro primer script en Linux:

Logo de Bash

En nuestro ejemplo vamos a usar como lenguaje de programación interpretado el propio de Bash, y por tanto nuestro intérprete será Bash. Antes de nada debemos conocer que muchos ficheros de guión tienen encabezamientos conocidos como shebang según el intérprete usado. Por ejemplo, en LInux podemos encontrarnos con diferentes intérpretes, en el caso de Bash, el shibang es #!/bin/bash, pero en cualquier otro caso será el binario que apunta hacia el intérprete o shell en este caso.  Además, en el caso de Unix y Linux, el fichero de script suele tener la extensión .sh.

En el script podremos usar comandos del intérprete, operandos, constantes, etc. Por ejemplo, podemos crear un simple script para hacer cópias de seguridad en nuestro sistema y crear un registro con la fecha creando un fichero llamado backup.sh con nuestro editor det texto favorito. Su contenido será:


<div>

<pre><span class="com">#<span class="simbol">!</span>/bin/bash
</span></pre>
<pre>tar cvf /backup/copia<span class="simbol">.</span>tar /home/usuario</pre>
<pre>date <span class="simbol">></span> /backup/log_copia</pre>
</div>

Por ejemplo, en el ejemplo anterior creará una copia de seguridad del directorio /home/usuario y lo empaqueta en un tarball llamado copia.tar, para luego escribir un log de fecha. Para ejecutarlo, tendremos que darle permisos de ejecución, por ejemplo:


chmod +x backup.sh

./backup.sh

Un sencillo ejemplo que creo que alcare para los más novatos lo que es un script. Que es una duda bastante recurrente últimamente…

El artículo ¿Qué es un script? ha sido originalmente publicado en Linux Adictos.


Some say he’s half man half fish, others say he’s more of a seventy/thirty split. Either way he’s a fishy bastard.