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 conbash, 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
echoque muestra el textoEsto es el inicio del script - Ejecutamos el comando
lspara mostrar los ficheros de la carpeta actual - Un
echoque muestra el textoEsto 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ímbolos | Descripció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. |
$0 | Nombre del script. |
$1 | Primer parámetro. |
$2 | Segundo parámetro. |
$@ | Todos los parámetros indicados. |
