En este tutorial, vamos a descubrir el intérprete de comandos Bash en Linux. Además de permitir al usuario ejecutar comandos para administrar una máquina, Bash será muy útil para automatizar tareas en Linux. Este artículo introductorio te ayudará a dar tus primeros pasos con Bash en Linux.
Después de leer este artículo, deberías poder poner en práctica Bash en Linux para automatizar tus primeras tareas utilizando scripts.
¿Qué es Bash?
Bash, acrónimo de “Bourne Again Shell“, es uno de los intérpretes de comandos más utilizados en sistemas Unix y Linux. Está presente de forma predeterminada en la mayoría de las distribuciones de Linux, incluidas las más populares como Debian, Ubuntu, Rocky Linux, etc. En otras palabras, Bash es lo que se llama un shell, es decir, una interfaz de sistema que se coloca entre el usuario y el sistema operativo.
Bash te permite ejecutar comandos en la máquina local, crear y ejecutar scripts para automatizar tareas según las necesidades de un usuario o una organización. Además, también es una excelente manera de administrar una máquina y los datos que almacena.
Si trabajas en entornos Linux y deseas sentirte cómodo en la administración de servidores Linux, Bash es una habilidad esencial.
Primeros Pasos con los Comandos Bash
En primer lugar, es importante familiarizarse con los comandos básicos de Bash. Esto servirá como introducción antes de discutir los scripts Bash como tales. Entre estos comandos, encontraremos comandos básicos para enumerar el contenido de un directorio, moverse de un directorio a otro, crear una carpeta o archivo o incluso eliminar archivos.
A. Sintaxis genérica de los comandos Bash
Cada comando Bash tiene un nombre y un conjunto de opciones que le son propias, según sus funcionalidades. Escribir un comando Bash sigue el siguiente modelo:
comando [opción(es)] [argumento(s)]
Las opciones te permitirán personalizar el comportamiento del comando Bash de acuerdo con tus necesidades. Los argumentos corresponden a los valores personalizados que deseas pasar al comando. Algunas opciones requieren un argumento, otras no, todo depende del funcionamiento del comando.
#comando opción argumento
ls -a /home/alexis
Finalmente, cabe señalar que existen nombres largos (“--NombreOpcion
“) y nombres cortos (“-Letra
“) para las opciones. Por ejemplo, con el comando “ls” la opción “--recurse
” también se puede escribir “-R
“, que corresponde tanto a su nombre largo como a su nombre corto.
B. Comando pwd: muestra el directorio de trabajo actual
El comando “pwd“, cuyo nombre significa “Print Working Directory”, muestra el directorio actual del usuario, desde el punto de vista del shell utilizado para ejecutar el comando. Aquí, el comando devuelve el valor “/home/alexis“, lo cual es lógico, porque el usuario se encuentra en su directorio personal. Esto es coherente porque la ruta del indicador muestra “~
“.
pwd
C. Comando ls: enumera archivos y carpetas
El comando “ls”, cuyo nombre es la abreviatura de “list“, se utiliza para enumerar el contenido de un directorio desde el shell. El siguiente ejemplo enumera el contenido del directorio “/home/alexis”. La opción “-l
” está ahí para tener una visualización larga en forma de lista vertical.
ls -l /home/alexis
Aquí está el contenido de este directorio en la máquina utilizada para mis pruebas:
Este comando contiene muchas opciones, y su visualización predeterminada devuelve información valiosa como permisos, grupo propietario y usuario propietario.
D. Comando cd: cambiar el directorio actual, a nivel de shell
El comando “cd” se utiliza para cambiar el directorio en el que se encuentra a nivel del shell actual. En otras palabras, te permite navegar por los volúmenes de la máquina desde la línea de comandos, como lo haríamos con un explorador de archivos en modo gráfico.
cd <ruta de destino>
cd /etc
cd /tmp
E. Comando mkdir: crear un nuevo directorio
El comando “mkdir”, que corresponde a “make directory“, se utiliza para crear directorios en una máquina Linux. Se puede utilizar para crear un solo directorio o un árbol completo.
Así, el siguiente ejemplo se utiliza para crear el directorio “Informatica” en “/home/alexis/Documentos” porque es mi directorio de trabajo actual.
mkdir Informatica
En la imagen, será más comprensible:
El siguiente ejemplo se utiliza para crear los directorios “Fuentes” y “Scripts” en el directorio “/home/alexis/Documentos/Informática”.
mkdir /home/alexis/Documentos/Informatica/{"Fuentes","Scripts"}
El resultado en imagen:
F. Comando touch: crear un archivo
El comando “touch” se utiliza para modificar las marcas de tiempo en archivos Linux, es decir, las horas de acceso y modificación de los archivos. También se puede utilizar para crear un archivo vacío: este es el uso que más nos interesará para esta introducción.
El siguiente ejemplo crea un archivo vacío llamado “demo.txt
” en el directorio “/home/alexis/Documentos/Informatica/Scripts/“.
touch /home/alexis/Documentos/Informatica/Scripts/demo.txt
G. Comando rm: elimina archivos o directorios
El comando “rm” se puede utilizar para eliminar un archivo o directorio, así como un conjunto de archivos y directorios, según sea necesario. Particularmente potente, si se usa incorrectamente, puede causar daños muy importantes en una máquina Linux… Cabe señalar que también existe el comando “rmdir” para eliminar directorios.
El siguiente ejemplo elimina el directorio “Fuentes” creado anteriormente. La opción “-r
“, para recursividad, es fundamental, porque es un directorio.
rm -r /home/alexis/Documentos/Informatica/Fuentes/
El siguiente ejemplo, muy similar al anterior, eliminará todo el contenido del directorio sin eliminar el directorio “Scripts” en sí.
rm -r /home/alexis/Documentos/Informatica/Scripts/*
Podemos considerar estos comandos como la base para la manipulación de datos y la navegación en un sistema Linux desde el shell. Antes de pasar a escribir un script, vamos a hablar del sistema de ayuda.
H. Ayuda y páginas de manual
¿Cómo obtener ayuda para aprender a usar un comando Bash? Esa es una excelente pregunta. Debes saber que cada comando integra una ayuda que puedes consultar llamando a la opción “--help
“. Aquí hay un ejemplo para ver la ayuda del comando “ls
” para obtener información adicional sobre sus diversas opciones y su significado.
Además, podemos consultar las páginas de manual de cada comando, es decir, su documentación, con el comando man. Simplemente especifica el nombre del comando para el que deseas obtener ayuda:
man ls
Entonces, después de ejecutar este comando, obtenemos el siguiente resultado:
Una búsqueda web también da acceso a esta ayuda, ya que varios sitios te permiten consultar las versiones en línea de las “man pages”.
Ahora, vamos a aprender a crear un script: ¡esta será seguramente la oportunidad de poner en práctica uno o más de los comandos que acabamos de estudiar!
¿Cómo Crear un Script Bash?
Incluso antes de hablar sobre el contenido de un script Bash, ¿cómo podemos crear y editar un script Bash en una máquina Linux?
Ten en cuenta que los scripts Bash utilizan la extensión “.sh
“, al igual que PowerShell utiliza la extensión “.ps1
” y Python la extensión “.py
“. Por lo tanto, el nombre de nuestro Bash deberá terminar en “.sh
“.
El script Bash se puede crear como un nuevo archivo con una aplicación y luego guardar en un segundo paso con un nombre que respete este formato. De lo contrario, también podemos crearlo con el comando “touch
” y luego abrirlo con la aplicación que elijamos para modificarlo.
¡Eso es lo que vamos a hacer! Vamos a crear el archivo “ScriptBash.sh” en la raíz del perfil de nuestro usuario.
touch ~/ScriptBash.sh
Para editar este script Bash, podremos utilizar los editores de texto habituales cuando trabajamos en Linux, a saber, el editor minimalista “nano
” o el editor “vim
“, mucho más completo pero también más difícil de entender. Finalmente, si estás buscando un verdadero editor de código, deberías instalar Visual Studio Code en tu máquina (gratis).
En lo que a mí respecta, se utilizará nano
en el resto de este tutorial, pero eres libre de utilizar la aplicación con la que te sientas más cómodo. Se recomienda el editor Visual Studio Code.
Escribe tu Primer Script Bash en Linux
A. Agregar el shebang a un script Bash
Primero, abriremos el archivo “ScriptBash.sh
” para editarlo y comenzar a escribir nuestras primeras líneas de código… pero ¿por dónde empezar?
nano ~/ScriptBash.sh
¡La primera línea de tu script siempre debe ser el Shebang! ¿Qué? ¡El Shebang es un elemento importante presente en la primera línea de un script cuyo propósito es indicar el intérprete de script que se utilizará para ejecutar el código del script! En otras palabras, esta línea será útil para indicar que se debe utilizar el binario de Bash.
Aquí está la línea para agregar:
#!/bin/bash
Lo que da:
B. Agrega tus primeras líneas de código
Después de estas líneas, solo queda agregar nuestras instrucciones, es decir, los comandos a ejecutar, los comentarios, etc… Según nuestras necesidades.
Para empezar, simplemente vamos a escribir una frase en la consola: “¡Hola mundo! ¡Primer script Bash!
” usando el comando “echo
“.
#!/bin/bash
echo "Hola mundo! ¡Primer script Bash!"
Para adherirnos a las mejores prácticas, también agregaremos un comentario para explicar para qué sirve esta línea. Para agregar un comentario, simplemente agrega un “#
” al principio de la línea.
#!/bin/bash
# Escribir un mensaje en la consola
echo "Hola mundo! ¡Primer script Bash!"
No es necesario agregar un punto y coma al final de la línea. Bash sabe que el comando termina al final de la línea y que la siguiente línea corresponde a otro comando. Sin embargo, será necesario incluir un punto y coma para especificar varios comandos en la misma línea.
Finalmente, guarda y cierra el archivo ya que vamos a aprender a ejecutar un script Bash en Linux.
C. Ejecutar un script Bash en Linux
¿Cómo podemos ejecutar este script para probarlo? Podemos llamarlo prefijando su nombre con “./
“.
cd ~
./ScriptBash.sh
Se devolvió un error: “bash: ./ScriptBash.sh: Permiso denegado“. ¿Que esta pasando? Vamos a enumerar el contenido de nuestro directorio para echar un vistazo a los permisos de nuestro archivo…
ls -l
Efectivamente, podemos ver que existen permisos de lectura (r) y escritura (w), ¡pero faltan los permisos de ejecución!
Para que este script Bash sea ejecutable, debes modificar los permisos de esta manera:
chmod +x ScriptBash.sh
Luego, intenta ejecutar el script nuevamente… ¡Esta vez, se está ejecutando! Finalmente, la buena noticia es que el resultado esperado se devuelve en la consola.
Ten en cuenta que sin editar los permisos del archivo, podríamos haberlo ejecutado de esta manera:
bash ScriptBash.sh
En el resto de este tutorial, vamos a crear un nuevo script Bash más completo, para descubrir un caso de uso real y nociones adicionales.
Script Bash: Variable, Condición if, etc.
Vamos a crear un script Bash cuyo objetivo será el siguiente: intentar hacer ping a una máquina, a través de su dirección IP o su nombre, para determinar si está en línea o no. Esta será una oportunidad para dar nuestros primeros pasos con variables en Bash y también usar una estructura condicional “If-Else“. El script completo está disponible al final de esta parte.
Crea un nuevo archivo llamado “ping.sh
” y ábrelo con un editor para que puedas escribir líneas de código. Sigue los pasos a continuación para construir tu script Bash gradualmente.
A. Declarar una variable en Bash
Comienza insertando las líneas que se muestran a continuación.
Explicaciones: para declarar una variable en Bash, debes escribir el nombre de la variable seguido de un signo igual (=) y luego el valor a asignar a esta variable. ¡Es importante especificar que no debe haber espacio antes ni después del signo igual!
Aquí, declaramos la variable “SERVIDOR” y le asignamos el valor “192.168.1.35
“. Luego, cuando llamemos a esta variable por su nombre, será reemplazada por su valor. Para llamarlo, su nombre debe ir precedido del signo “$
“.
#!/bin/bash
# Definir la dirección del servidor al que hacer ping
SERVIDOR=192.168.1.35
B. Redirigir la salida de un comando en Bash
El segundo paso es hacer ping a este servidor llamando a nuestra variable.
Explicaciones: simplemente vamos a usar el comando “ping
” que ya conoces, agregando el parámetro “-c
” para hacer 2 pings (en Linux, el comando ping debe detenerse manualmente si no especificamos el número de pings a realizar).
La sutileza radica en el uso del carácter “>
” después del comando ping para redirigir la salida del comando a un archivo, en este caso aquí, un archivo vacío (“/dev/null
“). El objetivo es enmascarar la salida del comando ping: lo que nos interesa es el resultado y no la salida.
# Enviar 2 pings al servidor correspondiente a la variable $SERVIDOR
ping -c 2 $SERVIDOR > /dev/null
C. Escribe tu primera estructura condicional If en Bash
El último paso es evaluar el resultado del comando ping para determinar si el host definido en la variable “SERVIDOR” es accesible o no. Esto nos llevará a utilizar una estructura condicional “if-else“.
Algunas palabras sobre la estructura condicional If-Else:
La estructura condicional nos permitirá hacer una prueba llamada condición (comparar dos valores, por ejemplo) y en función del resultado, podremos realizar una acción. En el caso de que la condición sea verdadera, se ejecutará el código que sigue al “then“, mientras que si la condición es falsa, se ejecutará el código que sigue al “else” (esto es opcional).
if [ condición ]
then
# Código a ejecutar si la condición es verdadera
else
# Código a ejecutar si la condición es falsa
fi
Explicaciones:
En Bash, “$?
” es una variable especial que contiene el código de retorno del último comando ejecutado, por lo tanto, el comando “ping” en nuestro caso. Esta variable se utiliza para comprobar si un comando se ejecutó correctamente o si encontró un error. Un código de retorno de “0” indica que el comando se ejecutó correctamente.
Vamos a evaluar el resultado de esta variable en nuestra condición “if“: si no es igual a “0”, es que hubo un problema al hacer ping al host, de lo contrario, ¡es que todo salió bien! Usaremos el comando “echo” para escribir texto en la consola.
# Determinar si el servidor está en línea o no
if [ $? -ne 0 ]
then
echo "Error - ¡El servidor $SERVIDOR no respondió al ping!"
else
echo "OK - El servidor $SERVIDOR está en línea."
fi
D. El script completo
Entonces, finalmente, aquí está el código completo de este script:
#!/bin/bash
# Definir la dirección del servidor al que hacer ping
SERVIDOR=192.168.1.35
# Enviar 2 pings al servidor correspondiente a la variable $SERVIDOR
ping -c 2 $SERVIDOR > /dev/null
# Determinar si el servidor está en línea o no
if [ $? -ne 0 ]
then
echo "Error - ¡El servidor $SERVIDOR no respondió al ping!"
else
echo "OK - El servidor $SERVIDOR está en línea."
fi
Solo tenemos que ejecutarlo para probar que funciona correctamente:
chmod +x ping.sh
./ping.sh
Aquí hay un ejemplo de salida:
La Tubería en Bash
Para finalizar esta introducción a los scripts Bash en Linux, vamos a discutir una noción muy importante: la tubería, correspondiente al carácter “|
“.
La tubería te permite conectar varios comandos entre sí ya que la salida de un comando sirve como entrada para el segundo comando, y así sucesivamente. De hecho, la salida estándar (stdout) de un comando se redirige como entrada estándar (stdin) del siguiente comando. Poder combinar comandos abre posibilidades muy interesantes, especialmente para realizar filtros, búsquedas u operaciones más complejas.
<Primer comando> | <Segundo comando> | <Tercer comando> | <Etc...>
Si queremos contar el número de líneas presentes en nuestro script Bash “ping.sh
“, ¿cómo podemos hacerlo?
Podemos combinar el uso de dos comandos:
- cat para mostrar el contenido del archivo.
- wc, cuyo nombre significa “Word Count“, para contar el número de líneas en nuestro archivo.
El comando “cat” nos permitirá recuperar el contenido del archivo y enviarlo al comando “wc” a través de la tubería, para devolver el número de líneas.
Lo que da el siguiente comando:
cat ScriptBash.sh | wc -l
Al final, ¡ahora sabemos que hay 15 líneas en nuestro script Bash!
Conclusión
¡Esta introducción a la escritura de scripts Bash está llegando a su fin! Hemos cubierto el uso de algunos comandos, así como la creación y ejecución de un script Bash, ¡y luego hemos creado nuestros dos primeros scripts Bash! Ahora, todo lo que tienes que hacer es practicar diferentes casos de uso para mejorar tus habilidades en este tema.
Para profundizar en el tema, puedes consultar nuestros tutoriales de Bash utilizando el siguiente enlace:
Pingback: Cómo Utilizar Archivo de Configuración para Scripts Bash » Blog