¡Manos a la obra!
Es hora de crear tu primer script en Bash. Un script es simplemente un archivo de texto que contiene una serie de comandos que el shell puede ejecutar secuencialmente. Piénsalo como una receta: una lista de pasos que la computadora seguirá al pie de la letra.
¿Por qué usar scripts?
- Automatización: Ejecuta tareas repetitivas automáticamente
- Consistencia: Los mismos pasos, cada vez
- Eficiencia: Ahorra tiempo y reduce errores humanos
- Documentación: Los scripts sirven como documentación de procesos
Anatomía de un Script Bash
Todo script de Bash bien estructurado tiene ciertos elementos esenciales. Vamos a construir nuestro primer script paso a paso:
El Shebang (#!/bin/bash)
La primera línea le dice al sistema qué intérprete usar para ejecutar el script.
#!/bin/bash
¡Importante!
El shebang debe ser exactamente la primera línea del archivo, sin espacios antes del #
. De lo contrario, no funcionará correctamente.
Comentarios de Encabezado
Documenta qué hace tu script, quién lo creó, y cuándo.
#!/bin/bash
# =============================================================================
# Script: mi_primer_script.sh
# Descripción: Mi primer script en Bash que saluda al usuario
# Autor: Tu Nombre
# Fecha: $(date +%Y-%m-%d)
# Versión: 1.0
# =============================================================================
Configuraciones Iniciales
Configuraciones que hacen tu script más seguro y mantenible.
# Configuraciones de seguridad
set -euo pipefail # Salir si hay errores, variables no definidas, o errores en pipes
# Variables globales
readonly SCRIPT_NAME="${0##*/}"
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
¿Qué significa set -euo pipefail?
-e
: Salir inmediatamente si un comando falla-u
: Tratar variables no definidas como errores-o pipefail
: Un pipe falla si cualquier comando en el pipe falla
El Código Principal
Aquí va la lógica principal de tu script.
# Función principal
main() {
echo "¡Hola! Bienvenido a tu primer script de Bash"
echo "Este script se ejecuta desde: ${SCRIPT_DIR}"
echo "Nombre del script: ${SCRIPT_NAME}"
echo "Usuario actual: $(whoami)"
echo "Fecha y hora: $(date)"
}
# Ejecutar función principal
main "$@"
Creando Tu Primer Script
Ahora vamos a crear nuestro primer script completo paso a paso:
# Paso 1: Crear el archivo del script
$ nano mi_primer_script.sh
# O si prefieres vim:
$ vim mi_primer_script.sh
# O usando echo para crear el archivo completo:
$ cat > mi_primer_script.sh << 'EOF'
#!/bin/bash
# =============================================================================
# Script: mi_primer_script.sh
# Descripción: Mi primer script en Bash que saluda al usuario y muestra información del sistema
# Autor: Tu Nombre
# Fecha: 2024-10-15
# Versión: 1.0
# =============================================================================
# Configuraciones de seguridad
set -euo pipefail
# Variables globales
readonly SCRIPT_NAME="${0##*/}"
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Función para mostrar información del sistema
mostrar_info_sistema() {
echo "=================================="
echo " INFORMACIÓN DEL SISTEMA"
echo "=================================="
echo "Sistema operativo: $(uname -s)"
echo "Versión del kernel: $(uname -r)"
echo "Arquitectura: $(uname -m)"
echo "Hostname: $(hostname)"
echo "Uptime: $(uptime -p)"
echo "=================================="
}
# Función para saludar al usuario
saludar_usuario() {
local usuario=$(whoami)
local fecha=$(date "+%A, %d de %B de %Y")
local hora=$(date "+%H:%M:%S")
echo "¡Hola, ${usuario}!"
echo "Hoy es ${fecha}"
echo "Son las ${hora}"
echo ""
}
# Función principal
main() {
clear
echo "🚀 Ejecutando: ${SCRIPT_NAME}"
echo "📁 Ubicación: ${SCRIPT_DIR}"
echo ""
saludar_usuario
mostrar_info_sistema
echo ""
echo "✅ Script ejecutado exitosamente"
}
# Ejecutar función principal si el script se ejecuta directamente
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
main "$@"
fi
# Cerrar el archivo (si usaste cat)
EOF
# Paso 2: Hacer el script ejecutable
$ chmod +x mi_primer_script.sh
# Paso 3: Verificar los permisos
$ ls -l mi_primer_script.sh
-rwxrwxr-x 1 usuario usuario 1234 oct 15 10:30 mi_primer_script.sh
# Paso 4: Ejecutar el script
$ ./mi_primer_script.sh
Salida esperada:
🚀 Ejecutando: mi_primer_script.sh
📁 Ubicación: /home/usuario/scripts
¡Hola, usuario!
Hoy es lunes, 15 de octubre de 2024
Son las 10:30:45
==================================
INFORMACIÓN DEL SISTEMA
==================================
Sistema operativo: Linux
Versión del kernel: 5.4.0-88-generic
Arquitectura: x86_64
Hostname: mi-servidor
Uptime: up 2 days, 5 hours, 23 minutes
==================================
✅ Script ejecutado exitosamente
Buenas Prácticas Esenciales
Haz Esto
- ✅ Siempre incluye el shebang
- ✅ Usa
set -euo pipefail
- ✅ Documenta tu código
- ✅ Usa nombres descriptivos
- ✅ Organiza en funciones
- ✅ Valida entrada de usuarios
Evita Esto
- ❌ Scripts sin shebang
- ❌ Código sin comentarios
- ❌ Variables sin comillas
- ❌ No manejar errores
- ❌ Nombres de variables poco claros
- ❌ Todo en una sola función gigante
Debugging y Ejecución
Herramientas útiles para debuggear y ejecutar tus scripts:
# Ejecutar con debug (muestra cada comando antes de ejecutarlo)
$ bash -x mi_primer_script.sh
# Verificar sintaxis sin ejecutar
$ bash -n mi_primer_script.sh
# Ejecutar con verbose (muestra líneas conforme se leen)
$ bash -v mi_primer_script.sh
# Combinar opciones de debug
$ bash -xv mi_primer_script.sh
#!/bin/bash
# Activar debug para secciones específicas
set -x # Activar debug
comando_complejo
otro_comando
set +x # Desactivar debug
# O usar para todo el script
set -x # Al inicio del script
Ejercicio Práctico
Tu Desafío
Crea un script llamado info_personal.sh
que:
- Muestre un mensaje de bienvenida personalizado
- Pida al usuario su nombre
- Muestre información sobre su directorio home
- Liste los últimos 5 comandos del historial
- Muestre el espacio libre en disco
#!/bin/bash
# Tu información aquí
set -euo pipefail
readonly SCRIPT_NAME="${0##*/}"
# Función para pedir nombre
pedir_nombre() {
read -p "¿Cuál es tu nombre? " nombre
echo "¡Hola, ${nombre}!"
}
# Función para mostrar info del home
mostrar_info_home() {
echo "Tu directorio home es: ${HOME}"
echo "Archivos en tu home:"
ls -la "${HOME}" | head -10
}
# ¡Completa el resto!
main() {
echo "=== INFORMACIÓN PERSONAL ==="
pedir_nombre
mostrar_info_home
# Agregar más funciones aquí
}
main "$@"