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.