¿Qué es un archivo .sh? Guía de shell scripts, Bash y scripting Linux
- 4 de noviembre de 2025
- 22:51
- Tutoriales

Introducción
Los scripts shell son fundamentales para la administración de sistemas Linux y Unix: aportan potentes capacidades de automatización que mejoran significativamente la productividad y la eficiencia de la gestión de sistemas. Un fichero .sh es un script escrito en lenguaje shell, un lenguaje de programación especializado pensado para interpretar comandos y automatizar tareas repetitivas del sistema.
Tanto si eres administrador de sistemas con cientos de servidores, desarrollador que automatiza pipelines de despliegue o un entusiasta de Linux que quiere mejorar sus habilidades técnicas, entender los scripts shell es esencial. Esta guía completa explica qué son los ficheros .sh, cómo funcionan, las distintas implementaciones de shell y ejemplos prácticos de scripting del mundo real.
¿Qué es un fichero .sh?
Definición
A .sh file is a plain text file containing a series of shell commands executed sequentially by a shell interpreter. The .sh extension indicates the file is a shell script, though many shell scripts omit this extension in practice.
Los shell scripts representan el puente entre el uso interactivo de la línea de comandos y la programación completa. Permiten:
-
Automatizar tareas repetitivas
-
Combinar varios comandos en flujos de trabajo complejos
-
Crear herramientas de administración reutilizables
-
Programar operaciones de mantenimiento automatizadas
-
Desplegar aplicaciones de forma programática
Características
Plain Text Format: Unlike compiled programs requiring compilation, shell scripts are human-readable text interpreted directly by the shell.
Interpreter-Based: Execution depends on the specified shell interpreter (Bash, Ksh, etc.), not the underlying system architecture.
Línea shebang: La mayoría de los scripts shell comienzan con un shebang (#!/bin/bash) que especifica qué intérprete de shell usar.
Multiplataforma: Los scripts shell se ejecutan de forma consistente en diferentes sistemas Unix/Linux (asumiendo que los shells apropiados estén instalados).
Aplicaciones reales
-
Scripts de inicio y apagado del sistema
-
Automatización de backup y restauración
-
Monitorización y alertas de servidores
-
Pipelines de despliegue de aplicaciones
-
Procesamiento y análisis de archivos de log
-
Aprovisionamiento de cuentas de usuario
-
Automatización de la configuración de red
-
Tareas de mantenimiento de bases de datos
Fundamentos del shell scripting
¿Qué es un shell?
Un shell es un intérprete de comandos que proporciona una interfaz entre los usuarios y el núcleo del sistema operativo. Acepta comandos del usuario, los interpreta y ejecuta los programas correspondientes.
Funciones del shell:
-
Leer y analizar comandos del usuario
-
Buscar programas ejecutables
-
Ejecutar programas con argumentos apropiados
-
Manejar la redirección de entrada/salida
-
Gestionar el control de procesos
-
Implementar construcciones de programación (bucles, condicionales)
¿Por qué usar shell scripts?
Automation: Execute complex sequences automatically without manual intervention.
Efficiency: Complete in seconds what might take hours manually.
Consistencia: Asegure operaciones idénticas en múltiples sistemas.
Documentación: Los comentarios del script documentan los procedimientos para referencia futura.
Scalability: Scale operations from one server to hundreds without additional effort.
Recovery: Rebuild systems quickly using existing scripts.
Implementaciones de shell populares
Bash (Bourne-Again Shell)
Market Share: ~95% of Linux systems
Creator: Brian Fox (GNU Project)
Features: Integrales feature set, scripting capabilities
Sintaxis: Compatible con el shell Bourne original
Caso de uso: Predeterminado en la mayoría de distribuciones Linux
Bash es el estándar de facto para los shell scripts en Linux. Combina compatibilidad con los shells originales y funcionalidades modernas.
Ksh (Korn Shell)
Creator: David Korn (AT&T Bell Labs)
Features: Avanzado programming capabilities, faster execution
Syntax: Superset of Bourne shell
Use Case: Preferred on Unix systems (Solaris, AIX)
Advantages: Mejor performance for compute-intensive operations
Ksh sigue siendo común en entornos Unix empresariales, particularmente en sistemas Unix comerciales.
Sh (Bourne Shell)
Original POSIX Standard Shell
Creator: Stephen Bourne (AT&T Bell Labs)
Features: Mínimas, standardized functionality
Modern Status: Largely historical; contemporary shells provide compatibility
Sh representa el estándar POSIX, garantizando compatibilidad básica en todos los sistemas tipo Unix.
Zsh (Z Shell)
Creator: Paul Falstad
Features: Interactive features, scripting capabilities
Modern Focus: Enhanced user experience over pure scripting
Use Case: Growing in popularity among developers
Zsh representa la evolución moderna del shell, equilibrando potencia de scripting con funcionalidades interactivas amigables.
Tcsh/Csh
Csh Creator: Bill Joy (Berkeley)
Modern Version: Tcsh (enhanced csh)
Features: C-like syntax
Status: Declining usage, maintained primarily for compatibility
Las derivadas de Csh permanecen en algunos sistemas pero ofrecen ventajas decrecientes frente a Bash/Ksh.
Bash vs Ksh vs otras shells
Tabla comparativa
| Feature | Bash | Ksh | Zsh | Sh |
|---|---|---|---|---|
| Historial de comandos | Yes | Yes | Yes | No |
| Compleción de comandos | Basic | Basic | Avanzado | No |
| Matrices | Indexados | Indexados + Asociativos | Yes | No |
| Coincidencia de patrones | Patrones glob | Avanzado | Avanzado | Limitado |
| Funciones | Yes | Yes | Yes | Yes |
| Aritmética | $(()) |
(()) |
$(()) |
Limitado |
| Cumplimiento POSIX | ~95% | 100% | ~90% | 100% |
| Rendimiento | Good | Mejor | Good | Más rápido |
| Funciones de scripting | Integrales | Más avanzadas | Las más avanzadas | Mínimas |
| Compatibilidad | Excelente | Excelente | Good | Universal |
| Curva de aprendizaje | Moderada | Moderada | Más empinada | La más fácil |
| Uso típico | Linux predeterminado | Unix empresarial | Elección del desarrollador | Compatibility |
When to Choose Each Shell
Elegir Bash cuando:
-
Máxima compatibilidad con sistemas Linux
-
Trabajar con herramientas que esperan sintaxis Bash
-
Familiaridad del equipo con Bash
-
Entornos centrados en Linux
Elegir Ksh cuando:
-
Operaciones críticas en rendimiento
-
Unix empresarial environments
-
Que requieren funciones de programación avanzadas
-
Soportar sistemas Unix heredados
Elegir Zsh cuando:
-
Uso interactivo del shell priorizado
-
Avanzado user experience desired
-
Entornos centrados en desarrolladores
-
Distribuciones Linux modernas
Elegir Sh cuando:
-
Máxima portabilidad POSIX requerida
-
Soportar diversas plataformas Unix
-
Minimizar dependencias
-
Ejecución ligera esencial
Crear y ejecutar scripts shell
Creating a Basic Shell Script
Step 1: Create Filetouch myscript.sh
Step 2: Edit Filenano myscript.sh
Step 3: Add Shebang and Commands#!/bin/bash
echo "Hello, World!"
date
Step 4: Make Executablechmod +x myscript.sh
Step 5: Execute./myscript.sh
Execution Methods
Direct Execution (requires executable permissions)./myscript.sh
Explicit Interpreterbash myscript.sh
Source Command (executes in current shell)source myscript.sh
or
. myscript.sh
Understanding the Shebang
The shebang (#!) specifies which interpreter executes the script:#!/bin/bash # Use Bash
#!/bin/ksh # Use Ksh
#!/usr/bin/env bash # Use Bash via environment (more portable)
#!/usr/bin/python # Use Python interpreter
Sintaxis básica de un script shell
Variables
# Variable assignment (no spaces around =)
name="John"
age=30
# Using variables
echo "Name: $name"
echo "Age: $age"
# Command substitution
current_date=$(date)
file_count=$(ls -1 | wc -l)
# Arrays (Bash)
fruits=("Apple" "Banana" "Cherry")
echo ${fruits} # Access first element
Conditional Statements
# If-else
if [ $age -gt 18 ]; then
echo "Adult"else
echo "Minor"
fi
# Case statement
case $day in
Monday)
echo "Start of week"
;;
Friday) echo "End of week"
;;
*)
echo "Midweek"
;;esac
Loops
# For loopfor i in 1 2 3 4 5; do echo "Number: $i"done# While loop
count=0
while [ $count -lt 5 ]; do echo "Count: $count" ((count++))
done
# Until loop
until [ $count -eq 10 ]; do
echo "Count: $count" ((count++))
done
Functions
# Function definitiongreet() {echo "Hello, $1!"}# Function with return valueadd() {return $(($1 + $2))}# Function calls
greet "Alice"add 5 3echo "Sum: $?" # $? holds return valueConceptos avanzados de scripting
Error Handling
#!/bin/bashset -e # Exit on error# Check command successif ! command_name; then echo "Command failed" exit 1fi# Trap errorstrap 'echo "Error on line $LINENO"' ERR
File Operations
# File existence checkingif [ -f "/path/to/file" ]; then echo "File exists"fi# Directory operationsif [ -d "/path/to/dir" ]; thenecho "Directory exists"fi# Read file line-by-linewhile IFS= read -r line; doecho "Line: $line"done < filename.txt
User Input
# Read from userread -p "Enter your name: " name
# Read multiple valuesread -p "Enter values: " val1 val2 val3
# Read into arrayread -a array_nameEjemplos prácticos
System Backup Script
#!/bin/bash# Backup important directoriesBACKUP_DIR="/backup"TIMESTAMP=$(date +%Y%m%d_%H%M%S)echo "Starting backup..."# Create backup directorymkdir -p "$BACKUP_DIR"# Backup home directorytar -czf "$BACKUP_DIR/home_$TIMESTAMP.tar.gz" /home
# Backup system configurationtar -czf "$BACKUP_DIR/etc_$TIMESTAMP.tar.gz" /etc
echo "Backup complete: $BACKUP_DIR/home_$TIMESTAMP.tar.gz"
Disk Space Monitor
#!/bin/bashTHRESHOLD=80ALERT_EMAIL="[email protected]"# Check disk usagedisk_usage=$(df / | awk 'NR==2 {print $5}' | cut -d'%' -f1)if [ $disk_usage -gt $THRESHOLD ]; thenecho "Disk usage critical: $disk_usage%" | mail -s "Alert" $ALERT_EMAILecho "Alert sent to $ALERT_EMAIL"fi
User Account Provisioning
#!/bin/bashread -p "Enter username: " usernameread -p "Enter email: " email
# Create useruseradd -m -s /bin/bash "$username"# Set password (prompt method recommended)echo "Set password for $username:"passwd "$username"# Add to groupsusermod -aG sudo "$username"echo "User $username created successfully"Por qué la administración de servidores remotos usa scripts shell
Los administradores de sistemas que gestionan servidores remotos mediante conexiones RDP o SSH ejecutan frecuentemente scripts shell para:
-
Despliegues automatizados: Implemente aplicaciones en múltiples servidores simultáneamente
-
Mantenimiento del sistema: Programe y ejecute tareas de mantenimiento rutinarias
-
Monitoring: Continuously monitor system health and log anomalies
-
Backup Operations: Automate critical data backup procedures
-
Actualizaciones de seguridad: Despliegue parches de seguridad en la infraestructura
Professional remote desktop management platforms like RDP.Monster enable shell script execution across enterprise infrastructure:
Gestión de infraestructura Linux con RDP.Monster
Gestión Linux empresarial
-
Acceso SSH para ejecución remota de scripts shell
-
Capacidades de despliegue automatizado
-
Operaciones por lotes en múltiples servidores
-
Monitorización y alertas en tiempo real
Soluciones VPS para infraestructura de scripts
-
Recursos dedicados para scripts intensivos en cómputo
-
Programación persistente de cron jobs
-
Tiempo de actividad confiable para operaciones programadas
-
Infraestructura escalable para una complejidad creciente de scripts
Deploy enterprise Linux infrastructure for sophisticated shell script operations with RDP.Monster
Conclusión
Shell scripts represent a powerful automation tool essential for Linux system administration and development. Understanding .sh files, shell implementations, and scripting techniques enables IT professionals to dramatically increase productivity, ensure consistency, and manage complex infrastructure efficiently.
Ya sea utilizando Bash en Linux, Ksh en Unix empresarial o Zsh para desarrollo interactivo, dominar el scripting shell separa a los administradores capaces de los meramente competentes. La inversión en desarrollar habilidades sólidas de scripting proporciona retornos durante décadas de gestión de sistemas Linux.
Managing complex Linux infrastructure requiring sophisticated automation? RDP.Monster provides SSH access and VPS infrastructure optimized for running mission-critical shell scripts at scale. Explore Linux-friendly VPS solutions today.
Hosting VPS Linux potente
Obtén control total y rendimiento increíble con nuestros VPS Linux. Perfecto para alojar aplicaciones, administrar servidores y optimizar tu workflow.
Servidores dedicados de alto rendimiento
¿Necesitas máximo control y potencia? Nuestros servidores dedicados ofrecen un rendimiento inigualable para tareas exigentes.
Preguntas frecuentes
¿Cuál es la diferencia entre scripts .sh y bash?
Un script bash funciona como .sh, pero no todos los scripts .sh son bash.
¿Debería usar #!/bin/bash o #!/usr/bin/env bash?
¿Por qué mis scripts fallan cuando se ejecutan desde cron?
Usa rutas absolutas, define las variables de entorno de forma explícita y especifica la ruta completa del intérprete en el shebang.
¿Cómo hago ejecutable un script?
¿Puedo ejecutar scripts shell en Windows?
Windows nativo prefiere PowerShell para automatización.
¿Cuál es la diferencia entre los comandos . y source?
source es más explícito; . es compatible con shells más antiguos.
¿Cómo depuro un script shell?
Usa bash -x scriptname.sh para una traza línea a línea, o añade set -x dentro del script.
¿Puedo pasar argumentos a los scripts shell?
Usa parámetros posicionales: $1 (primer argumento), $2 (segundo), etc. $@ contiene todos los argumentos.




