Tu Primer Script: Estructura Básica

Crea tu primer script de Bash siguiendo las mejores prácticas desde el inicio

Módulo 2 ⏱️ 30-35 min 📝 Script 🔧 Práctico 📚 Principiante

¡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:

1

El Shebang (#!/bin/bash)

La primera línea le dice al sistema qué intérprete usar para ejecutar el script.

Shebang - Línea obligatoria Copiar
#!/bin/bash
¡Importante!

El shebang debe ser exactamente la primera línea del archivo, sin espacios antes del #. De lo contrario, no funcionará correctamente.

2

Comentarios de Encabezado

Documenta qué hace tu script, quién lo creó, y cuándo.

Encabezado documentado Copiar
#!/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
# =============================================================================
3

Configuraciones Iniciales

Configuraciones que hacen tu script más seguro y mantenible.

Configuraciones de seguridad Copiar
# 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
4

El Código Principal

Aquí va la lógica principal de tu script.

Lógica principal Copiar
# 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
Debug dentro del script Copiar
#!/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:

  1. Muestre un mensaje de bienvenida personalizado
  2. Pida al usuario su nombre
  3. Muestre información sobre su directorio home
  4. Liste los últimos 5 comandos del historial
  5. Muestre el espacio libre en disco
Plantilla para empezar Copiar
#!/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 "$@"