Guía completa de Bash: comandos básicos, scripting y automatización en Linux

1. Conceptos básicos de Bash

¿Qué es la shell Bash?

Bash (Bourne Again Shell) es la interfaz de línea de comandos más utilizada en las distribuciones de Linux. Esta herramienta, simple pero potente, proporciona a los usuarios una plataforma para interactuar con el sistema y realizar tareas fundamentales como la manipulación de archivos, la ejecución de programas y la gestión de procesos.

Ventajas de Bash

  • Potente capacidad de scripting: Bash permite automatizar tareas complejas mediante scripts de shell.
  • Amplio soporte: Está disponible en la mayoría de los sistemas operativos tipo Unix y distribuciones de Linux.
  • Alta personalización: A través de alias y funciones de shell, los usuarios pueden adaptar su entorno a su estilo de trabajo.
# Ejemplo simple de comando en Bash
echo "Hello, World!"
侍エンジニア塾

2. Comandos básicos de Bash

Manipulación de archivos

A continuación, se muestran los comandos de manejo de archivos más utilizados en Bash.

  • ls: Lista el contenido de un directorio.
  • cd: Cambia de directorio.
  • cp: Copia archivos o directorios.
  • mv: Mueve o renombra archivos.
  • rm: Elimina archivos.
# Mostrar contenido detallado del directorio
ls -l

# Ir al directorio home
cd ~

# Copiar un archivo
cp source.txt destination.txt

# Mover o renombrar un archivo
mv old_name.txt new_name.txt

# Eliminar un archivo
rm unwanted_file.txt

Información del sistema y gestión de procesos

También son esenciales los comandos para consultar información del sistema y administrar procesos.

  • ps: Muestra los procesos activos.
  • top: Muestra en tiempo real la lista de procesos y un resumen del sistema.
  • kill: Envía una señal a un proceso para finalizarlo.
# Mostrar procesos activos
ps aux

# Ver el resumen del sistema y procesos en tiempo real
top

# Finalizar el proceso con ID 1234
kill 1234

3. Cómo escribir scripts en Bash

Estructura básica de un script

Un script en Bash es un archivo que contiene múltiples comandos. Crear un script permite automatizar y ejecutar una serie de operaciones de forma secuencial.

#!/bin/bash
# Esta línea se llama shebang y especifica la shell que se utilizará para interpretar el script.

echo "Hello, World!"  # Mostrar un texto en pantalla con el comando echo

Uso de variables

Se pueden utilizar variables para almacenar datos y reutilizarlos dentro del script.

#!/bin/bash
message="Hello, Bash Scripting!"
echo $message

Condicionales y bucles

Para manejar lógica compleja y repeticiones de tareas, se emplean condicionales y bucles.

#!/bin/bash
# Ejemplo de condicional if
if [ $1 -gt 100 ]
then
  echo "El número es mayor que 100."
else
  echo "El número es 100 o menor."
fi

# Ejemplo de bucle for
for i in 1 2 3 4 5
do
  echo "Iteración... número $i"
done

4. Automatización de tareas con Bash

Introducción a la automatización

El uso de scripts en Bash permite automatizar de manera eficiente tareas periódicas. Esto incluye copias de seguridad del sistema, sincronización de datos y generación de reportes, lo que reduce la carga administrativa.

Script de copia de seguridad automática

Para proteger los datos diariamente, el siguiente script realiza copias de seguridad periódicas de un directorio específico.

#!/bin/bash
SRC_DIR="/home/user/documents"
DST_DIR="/backup/documents"
DATE=$(date +%Y%m%d)

# Crear el directorio de respaldo si no existe
if [ ! -d "$DST_DIR" ]; then
  mkdir -p "$DST_DIR"
fi

# Comprimir y respaldar el contenido del directorio
tar -czf "$DST_DIR/backup_$DATE.tar.gz" -C "$SRC_DIR" .
echo "Backup completed successfully."

Ejecución automática con cron

Con cron, se puede programar la ejecución diaria del script anterior a las 2 de la madrugada.

0 2 * * * /path/to/backup.sh

Manejo de errores y notificaciones

Es recomendable agregar manejo de errores y notificaciones para alertar al administrador si ocurre un problema durante la copia de seguridad.

#!/bin/bash
SRC_DIR="/home/user/documents"
DST_DIR="/backup/documents"
LOG_FILE="/var/log/backup.log"
DATE=$(date +%Y%m%d)

if [ ! -d "$DST_DIR" ]; then
  mkdir -p "$DST_DIR"
fi

if tar -czf "$DST_DIR/backup_$DATE.tar.gz" -C "$SRC_DIR" .; then
  echo "Backup successful on $DATE" >> $LOG_FILE
else
  echo "Backup failed on $DATE" | mail -s "Backup Failure" admin@example.com
fi

5. Solución de problemas y errores comunes

Comprender y resolver errores en Bash

Es común que ocurran errores durante la ejecución de scripts en Bash. A continuación, se explican los más frecuentes y cómo resolverlos.

Error: comando no encontrado

Este error ocurre cuando el comando no está instalado o la ruta no está configurada correctamente.

command not found
  • Solución: Verifica la instalación del comando y que la variable de entorno $PATH esté configurada correctamente.

Error de permisos

Se produce cuando no se tienen permisos suficientes para acceder a un archivo o directorio.

Permission denied
  • Solución: Ejecuta la acción con un usuario que tenga los permisos adecuados o modifica los permisos con chmod o chown.

Error de sintaxis

Ocurre cuando el código del script no sigue la sintaxis correcta.

syntax error: unexpected end of file
  • Solución: Revisa cuidadosamente el script y corrige los errores de sintaxis.

Error: archivo no encontrado

Se presenta cuando el archivo especificado no existe en la ruta indicada.

No such file or directory
  • Solución: Verifica la ruta del archivo y asegúrate de que exista.

Uso de herramientas de depuración

Para depurar un script de Bash, se puede usar set -x, lo que muestra cada paso durante la ejecución y facilita la identificación de errores.

set -x  # Activar depuración en el script

6. Automatización de tareas con Bash

Introducción a la automatización

El uso de scripts en Bash permite automatizar de manera eficiente tareas periódicas. Esto incluye copias de seguridad del sistema, sincronización de datos y generación de reportes, lo que reduce la carga administrativa.

Script de copia de seguridad automática

Para proteger los datos diariamente, el siguiente script realiza copias de seguridad periódicas de un directorio específico.

#!/bin/bash
SRC_DIR="/home/user/documents"
DST_DIR="/backup/documents"
DATE=$(date +%Y%m%d)

# Crear el directorio de respaldo si no existe
if [ ! -d "$DST_DIR" ]; then
  mkdir -p "$DST_DIR"
fi

# Comprimir y respaldar el contenido del directorio
tar -czf "$DST_DIR/backup_$DATE.tar.gz" -C "$SRC_DIR" .
echo "Backup completed successfully."

Ejecución automática con cron

Con cron, se puede programar la ejecución diaria del script anterior a las 2 de la madrugada.

0 2 * * * /path/to/backup.sh

Manejo de errores y notificaciones

Es recomendable agregar manejo de errores y notificaciones para alertar al administrador si ocurre un problema durante la copia de seguridad.

#!/bin/bash
SRC_DIR="/home/user/documents"
DST_DIR="/backup/documents"
LOG_FILE="/var/log/backup.log"
DATE=$(date +%Y%m%d)

if [ ! -d "$DST_DIR" ]; then
  mkdir -p "$DST_DIR"
fi

if tar -czf "$DST_DIR/backup_$DATE.tar.gz" -C "$SRC_DIR" .; then
  echo "Backup successful on $DATE" >> $LOG_FILE
else
  echo "Backup failed on $DATE" | mail -s "Backup Failure" admin@example.com
fi

Glosario de términos técnicos

  • Bash (Bourne Again Shell): Intérprete de comandos más común en Linux que permite ejecutar instrucciones, administrar procesos y escribir scripts.
  • Shell: Interfaz que conecta al usuario con el sistema operativo mediante comandos.
  • Script: Archivo de texto que contiene una serie de comandos para ser ejecutados automáticamente.
  • Alias: Comando personalizado creado para simplificar tareas repetitivas en la shell.
  • Variable: Espacio de memoria donde se almacena información que puede reutilizarse dentro de un script.
  • Condicional (if): Estructura de control que permite ejecutar instrucciones dependiendo de si una condición es verdadera o falsa.
  • Bucle (for, while): Estructura que repite un conjunto de instrucciones varias veces.
  • Cron: Servicio de Linux utilizado para programar la ejecución automática de tareas en horarios determinados.
  • Permisos (chmod, chown): Configuraciones que definen quién puede leer, escribir o ejecutar un archivo o directorio.
  • $PATH: Variable de entorno que contiene las rutas donde el sistema busca los comandos ejecutables.
  • Depuración (set -x): Modo que muestra en pantalla cada comando ejecutado en un script, útil para identificar errores.
侍エンジニア塾