Crear scripts de shell simples
Automatización básica y lógica de programación con Bash
1. Ejecutar código condicionalmente (if,test,[]...)
Los scripts de shell permiten ejecutar comandos de forma automática. El control condicional se realiza principalmente con if, test y los corchetes de evaluación.
El shebang (#!) indica qué intérprete ejecutará el script (#!/bin/bash), usando luego comandos como read para guardar datos, echo para mostrar resultados.
Debemos recordar que siempre que editemos un archivo para crear un script habrá que darle permisos de ejecución con chmod +x nombre-script.
Operadores lógicos de archivos:
- -e : Existe archivo/dir
- -f : Es archivo regular
- -d : Es un directorio
- -r/w/x : Permisos r, w o x
Comparación de cadenas y números:
- Cadenas:
-z(vacía),-n(no vacía),=(igual),!=(distinta). - Números:
-eq(==),-ne(!=),-lt(<),-gt(>),-ge(>=).
En Bash, los espacios dentro de [ ] son obligatorios: [ "$num" -eq 5 ] es correcto, mientras que ["$num"-eq5] fallará.
Condiciones compuestas y [[ ]]:
En el scripting moderno se utilizan los dobles corchetes [[ ]] por ser más seguros. Soportan operadores estándar:
- && (AND), || (OR), ! (NOT), == (Igualdad), != (Desigualdad).
También disponemos de case para múltiples opciones de forma más limpia:
2. Uso de bucles para procesar archivos y entradas
Bucle for: Ideal para iterar sobre una lista conocida de elementos, archivos o salidas de comandos.
Bucle while: Ideal para lecturas línea a línea (con read) o contadores. Podemos usar IFS para definir separadores en archivos como CSV.
Usamos for cuando conocemos los elementos a recorrer, while mientras una condición sea verdadera y until mientras sea falsa.
3. Procesar entradas de scripts
Los scripts pueden recibir argumentos desde la línea de comandos. Estos son los tipos principales:
- $0 → Nombre del script.
- $1, $2... → Argumentos posicionales individuales.
- $# → Número total de argumentos recibidos.
- $@ → Lista de todos los argumentos.
- $? → Estado de salida del último comando (0 = éxito).
- $? → Estado del script
Podemos forzar la finalización de un script con un código de error específico usando exit 1.
4. Procesar la salida de comandos dentro de un script
La salida de comandos puede almacenarse en variables usando la sintaxis $(comando).
Esto permite capturar información del sistema para procesarla más tarde o redirigirla, combinándola con lo aprendido en la Clase 1 sobre redirecciones de flujo.