Introducción a scripting
El scripting es una habilidad esencial para cualquier administrador de sistemas, desarrollador o entusiasta de Linux. Enfocando el escribir scripts para automatizar tareas, administrar sistemas y mejorar la eficiencia en el trabajo.
Cuando ejecutamos un script (o programa) Linux carga el contenido del script y sus instrucciones en memoria por lo que se crea un proceso que representa la instancia de ese programa.
Por convención solemos darle una extensión específica para representar el lenguaje de su contenido como .js
, .py
, .html
aunque para Linux las extensiones no son obligatorias para crear un archivo ejecutable. Sí es cierto que algunos entornos (e.j. GUI) sí asocian extensiones a programas para determinar cómo ejecutarlos.
En este apartado nos centraremos en la shell BASH y BASH scripting
¿Cómo ejecutar un script BASH?
Vamos a crear el 'Hola mundo' en BASH. Para ello crearemos un archivo helloworld
con el siguiente contenido:
echo "Hello world!"
Para ejecutarlo un script en BASH, invocaremos al comando bash pasándole como argumento la ruta a nuestro script. Ejemplo:
$ bash ./helloworld
Hello world!
Otra opción es utilizar el built in command .
(dot) pasándole como argumento la ruta a nuestro script:
$ . ./helloworld
Hello world!
O incluso con el comando source
:
$ source ./helloworld
Hello world!
Sí es cierto que en la práctica cuando invocamos algunos comandos no necesitamos anteponer su intérprete como, por ejemplo, el comando egrep
que es otro BASH script. Esto es posible debido a dos motivos:
- El script tiene permisos de ejecución.
- El script sabe qué intérprete usar.
Para poder hacer un script ejecutable necesitamos darle permisos de ejecución. En apartados posteriores veremos cómo funcionan el sistema de permisos en Linux. Por ahora para hacer nuestro script ejecutable haremos lo siguiente:
$ chmod +x ./helloworld
Por último nos falta añadir el shebang. Es una instrucción que debe de ir al principio del archivo e indica el intérprete que debe de ejecutar. Se indica mediante #!
seguido de la ruta absoluta del intérprete, en nuestro caso el intérprete es /bin/bash
:
#!/bin/bash
echo "Hello world!"
Ahora podemos ejecutarlo sin el comando bash
directamente mediante su ruta y nombre de archivo:
$ ./helloworld
Hello world!
Gracias a este shebang podemos crear scripts no sólo de BASH si no de cualquier otro lenguaje interpretado, veamos un ejemplo en python creando el archivo helloworld.py
:
#!/usr/bin/python3
def say(message):
print(message)
say("Hello world from Python")
Volvemos a darle permisos de ejecución y probamos su ejecución:
$ chmod +x ./helloworld.py
$ ./helloworld.py
Hello world from Python
También es posible utilizar el comando /usr/bin/env
pasándole el nombre del intérprete como argumento:
#!/usr/bin/env python3
def say(message):
print(message)
say("Hello world from Python")
Existen muchas variables que están preestablecidas al utilizar una shell BASH. Muchas de ellas son estáticas y unas pocas cambian conforme interactuamos con el sistema. Para ver el listado de todas las variables disponibles podemos utilizar el comando env
sin argumentos.
$ env
SHELL=/bin/bash
LANGUAGE=en_US:
PWD=/home/vagrant
LOGNAME=vagrant
XDG_SESSION_TYPE=tty
MOTD_SHOWN=pam
HOME=/home/vagrant
LANG=C.UTF-8
...
$ echo Mi usuario es $USER
Mi usuario es vagrant
$ echo Mi usuario es USER
Mi usuario es USER
También podemos utilizar el comando
printenv <varname>
para mostrar el contenido de una variable. Sin argumentos mostrará t
En apartados posteriores de scripting veremos cómo trabajar con variables.