Introducción a lenguajes de programación
Los sistemas informáticos únicamente procesan código binario (ceros y unos). Para facilitar la programación, existen herramientas que traducen código legible para humanos a formato binario mediante compiladores e intérpretes.
Lenguajes compilados
El código fuente se transforma completamente mediante un compilador antes de su ejecución. Ejemplos: C, C++, Go.
- Ventajas: Alto rendimiento y velocidad de ejecución.
- Desventajas: Ciclo de desarrollo más largo, menor portabilidad entre plataformas.
- Aplicaciones: Sistemas operativos, aplicaciones de alto rendimiento, desarrollo de bajo nivel.
Lenguajes interpretados
Un intérprete lee y ejecuta el código línea por línea en tiempo de ejecución. Ejemplos: Bash, Python, JavaScript.
- Ventajas: Mayor portabilidad, ciclo de desarrollo ágil.
- Desventajas: Menor velocidad de ejecución.
- Aplicaciones: Scripts de automatización, prototipado rápido, tareas auxiliares.
¿Qué es la Shell?
La Shell actúa como intermediaria entre el usuario y el núcleo del sistema operativo. Interpreta los comandos introducidos por el usuario y los traduce en operaciones que el kernel puede ejecutar.
En sistemas Linux, las implementaciones más comunes se encuentran en:
$ cat /etc/shells
/bin/sh # Versión reducida de bash
/bin/bash # Implementación estándar en la mayoría de distribuciones
/usr/bin/bash # Variante ligera con funcionalidades básicas
/bin/zsh # Shell alternativa con características avanzadas
/bin/fish # Shell orientada a facilidad de uso
La terminal es simplemente la interfaz gráfica que permite interactuar con la Shell.
Scripts de Shell
Un script de Shell combina múltiples comandos con sintaxis específica para automatizar tareas. Las aplicaciones típicas incluyen:
- Despliegue automatizado de servicios web (Apache, Nginx)
- Administración masiva de sistemas y configuraciones
- Respaldos programmados de bases de datos y archivos
- Recopilación y aálisis de métricas del sistema
- Supervisión continua de recursos y servicios
Estructura básica de un script
#!/usr/bin/env bash
# Autor: María García
# Descripción: Script de ejemplo para gestión de usuarios
# Ruta: /opt/scripts/crear_usuario.sh
# Uso: bash /opt/scripts/crear_usuario.sh
# Última modificación: 2024/01/15
echo "Iniciando proceso..."
Formas de ejecutar un script
Con permisos de ejecución:
# Asignar permisos y ejecutar con ruta relativa
$ chmod +x gestor.sh
$ ./gestor.sh
# Ejecutar con ruta absoluta
$ /opt/scripts/gestor.sh
Sin permisos de ejecución (usando el intérprete):
# Verificar sintaxis sin ejecutar
$ bash -n gestor.sh
# Ejecutar mostrando cada paso
$ bash -x gestor.sh
# Ejecutar en el shell actual (las variables persisten)
$ source gestor.sh
# Alternativa equivalente a source
$ . gestor.sh
Reglas para nombres de variables
Distinción entre mayúsculas y minúsculas
$ ciudad="Madrid"
$ CIUDAD="BARCELONA"
$ echo "$ciudad"
Madrid
$ echo "$CIUDAD"
BARCELONA
Caracteres permitidos en nombres
Los nombres de variables solo pueden contener letras, números y guiones bajos. No pueden empezar con números ni contener caracteres especiales.
# Correcto
$ usuario1="admin"
$ _temporal="valor"
$ ruta_archivo="/etc/hosts"
# Incorrecto - genera errores
$ !intentar=123
bash: !intentar=123: event not found
$ 2variable="dato"
bash: 2variable="dato": orden no encontrada
Espacios en valores de variables
Cuando el valor contiene espacios, es obligatorio usar comillas simples o dobles:
# Sin comillas - ERROR
$ saludo=hola mundo
bash: mundo: orden no encontrada
# Con comillas simples - CORRECTO
$ saludo='hola mundo'
$ echo "$saludo"
hola mundo
# Con comillas dobles - CORRECTO
$ mensaje="bienvenido al sistema"
$ echo "$mensaje"
bienvenido al sistema
Espacios alrededor del oeprador de asignación
# Correcto
$ limite=100
# Incorrecto
$ limite = 100
bash: limite: orden no encontrada
Métodos para definir variables
Asignación directa
# Sintaxis básica
$ nombre_aplicacion="MiApp"
$ version="3.2.1"
# Formas de acceder al valor
echo "$nombre_aplicacion"
echo "${nombre_aplicacion}"
# La sintaxis ${} permite extraer substrings
$ codigo="ABCDE12345"
echo "${codigo:0:5}"
ABCDE
echo "${codigo:5}"
12345
Asignación desde la salida de un comando
# Método con backticks
fecha_actual=`date +%Y-%m-%d`
echo "$fecha_actual"
2024-01-15
# Método con $() - recomendado por mayor legibilidad
hora_sistema=$(date +%H:%M:%S)
echo "$hora_sistema"
14:30:25
# Capturar el resultado de comandos complejos
directorio_trabajo=$(pwd)
total_archivos=$(ls -1 | wc -l)
echo "Estamos en: $directorio_trabajo"
echo "Hay $total_archivos archivos aquí"
Entrada interactiva con read
El comando read permite solicitar datos al usuario durante la ejecución del script.
Parámetros principales:
-p: Texto de提示�示 para el usuario-s: Oculta la entrada (útil para contraseñas)-n: Limita la cantidad de caracteres a leer-t: Establece un límite de tiempo en segundos
# Solicitar nombre de usuario
read -p "Introduce tu nombre de usuario: " usuario
echo "Bienvenido, $usuario"
# Solicitar contraseña oculta
read -s -p "Contraseña: " clave
echo ""
echo "Contraseña capturada correctamente"
# Ejemplo completo con múltiples opciones
read -s -n 8 -t 30 -p "Clave de acceso (máx 8 chars, 30s): " passwd
echo ""
echo "Longitud de clave: ${#passwd} caracteres"
Lectura desde archivos:
# Archivo datos_red.txt con contenido:
# 10.0.0.1 255.255.255.0 10.0.0.254
read ip_cliente mascara puerta_enlace < datos_red.txt
echo "IP: $ip_cliente"
echo "Máscara: $mascara"
echo "Gateway: $puerta_enlace"
Nota importante: Al leer múltiples variables desde un archivo, todos los valores deben estar en una sola línea separados por espacios.
Variables con tipos definidos (declare)
El comando declare permite restringir el tipo de dato que una variable puede almacenar.
# Variable entera - rechaza valores no numéricos
declare -i contador=100
echo "$contador" # Muestra: 100
contador=250
echo "$contador" # Muestra: 250
contador="texto"
echo "$contador" # Muestra: 0 (valor por defecto)
# Variable de solo lectura - no se puede modificar
declare -r PI=3.14159
PI=3.14
bash: PI: variable de solo lectura
# Variable como variable de entorno (exportable)
declare -x TOKEN_SESION="abc123xyz"
env | grep TOKEN
TOKEN_SESION=abc123xyz
Resumen de reglas y métodos
Convenciones para nombres
- Los nombres pueden contener letras, números y guiones bajos
- No deben comenzar con un dígito
- Prohibido usar caracteres especiales (!, @, #, $, etc.)
- No se permiten espacios alrededor del signo
= - La distinción mayúsculas/minúsculas es importante
- Los valores con espacios requieren comillas
- Usar nombres descriptivos mejora la legibilidad del código
Sintaxis de los cuatro métodos
# 1. Asignación directa
variable="valor"
echo "$variable"
# 2. Resultado de un comando
variable=$(comando)
variable=`comando`
# 3. Entrada del usuario
read -p "Mensaje: " variable
read variable1 variable2 < archivo.txt
# 4. Con tipo específico
declare -i entero=42
declare -r constante="fijo"
declare -x exportada="valor"