agosto 19, 2022
~ 5 MIN
La Terminal - Scripting
< Blog RSSLa 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 $
.
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 ejemplox="hola que tal"
).
Es posible asignar la salida de un comando a una variable de la siguiente manera.
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"
}
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.
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
;
.
También puedes definir directamente el cuerpo de la función en el archivo y ejecutarlo de la siguiente manera.
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
.
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.
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 consudo !!
).
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.
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.
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.
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.
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.
Y de manera similar, de la siguiente manera podemos expandir un argumento
Podemos usar {}
para múltiples operaciones, por ejemplo
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.