agosto 19, 2022

~ 5 MIN

La Terminal - Scripting

< Blog RSS

Open In Colab

La Terminal - Scripting

Seguimos nuestro viaje aprendiendo sobre la Terminal, y en esta ocasión vamos a adentrarnos en el mundo del scripting. Esto nos va a permitir usar la terminal, y en especial bash, como un lenguaje de programación para la automatización de tareas repetitivas. !Vamos a ello!

Variables

Como vimos en el post anterior, las variables de entorno nos ayudan a definir variables de manera muy similar a como la hacemos en lenguajes de programación, que pueden ser usadas por la terminal. Por defecto al abrir una terminal tendremos ya definidas algunas variables como los directorios PATH y HOME. Sin embargo, nos será de mucha utilidad ser capaces de definir nuestras propias variables. Para ellos usaremos el signo = podemos crear variables de manera sencilla. Para usar una variable, necesitaremos utilizar el prefijo $.

var1

Es importante recalcar que en la terminal el espacio en blanco tiene importancia, ya que se usa para separar los argumentos. Es por esto que x = hola no funcionará. Si quieres usar una variable con espacios en blanco, recuerda usar las comillas (por ejemplo x="hola que tal").

Es posible asignar la salida de un comando a una variable de la siguiente manera.

var1

Funciones

De la misma manera que podemos crear variables, también podremos definir funciones que agrupen un conjunto de operaciones que se ejecutarán de manera secuencial simplemente invocando la función desde la terminal. El siguiente ejemplo de función creará un nuevo directorio y entrará en él, permitiéndonos agrupar dos comandos (mkdir y cd) en unos solo gracias a la función.

mcd () {
    mkdir -p "$1"
    cd "$1"
}

func1

Para definir una función empieza por el nombre (en este caso mcd) espacio y paréntesis, espacio y {. Al dar a ENTER la terminal reconocerá que estás escribiendo una función y te permitirá añadir las nuevas líneas, con cada operación por separado. Para terminar, usa }. Como puedes ver, podemos acceder a los diferentes argumentos pasados a la función mediante las variables "$1", "$2", etc.

Scripts

Si bien podemos definir nuestras variables y funciones directamente en la terminal, es mucho más cómodo y común tenerlas en archivos de texto, o scripts que podremos ejecutar desde la terminal.

script1

El comando source cargará el contenido del script en la terminal para poder ejecutar la función.

Es posible definir múltiples comandos en una sola linea usando el separador ;.

func3

También puedes definir directamente el cuerpo de la función en el archivo y ejecutarlo de la siguiente manera.

script2

Una vez creado el script es necesario indicar que es un archivo ejecutable con el comando chmod +x ..., a partir de aquí ya lo podrás ejecutar sin problema.

En bash también podemos ejecutar scripts escritos en otros lenguajes. Para ello, deberemos indicar en la primera línea el programa o intérprete del lenguaje en concreto, en el siguiente ejemplo es Python.

py

Puedes usar el comando shellcheck para comprobar potenciales errores en tus scripts.

Palabras reservadas

Como hemos visto, podemos acceder a los argumentos pasado a una función con $1. Podemos acceder al resto de argumentos de manera individual con $1 hasta $9, o con $@ para acceder a todos ellos. El argumento $0 hará referencia al nombre de la función, mientras que $# nos dirá el número de argumentos. Por otro lado, $? nos dará acceso al código de error del comando anterior y $_ al último argumento del anterior comando.

func2

Otro comando muy útil es !!, que nos permite re-ejecutar el último comando (muy útil si un comando no funciona porque no tienes suficientes permisos, puedes repetirlo fácilmente con sudo !!).

Manejo de errores

En el post anterior vimos que podemos usar los operadores < y > para acceder a las entradas y salidas de un programa. De manera similar, podemos acceder a sus errores para indicar cuando algo no ha funcionado como era esperado.

err1

Condicionales

Bash ofrece la opción de usar condicionales para ejecutar comandos en función de si una condición se cumple o no. Para ello podemos usar los operadores AND, &&, y OR, ||, respectivamente.

cond1

En el caso de &&, si el comando a la izquierda no tiene ningún error entonces ejecutará el de la derecha. En el caso de ||, el comando de la derecha solo se ejecutará si el de la izquierda ha devuelto un error.

También podemos ejecutar varios comandos de manera condicional usando if ... ; then. El siguiente ejemplo comprueba el argumento y si es igual a 1 entonces añade la fecha actual al archivo indicado.

cond3

Como puedes ver podemos testear diferentes argumentos para saber si son iguales o diferentes a ciertos valores, mayores o menores, etc. Puedes encontrar una lista de todas las comparaciones con el comando man test.

Bucles

Vamos a ver ahora cómo podemos ejecutar comandos de manera repetida usando bulces. El siguiente ejemplo creará varios archivos, cuyos nombres pasaremos como argumentos al script, con una línea que incluirá su fecha de creación.

bucle1

Globbing

Globbing hace referencia al manejo de múltiples archivos de manera simple. Por ejemplo, el siguiente comando sólo listará aquellos archivos con una extensión en concreto.

glob1

Y de manera similar, de la siguiente manera podemos expandir un argumento

glob2

Podemos usar {} para múltiples operaciones, por ejemplo

glob3

glob4

Resumen

En este post hemos introducido los conceptos básicos para crear y ejecutar scripts en la terminal. Estos scripts nos permitirán automatizar tareas repetitivas usando bash como lenguaje de programación (aunque hemos visto que también podemos usar otros lenguajes como Python). Para ello tenemos a nuestra disposición la posibilidad de crear variables, funciones, bucles, condicionales y otros recursos que podemos esperar en cualquier lenguaje de programación.

< Blog RSS