Funciones Puras

This commit is contained in:
2025-12-08 18:59:14 +01:00
parent 392b45e2a5
commit be86b7441f
4 changed files with 126 additions and 18 deletions

11
.obsidian/graph.json vendored
View File

@@ -5,7 +5,7 @@
"showAttachments": false,
"hideUnresolved": false,
"showOrphans": true,
"collapse-color-groups": true,
"collapse-color-groups": false,
"colorGroups": [
{
"query": "SQL",
@@ -13,6 +13,13 @@
"a": 1,
"rgb": 16514816
}
},
{
"query": "Bash Scripting Avanzado",
"color": {
"a": 1,
"rgb": 11403519
}
}
],
"collapse-display": true,
@@ -25,6 +32,6 @@
"repelStrength": 10,
"linkStrength": 1,
"linkDistance": 250,
"scale": 0.9999999999999993,
"scale": 0.6666666666666659,
"close": true
}

View File

@@ -13,12 +13,12 @@
"state": {
"type": "markdown",
"state": {
"file": "README.md",
"mode": "source",
"file": "Documentación personal/Mecanica de Unix/Bash Scripting Avanzado/Funciones puras.md",
"mode": "preview",
"source": false
},
"icon": "lucide-file",
"title": "README"
"title": "Funciones puras"
}
}
]
@@ -53,7 +53,7 @@
"state": {
"type": "search",
"state": {
"query": "",
"query": "tag:#Temario-BSA",
"matchingCase": false,
"explainSearch": false,
"collapseAll": false,
@@ -74,11 +74,13 @@
"title": "Marcadores"
}
}
]
],
"currentTab": 1
}
],
"direction": "horizontal",
"width": 221.5
"width": 221.5,
"collapsed": true
},
"right": {
"id": "519d5773673c1040",
@@ -196,16 +198,19 @@
},
"active": "6baa04c1fda7d92f",
"lastOpenFiles": [
"Documentación personal/Mecanica de Unix/Bash Scripting Avanzado/Funciones puras.md",
"Documentación personal/Mecanica de Unix/Mecánica Unix - Manejo de la shell.md",
"Documentación personal/Mecanica de Unix/Bash Scripting/Fundamentos de Bash.md",
"README.md",
"Documentación personal/Mecanica de Unix/Bash Scripting/Sin nombre",
"Documentación personal/Lenguajes de programación absurdos",
"BDD/SQL/Importación y exportación de base de datos.md",
"Documentación personal/Mecanica de Unix/Bash Scripting/s.md",
"Documentación personal/Mecanica de Unix/Bash Scripting",
"Documentación personal/Mecanica de Unix/Bash Scripting Avanzado",
"Documentación personal/Mecanica de Unix",
"BDD/SQL/Diario/Clase 4 de diciembre.md",
"BDD/SQL/Lenguaje de Manupulación de Datos (DML).md",
"BDD/SQL/Lenguaje de definición de datos (DDL).md",
"README.md",
"Documentación personal/Seguridad-Informatica/Vista General 1.canvas",
"Documentación personal/Seguridad-Informatica/desktop.ini",
"Documentación personal/Seguridad-Informatica/Tipos de ataque/Worm/Metodos/desktop.ini",
@@ -214,7 +219,6 @@
"Documentación personal/Seguridad-Informatica/Tipos de ataque/Virus/Metodos/desktop.ini",
"Documentación personal/Seguridad-Informatica/Tipos de ataque/Trojan/Metodos/desktop.ini",
"Documentación personal/Seguridad-Informatica/Tipos de ataque/Spyware/Metodos/desktop.ini",
"Documentación personal/Seguridad-Informatica/Tipos de ataque/Sniffing/Metodos/desktop.ini",
"Documentación personal/Seguridad-Informatica/Tipos de ataque/XSS/Cross-Site Scripting (XSS).md",
"Documentación personal/Seguridad-Informatica/Tipos de ataque/Worm/Gusano.md",
"Documentación personal/Seguridad-Informatica/Tipos de ataque/Virus/Virus informatico.md",
@@ -231,7 +235,6 @@
"Documentación personal/Seguridad-Informatica/Tipos de ataque/Exploit/Exploits.md",
"Documentación personal/Seguridad-Informatica/Tipos de ataque/DoS/DoS.md",
"Documentación personal/Seguridad-Informatica/Tipos de ataque/DDoS/DDoS.md",
"Documentación personal/Seguridad-Informatica/Tipos de ataque/Brute Force/Ataque a fuerza bruta.md",
"Documentación personal/Seguridad-Informatica/1_Imagenes/tools/software/specops.svg",
"Documentación personal/Seguridad-Informatica/1_Imagenes/tools/software/satan.png",
"Documentación personal/Seguridad-Informatica/1_Imagenes/tools/software/nessuslogo.png",

View File

@@ -0,0 +1,40 @@
#Temario-BSA - Bash Scripting Avanzado
---
## ¿Qué es una "Función Pura"?
En programación, el concepto de la programación pura es aquella función que no cause efectos secundarios en el programa, cuyas funciones estén aisladas del resto del programa y no afecten a nada más que a lo que se le pide que haga.
### Un ejemplo de una "Función Impura":
```SHELL
contador=0 # Esto es un estado global
incrementar() {
#Efecto secundario: Se esta modificando una variable externa
contador=$((contador + 1))
}
incrementar
echo $contador # imprimirá 1
incrementar
echo $contador # imprimirá 2 (¡El resultado cambió sin cambiar imputs!)
```
Esta función depende de una variable global y la modifica. Si la ejecutas dos veces, el resultado cambia aunque no le pases argumentos.
### Un ejemplo de una "Función Pura":
```SHELL
sumar() {
# 1. Se usa 'local' para aislar variables del resto del script
local num1=$1
local num2=$2
local resultado=$((num1 + num2))
# 2. 'Devolver' el valor por salida estándar (stdout)
echo "$resultado"
}
# Uso: Capturamos la salida
total=$(sumar 10 5)
echo "El total es: $total"
```
Esta función es aislada. Recibe datos, calcula y "devuelve" el dato imprimiéndolo (stdout), sin tocar nada más.

View File

@@ -1,13 +1,71 @@
En este apartado, me dedico a aprender todo lo que tiene que ver con la terminal. Pondré obviamente apuntes sobre lo que ya sé y sobre lo que no.
Lo que voy a apuntar va a ser:
- Bash Scripting (Hasta nivel avanzado)
- `awk`, `sed` y `grep`.
- Señales, pipes, TTY, pseudo terminales
- ncurses
- Procesamiento de ficheros grandes en la terminal
# Lo que voy a apuntar va a ser:
---
### 1. Bash Scripting Avanzado
Aquí no se va a tratar solo de escribir scripts, sino de:
- [[Funciones puras]]
- Patrones de diseño en bash
- Trampas (`traps`)
- Señales
- Expansión de parámetros
- Arrays asociativos
- Subshells
- Procesos hijos y paralelismo (`&`, `wait`, `coproc`)
- Seguridad en scripts (validación, sanitización, quoting correcto)
*Y esto aporta:*
**Automatización de sistemas enteros y escritura de pipelines complejos.**
---
### 2. awk/sed/grep a nivel serio
- Parsing avanzado de logs
- Extracción de datos estructurados
- Reescritura de texto
- Creación de mini-lenguajes personalizados
- Manipulación de CSV, JSON simplificado, logs de sistemas
*Y esto aporta:*
Con awk, puedo literalmente escribir programas completos.
Podría hacer un analizador sintáctico, un intérprete simple o un procesador de logs en tiempo real.
---
### 3. Señales, pipes. TTYs y pseudoterminales
- Funcionamiento de una terminal
- Comunicacion entre procesos
- Que pasa por debajo de un pipe
- Funcionamiento de los PTY con `except`, `script`, `ssh`, `tmux`
- Control de procesos con señales (`SIGINT`, `SIGTERM`, `SIGHUP`)
- Capturar e interpretar señales de scripts propios
*Y esto aporta:*
**Entendimiento de Linux desde dentro.**
---
### 4. ncurses
- Creación de interfaces interactivas
- Menús
- Ventanas
- Teclas especiales
- Actualización dinámica de pantalla sin flickering
*Y esto aporta:*
Podría crear programas como `htop`, mini editor de texto... Hasta un navegador interactivo que imprima HTML parseado (esto es sadomasoquismo, pero lo voy a hacer igualmente).
---
### 5. Procesamiento de ficheros MUY grandes
- Streaming (line by line)
- Evitar cargar la RAM por completo
- `split`, `parallel`, `pv`
- Ordenar grandes cantidades de datos sin reventar la memoria (`sort` con flags correctos)
- Map-reduce cutre en bash
*Y esto aporta:*
Analisis de **Big Data** chapucero, pero cumpliré con la función.
### Cuál es el objetivo de esto:
Aprender y profundizar aún más en lo que ya sé y conozco. Tengo pensado dedicarle aproximadamente entre 1 y 2 meses solo a esto.
Me deja conocimiento como la dominación de la terminal de forma completa, entender Linux desde la raíz, automatización sin dependencia de lenguajes externos, analizado, procesado y transformación de datos masivos, creación de herramientas internas de consola, depuración de sistemas con logs y pipes, creación de interfaces CLI y la construcción de una infraestructura funcional con bash.
Al final de todo, tengo pensado hacer algunos proyectos absurdos, como por ejemplo, un navegador hecho solo con Bash. Es complicado (y roza lo masoquista), pero divertido.