Crear scripts en Linux

Automatizando tareas


Una de las cosas más interesantes de la terminal es que podemos crear scripts. Los scripts son ficheros de texto que incluyen múltiples comandos, para ejecutarse uno detrás de otro. Esto nos permite:

  • ✅ Realizar varias tareas, una detrás de otra
  • ✅ Organizar y simplificar tareas, y no olvidarlas
  • ✅ Personalizarlas para reutilizarlas en diferentes usos
  • ✅ Posibilidad de iniciar tareas mientras haces otras cosas

En este artículo vamos a ver como crear, editar y ejecutar scripts en nuestro sistema. Si quieres hacer scripts muy pequeños, quizás te interese mirar primero los alias.

Crear scripts

Como hemos mencionado, un script es sólo un fichero de texto que incluye varios comandos, uno en cada línea, detrás de otro. Lo primero que necesitaremos es utilizar un editor de texto de terminal para crear los scripts. Si eres usuario experimentado, te recomiendo vim, si eres novato o estás empezando, prueba nano:

nano start

En este caso, estamos creando un fichero de texto llamado start. Muchas veces, los scripts en linux se suelen crear con extensión .sh, aunque muchas veces se omiten. Con nano podemos escribir en este fichero y con CTRL+O guardamos y con CTRL+X salimos del editor.

Estructura del script

Veamos el contenido de nuestro script start de ejemplo y expliquemos su contenido:

Lo primero que aparece en el script es el denominado SheBang (precedido por el texto #!). Se trata de una primera línea que indica el comando con el que se va a interpretar este script.

El Shebang más básico que podemos indicar es #!/bin/bash, que indica que se va ejecutar el script con bash, que está en la ruta /bin/bash.

Veamos un ejemplo de un script completo:

#!/bin/bash

echo "Esto es el inicio del script"
ls
echo "Esto es el final del script"

En este caso, el script se ejecuta con bash, y los comandos que se van a ejecutar son los siguientes:

  • Un echo que muestra el texto Esto es el inicio del script
  • Ejecutamos el comando ls para mostrar los ficheros de la carpeta actual
  • Un echo que muestra el texto Esto es el final del script
  • Termina la ejecución del script

Una forma más organizada de crear los scripts es indicar en el shebang #!/usr/bin/env seguido del comando que vas a ejecutar, en este caso node. Esto hace que no te tengas que preocupar de la ruta donde está el comando, sino que env lo localizará por si solo.

Por otro lado, habrás comprobado que hemos indicado node en lugar de bash. Esto hace que el script se ejecute con node, por lo que en lugar de comandos de bash, podemos indicar código Javascript (node):

#!/usr/bin/env node
import { execSync } from "node:child_process";

console.log("Esto es el inicio del script")
const results = await execSync("ls", { encoding: "utf8" });
console.log(results);

Esto puede ser interesante para programadores de Node, ya que puede hacer scripts con Javascript. De la misma forma, podríamos hacer lo mismo con #!/usr/bin/env python o #!/usr/bin/env ruby, para crear scripts de Python o de Ruby, por ejemplo.

Ejecutar el script

Ya tenemos creado el script con el nombre start. Ahora, toca ejecutar o iniciar el script. Hay tres formas de ejecutar el script:

./start         # Opción 1: Debe tener permisos de ejecución
sh ./start      # Opción 2: Lo ejecuta con la shell básica "sh"
fish ./start    # Opción 3: Lo ejecuta con la shell "fish"

El primero de ellos probablemente te dará un error, ya que un fichero recién creado no tiene permisos para ser ejecutado. Debes escribir chmod +x start para darle permisos de ejecución.

En las dos formas siguientes ponemos primero el shell con el que queremos ejecutar el script. En el caso de sh se ejecuta con una shell sencilla y básica, y en el segundo con la shell fish. Se pueden usar otras como bash, zsh, etc...

Truco: Si en algún momento queremos forzar a cancelar la ejecución del script, podemos hacerlo pulsando una (o varias veces) la combinación de teclas CTRL+C.

Algunos trucos

Veamos algunos consejos o tips interesantes a la hora de crear scripts:

SímbolosDescripción
#Las líneas que empiezan por # son comentarios, se ignoran.
&&Conecta dos comandos, si el primero sale bien, ejecuta el segundo.
\Las líneas que terminan por \ son multilinea y se continuan en la siguiente.
$(...)Devuelve el resultado de la ejecución del comando dentro de los paréntesis.
$#Esto es el número de parámetros al ejecutar el script.
$0Nombre del script.
$1Primer parámetro.
$2Segundo parámetro.
$@Todos los parámetros indicados.

¿Quién soy yo?

Soy Manz, vivo en Tenerife (España) y soy streamer partner en Twitch y profesor. Me apasiona el universo de la programación web, el diseño y desarrollo web y la tecnología en general. Aunque soy full-stack, mi pasión es el front-end, la terminal y crear cosas divertidas y locas.

Puedes encontrar más sobre mi en Manz.dev