diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index af1bf44..126baa0 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -13,12 +13,12 @@ "state": { "type": "markdown", "state": { - "file": "BDD/SQL/Disparadores.md", - "mode": "source", + "file": "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/Ejercicios - Funciones puras.md", + "mode": "preview", "source": false }, "icon": "lucide-file", - "title": "Disparadores" + "title": "Ejercicios - Funciones puras" } }, { @@ -27,16 +27,15 @@ "state": { "type": "markdown", "state": { - "file": "README.md", + "file": "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Extra.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "README" + "title": "Extra" } } - ], - "currentTab": 1 + ] } ], "direction": "vertical" @@ -237,10 +236,15 @@ "obsidian-git:Open Git source control": false } }, - "active": "620cc3e7430b0ac1", + "active": "34eecf2b06cedd2e", "lastOpenFiles": [ - "Documentación personal/Mecanica de Unix/Mecánica Unix - Manejo de la shell.md", + "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Extra.md", + "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/validador_de_contraseñas.sh~", + "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/Ejercicios - Funciones puras.md", + "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/test", "BDD/SQL/Disparadores.md", + "README.md", + "Documentación personal/Mecanica de Unix/Mecánica Unix - Manejo de la shell.md", "BDD/SQL/Lenguaje de definición de datos (DDL).md", "BDD/SQL/Lenguaje de Manupulación de Datos (DML).md", "BDD/SQL/Procedimientos almacenados.md", @@ -248,10 +252,8 @@ "BDD/SQL/SQL.md", "BDD/SQL/Sintaxis (Keywords).md", "BDD/SQL/Importación y exportación de base de datos.md", - "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/Ejercicios - Funciones puras.md", "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Funciones puras.md", "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Arrays asociativos.md", - "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Extra.md", "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/validador_de_contraseñas.sh", "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/verificador-de-", "BDD/SQL/Diario/Clase 4 de diciembre.md", @@ -268,13 +270,9 @@ "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Procesos hijos y paralelismo.md", "conflict-files-obsidian-git.md", "Programación/PHP/PHP", - "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Trampas (traps).md", - "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Señales.md", "Documentación personal/Mecanica de Unix/Sin nombre", "Servidores/M5/Actividades", "Servidores/M5/Actividades/RA2", - "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/calculadora_modular.sh", - "Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios", "Documentación personal/Seguridad-Informatica/Vista General 1.canvas", "Documentación personal/Seguridad-Informatica/1_Imagenes/tools/software/specops.svg", "Documentación personal/Seguridad-Informatica/1_Imagenes/tools/software/satan.png", diff --git a/Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/.validador_de_contraseñas.sh.swp b/Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/.validador_de_contraseñas.sh.swp new file mode 100644 index 0000000..4c1b28e Binary files /dev/null and b/Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/.validador_de_contraseñas.sh.swp differ diff --git a/Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/Ejercicios - Funciones puras.md b/Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/Ejercicios - Funciones puras.md index 6fcd2a0..1e89e0c 100644 --- a/Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/Ejercicios - Funciones puras.md +++ b/Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/Ejercicios - Funciones puras.md @@ -79,6 +79,81 @@ Objetivo: Que detecte la longitud y cantidad de caracteres especiales y dará el ```Shell #!/bin/bash # Funciones Puras +# En caso de muchos condicionales +# Recurrir a negaciones +longitud() { + local passwd=$1 + local long=${#passwd} + if [[ "$long" -gt 8 ]]; then + echo "PWD_GT_8" + else + echo "PWD_LT_8" + fi +} +minusculas() { + local passwd=$1 + if [[ "$passwd" =~ [a-z] ]]; then + echo "MINLETTERS" + else + echo "NO_MINLETTERS" + fi +} +mayusculas () { + local passwd=$1 + if [[ "$passwd" =~ [A-Z] ]]; then + echo "MAYLETTERS" + else + echo "NO_MAYLETTERS" + fi +} +numeros () { + local passwd=$1 + if [[ "$passwd" =~ [0-9] ]]; then + echo "NUMBERS" + else + echo "NO_NUMBERS" + fi +} +caracteresE () { + local passwd=$1 + if [[ "$passwd" =~ [^a-zA-Z0-9] ]]; then #Caso curioso: Se recurre a la negacion, ya que si existe un + #caracter especial, este no estará en las tablas de mayuscula, minuscula ni numeros. + echo "ECARACTERS" + else + echo "NO_ECARACTERS" + fi +} +validador () { + local passwd=$1 + local long=$(longitud "$passwd") + local min=$(minusculas "$passwd") + local may=$(mayusculas "$passwd") + local num=$(numeros "$passwd") + local carE=$(caracteresE "$passwd") + res=("$long" "$min" "$may" "$num" "$carE") + local puntuacion=0 + local totcriterios=5 + + for i in "${res[@]}"; do + if [[ $i = "PWD_GT_8" || $i = "MINLETTERS" || $i = "MAYLETTERS" || $i = "NUMBERS" || $i = "ECARACTERS" ]]; then + ((puntuacion++)) # Esto tiene un error de sintaxis aritmetica: Se esperaba un operando (el elemento de error es "+"). El error sale cuando no se introduce uno de los valores anteriores, como por ejemplo, no poner ningun simbolo. + #Update: EUREKA! Al poner $, bash expande el valor antes de la operacion aritmetica. + #Si la puntuacion vale 0, bash intenta ejecutar ((0++)). + fi + done + ((porcentaje=puntuacion * 100 / totcriterios)) + if [[ "$porcentaje" -lt 41 ]]; then + echo "Weak" + elif [[ "$porcentaje" -lt 71 ]]; then + echo "Mid" + else + echo "Strong" + fi +} + +read -p "Introduce una contraseña: " a +resultado=$(validador "$a" ) + ``` Bibliografía Web: diff --git a/Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/validador_de_contraseñas.sh b/Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/validador_de_contraseñas.sh index e6ed6c0..52a7a6c 100755 --- a/Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/validador_de_contraseñas.sh +++ b/Documentación personal/Mecanica de Unix/1. Bash Scripting Avanzado/Funciones puras/Ejercicios/validador_de_contraseñas.sh @@ -21,17 +21,61 @@ minusculas() { } mayusculas () { local passwd=$1 - if [["$passwd" =~ [A-Z] ]]; then + if [[ "$passwd" =~ [A-Z] ]]; then echo "MAYLETTERS" else echo "NO_MAYLETTERS" fi } +numeros () { + local passwd=$1 + if [[ "$passwd" =~ [0-9] ]]; then + echo "NUMBERS" + else + echo "NO_NUMBERS" + fi +} +caracteresE () { + local passwd=$1 + if [[ "$passwd" =~ [^a-zA-Z0-9] ]]; then #Caso curioso: Se recurre a la negacion, ya que si existe un + #caracter especial, este no estará en las tablas de mayuscula, minuscula ni numeros. + echo "ECARACTERS" + else + echo "NO_ECARACTERS" + fi +} + +validador () { + local passwd=$1 + local long=$(longitud "$passwd") + local min=$(minusculas "$passwd") + local may=$(mayusculas "$passwd") + local num=$(numeros "$passwd") + local carE=$(caracteresE "$passwd") + res=("$long" "$min" "$may" "$num" "$carE") + local puntuacion=0 + local totcriterios=5 + for i in "${res[@]}"; do + if [[ $i = "PWD_GT_8" || $i = "MINLETTERS" || $i = "MAYLETTERS" || $i = "NUMBERS" || $i = "ECARACTERS" ]]; then + ((puntuacion++)) # Esto tiene un error de sintaxis aritmetica: Se esperaba un operando (el elemento de error es "+"). El error sale cuando no se introduce uno de los valores anteriores, como por ejemplo, no poner ningun simbolo. + #Update: EUREKA! Al poner $, bash expande el valor antes de la operacion aritmetica. + #Si la puntuacion vale 0, bash intenta ejecutar ((0++)). + fi + done + ((porcentaje=puntuacion * 100 / totcriterios)) + if [[ "$porcentaje" -lt 41 ]]; then + echo "Weak" + elif [[ "$porcentaje" -lt 71 ]]; then + echo "Mid" + else + echo "Strong" + fi +} + read -p "Introduce una contraseña: " a +resultado=$(validador "$a" ) -resultado=$(longitud "$a") - -echo "$resultado" +echo "Su contraseña es $resultado"