Bash: Mejores prácticas y ejemplos

Leandro Padula

Share this article

Introducción

Hace unas semanas, nos embarcamos en un artículo que discute la importancia de aprender Bash para los programadores, con el objetivo de crear una serie de artículos que permitan a los programadores profundizar en Bash mientras se adhieren a las mejores prácticas. Reconocimos la cantidad significativa de información disponible que a menudo descuida estas pautas esenciales.

Este artículo, diseñado específicamente para programadores, tiene como objetivo guiarlos en la creación de sus scripts iniciales, al tiempo que enfatiza la importancia de seguir las mejores prácticas.

Primeros pasos en Bash

Si eres un programador que busca automatizar tareas o administrar configuraciones del sistema, aprender a escribir scripts de Bash puede ser una herramienta increíblemente poderosa. Bash es un shell de línea de comandos y lenguaje de scripting que se utiliza en Linux, macOS y otros sistemas operativos basados en Unix. En esta entrada del blog, te proporcionaremos una guía paso a paso sobre cómo escribir tu primer script de Bash, junto con un ejemplo.

Paso 0: Elige tu editor de texto

Antes de sumergirnos en la escritura de nuestro primer script de Bash, debemos elegir un editor de texto. Puede usar cualquier editor de texto con el que se sienta cómodo, pero se recomienda usar Visual Studio Code.
Para obtener información detallada sobre las extensiones recomendadas y su configuración correspondiente para Visual Studio Code, consulte el siguiente artículo: gauchocode.com/why-learn-bash

Paso 1: Crear nuestro primer script

No hay mejor manera de aprender que practicando, por lo que el primer paso será crear la base de nuestro script Bash y luego probar y ejecutar gradualmente el código en él según sea necesario.

Abre tu editor de texto y crea un nuevo archivo

Llamaremos a este archivo «myscript.sh». La extensión «.sh» indica que se trata de un script de Bash.

Añade Shebang

La primera línea de un script de Bash siempre debe comenzar con un shebang. El shebang le dice al sistema qué intérprete usar para ejecutar el script. Agregue la siguiente línea al principio de la secuencia de comandos:

!/bin/bash

Imprimir algo

Ahora que tenemos nuestro archivo configurado, es hora de escribir un script simple que salude al usuario:

!/bin/bash

echo "Welcome to my first Bash script!"

Paso 2: Guardar y ejecutar nuestro script

Guarde el script y hágalo ejecutable ejecutando el siguiente comando en su terminal:

chmod +x myscript.sh

Este comando hace que el archivo sea ejecutable. Ahora, podemos ejecutar nuestro script escribiendo el siguiente comando:

./myscript.sh

Deberías ver el siguiente resultado en tu terminal:

Welcome to my first Bash script!

Paso 3: Aprende los conceptos básicos de Bash con buenas prácticas

En este paso, explicaré algunos conceptos de scripting de Bash con buenas prácticas, que puede probar en el script creado recientemente para evaluar la salida.

Variables

  • Las variables siempre deben mencionarse en la forma en lugar de ${var}$var
  • Las variables siempre deben ir entre comillas, especialmente si su valor puede contener un espacio en blanco o un carácter separador: «${var}
# Correct
greeting="Hello, World!"
echo "${greeting}"  # Output: Hello, World!

# Incorrect
greeting=Hello, World!
echo $greeting 
Capitalización
  • Variables de entorno (exportadas): ${ALL_CAPS}
  • Variables locales: ${lower_case}
Preferir variables locales dentro de funciones sobre variables globales

Si necesita variables globales, hágalas de solo lectura:

readonly GLOBAL_VAR="Initial value"

GLOBAL_VAR="New value"  # This will generate an error

Matrices

Estas son algunas buenas prácticas para trabajar con matrices en Bash:

# Explicitly declare arrays to enhance code clarity and prevent unexpected behavior
my_array=()

# Initialize an array 
my_array=(1 2 3)  

# Retrieve third element 
${my_array[2]}

# Retrieve all elements 
${my_array[@]} 

# Retrieve array indices 
${!my_array[@]} 

# Calculate array size 
${#my_array[@]} 

# Overwrite 1st element 
my_array[0]=3

# Append value(s) 
my_array+=(4) 

# Save ls output as an array of files 
my_array=( $(ls) )

# Retrieve n elements starting at index s
${my_array[@]:s:n}

# Remove an element from an array
unset my_array[2]

# Iterate over array elements
for element in "${my_array[@]}"; do
    echo "${element}"
done

# Check if an array is empty
if [[ ${#my_array[@]} -eq 0 ]]; then
    echo "Array is empty"
fi

Utilice siempre la notación de parámetros larga cuando esté disponible

La notación larga hace que el script sea más legible, especialmente para comandos menos conocidos/utilizados para los que no recuerda todas las opciones.

# Good:
rm --recursive --force -- "${dir}"

# Avoid:
rm -rf -- "${dir}"

Hacer que sus scripts sean más robustos y resistentes a errores con salida y retorno

salida

Utilice códigos de salida ($?) para indicar el éxito o el fracaso del script. Convencionalmente, un código de salida de 0 indica éxito, mientras que cualquier valor distinto de cero representa un error o error.

Proporcione mensajes de error significativos al salir debido a un error, lo que facilita el diagnóstico y la solución de problemas.

# Exiting with an error message
if [[ ! -f "${file}" ]]; then
    echo "Error: File not found!"
    exit 1
fi
devolución

Utilice la instrucción return para indicar el éxito o el fracaso de una función devolviendo un código de salida. De forma similar al comando exit, convencionalmente, un código de salida de 0 representa éxito, mientras que los valores distintos de cero representan errores.

# Using return within a function and an if statement
function my_function() {
    if [[ "${var}" = "value" ]]; then
        echo "Condition met. Returning..."
        return 0
    fi
    # Rest of the function code
}

Ejemplo: Script de copia de seguridad automatizado

Ahora que ya conoces los conceptos básicos, vamos a crear un ejemplo más práctico. En este ejemplo, crearemos un script que haga una copia de seguridad automática de un directorio.

!/bin/bash

# Set the backup directory
BACKUP_DIR="/home/user/backup"

# Create the backup directory if it doesn't exist
if [[ ! -d "${BACKUP_DIR}" ]]; then
   mkdir "${BACKUP_DIR}"
fi

# Archive the directory and save it to the backup directory
tar --create --gzip --verbose --file "${BACKUP_DIR}/mybackup.tar.gz" /home/user/mydirectory

# Print a success message
echo "Backup complete!"

Este script establece el directorio de copia de seguridad, lo crea si no existe, archiva el directorio y lo guarda en el directorio de copia de seguridad. A continuación, imprime un mensaje de éxito.

Terminando

El scripting de Bash es una habilidad valiosa que puede ayudarlo a automatizar tareas y administrar configuraciones del sistema. Con los pasos y el ejemplo proporcionados en esta entrada del blog, debería ser capaz de escribir su primer script de Bash y empezar a explorar el poder del scripting de Bash.

Leandro Padula

Software development expert with a proven track record of delivering successful solutions for companies of all sizes.

Share this article

Deja un comentario

Related articles

Ready to get your project started?

Book a call