Validar información
Clase 14 de 43 • Curso de Programación en Bash Shell
Contenido del curso
Clase 14 de 43 • Curso de Programación en Bash Shell
Contenido del curso
Enrique Villalobos Andrade
Cristian Muñoz
Irving Juárez
Edinson Padrón
Irving Juárez
Irving Juárez
Sergui Morejón
Yefri Gonzalez
Guillermo García López
Juan Antonio Aramburo Pasapera
Jhonntan Andres Castaño Rojas
Carlos Eduardo Gomez García
Omar Daniel Centeno
Adrián Olmedo
Juan Sebastián Ricaurte Macías
Erick Saravia
Alberto Juan Gabino
Junior Cupe Casquina
Marco Antonio Toscano Freire
Enzo Venturi
Julian Crispin
Jose Miguel Diaz
Juan Manuel Hincapié
Marvin Javier Santos Fernández
Daniel Herrera
Elí Eduardo Tamez Canales
Carlos Mario Mora Restrepo
KAYLEE DANAE PAEZ HOOKER
Mario Alexander Vargas Celis
Nicolas Potrich
Eddie Andres Rios Elgueta
valentina stephany kassar acuña
Entonces:
read -s -> Oculta la información entrante por propio usuario.
read -n[1,2,3,4...] -> Mantiene la linea de ejecución, la misma linea en la que estamos hasta que llegue al numero de carácteres definido.
read -p -> Indica que hay que dejar la informacion ingresada en la variable siguiente.
Muchas gracias por la info
Si, aunque hay que aclarar que el read -n1...100, ya que yo antes pensaba que iba con los corchetes, pero ahora ya se que no
En Fish Shell
#/usr/bin/fish set -l dni_regex '^CC|CE\s?\d{6,9}$' set -l city_regex '^BGT|MDE$' set -l birthday_regex '^((19[2-9]\d)|(20[0-1]\d))-((0[1-9])|(1[0-2]))-(0[1-9]|([1-2][0-9])|(3[0-1]))$' # 1920-01-01 - 2019-12-31 set -l reply read -P 'Introduce your DNI (CC/CE 123456789): ' -l dni read -P 'Introduce your city\'s initials (BGT, MDE): ' -l city read -P 'Introduce your birthday (yyy-mm-dd): ' -l birthday while true read -n1 -P 'Do you want to validate the information? (Y/n): ' reply if string match --regex --quiet '(^[y|n]$|^$)' $reply break else echo 'Please respond with a `y` or a `n`' end end if test $reply = 'y' -o $reply = '' if string match --regex --quiet $dni_regex $dni echo "✓ The DNI is correct" else echo "× The DNI `$dni` is incorrect" end if string match --regex --quiet $city_regex $city echo "✓ The City is correct" else echo "× The City `$city` is incorrect" end if string match --regex --quiet $birthday_regex $birthday echo "✓ The Birthday is correct" else echo "× The Birthday `$birthday` is incorrect" end end
El fish shell es Familiar Interface Shell, pero no se que tan bueno sea o si se puedan hacer cosas complejas en esa shell, porque esa es la idea
Yo recomiendo usar expresiones regulares en vez del -n, ya que es muy común que se borre un digito en la contraseña, pero con el -n salen cosas raras y con las expresiones regulares eso no sucede
Buenas tengo una duda, lo de poner el -a es mas tanto un estándar?
En la sentencia while va pasar por todos los argumentos y como estándar una opción se comienza con un guion?
Hola
Viendo el script de la clase nunca veo que haga utilización de la sentencia -a Estás formulando tu pregunta correctamente?
En zsh algunas opciones cambian a : read -n[1,2,4,5] --> read -k[1,2,3,4] --> Lee hasta n caracteres read -p "texto" variable --> read "variable?texto" read -s --> se mantiene para NO mostrar el texto que está ingresando el usuario, como con contraseñas
soy el unico que le da pereza hacerlo en vim y lo hace todo en visual studio code y simplemente le da ./ al archivo en la terminal para corroborar su funcionalidad? me fascina el curso Gracias
¡Hola!, también es válido, a fin de cuentas acaban siendo editores de código. Para programación en bash shell es más común hacerlo desde la misma terminal, por eso se usa Vim, pero si estás más cómodo en Visual Studio Code, adelante :D
¡Hola!
Hay de gustos a gusto, yo todavía prefiero cualquier IDE como VSCode o PyCharm a VIM, sin embargo, VIM tiene sus ventajas y ahora con NeoVIM muchas de las opciones que encontramos en los IDE tipo VSCode también se están integrando directo en la terminal. Nunca está de más aprender a utilizar VIM o por lo menos, saber como salir de ahí 😂.
¡Saludos!
La mayoría de las veces no se entiende lo que dice.
Ojala para los próximos cursos quites la muletilla de decir "tema de", se vuelve muy fastidioso, al punto que me toca parar porque me saca el mal genio.
Despues de 14 clases, no me he percatado de eso, solo lo leo en los comentarios jaja
Sii, a cada rato dice que hablara del tema de no se que con el tema de quien sabe que ... .-.
#!/usr/bin/env bash #lec_8_file.sh option=0 name="" password="" read -n 1 -p "Set you option:" option read -n 10 -p "Set you name:" name # -n is to set the number of characters read -s -p "password:" password #to passwords echo "option:$option , name:$name, password:$password"
Genial felicitaciones
Mi aporte:
No tuviste que declarar las variables?
# !/bin/bash # Programa para entender la utilizacion de las expresiones regulares. # Autor: Jose Miguel Diaz - josemdiazax@gmail.com idRegex='^[0-9]{8}[A-Z]{1}$' #Acepta 8 numeros + una letra mayuscula. countryRegex='^MAD|BCN|SEV|BIL|VAL$' #Acepta unicamente esas palabras. dateRegex='^19|20[0-9]{2}[01-12]{2}[01-31]{2}$' #Acepta solo fechas validas. anyvalueRegex='^(.*?)$' echo "Regular expresions. This script is case sensitive." echo -e "\n" read -s -p "Insert your DNI: " id echo -e "\n" read -s -p "Insert your city initials (MAD, BCN, SEV, BIL or VAL): " country echo -e "\n" read -s -p "Insert your birthdate (yyyymmdd): " date echo -e "\n" read -n1 -s -p "Do you want to show your values? (y/n): " yon echo -e "\n" if [[ $yon == "y" ]] then echo "Inserted values: ID: $id Country: $country Birthdate: $date " echo -e "\n" fi read -n1 -s -p "Press any key to validate your info :)" anyvalue if [[ $anyvalue =~ $anyvalueRegex ]] then echo -e "\n" echo "Validating values . . ." echo -e "\n" if [[ $id =~ $idRegex ]] then echo "ID OK" else echo "ID not valid" fi if [[ $country =~ $countryRegex ]] then echo "Country OK" else echo "Country not valid" fi if [[ $date =~ $dateRegex ]] then echo "Birthdate OK" else echo "Birthdate not valid" fi fi
Ejemplo
# !/bin/bash # Programa para ejemplificar como capturar la información del usuario y validarla option=0 backupName="" clave="" echo "Programa Utilidades Postgres" # Acepta el ingrso de información de sólo un caracter0 read -n1 -p "Utilizar una opción: " option #Solo un caracter echo -e "\n" read -n10 -p "Ingresar el nombre del archivo del backup: " backupName #Solo 10 caracteres echo -e "\n" echo "Opción: $option, BackupName: $backupName" read -s -p "Clave: " clave #-s es oculto echo "Clave: $clave"
Salida
#Comando bash 8_readValidate.sh #Salida Programa Utilidades Postgres Utilizar una opción: 1 Ingresar el nombre del archivo del backup: aaaaaaaaaa Opción: 1, BackupName: aaaaaaaaaa Clave: Clave: uy
Algo que me da curiosidad, si quiero correguir algo cuando se ejecuta el script no me deja borrar, eso es normal?
Lo dice al final de la clase el por qué pasa
como se resuelve el no poder borrar un caracter mal escrito en el nombre del backup de este script? el instructor explica que sucede pero no entiendo como buscar la solucion
La única forma que veo hasta ahora, es no especificar la opción -n
Para validar información en **bash**, se suelen usar condicionales, expresiones regulares, y diversas herramientas de línea de comandos como grep, sed, awk, o las funciones integradas de bash. Aquí te doy ejemplos de validaciones comunes en un script de bash.
### 1. **Validar si un archivo existe**
\#!/bin/bash if \[ -f "archivo.txt" ]; then   echo "El archivo existe." else   echo "El archivo no existe." fi
### 2. **Validar si una variable no está vacía**
\#!/bin/bash variable="texto" if \[ -n "$variable" ]; then   echo "La variable no está vacía." else   echo "La variable está vacía." fi
### 3. **Validar si una variable es un número**
\#!/bin/bash numero="12345" if \[\[ "$numero" =~ ^\[0-9]+$ ]]; then   echo "Es un número." else   echo "No es un número." fi
### 4. **Validar un formato de correo electrónico usando expresiones regulares**
\#!/bin/bash correo="usuario@dominio.com" if \[\[ "$correo" =~ ^\[A-Za-z0-9.\_%+-]+@\[A-Za-z0-9.-]+\\.\[A-Za-z]{2,}$ ]]; then   echo "El correo es válido." else   echo "El correo no es válido." fi
### 5. **Validar un rango de valores numéricos**
\#!/bin/bash edad=25 if \[ "$edad" -ge 18 ] && \[ "$edad" -le 65 ]; then   echo "La edad está dentro del rango permitido." else   echo "La edad está fuera del rango." fi
### 6. **Validar si un directorio existe**
\#!/bin/bash directorio="/home/usuario" if \[ -d "$directorio" ]; then   echo "El directorio existe." else   echo "El directorio no existe." fi
### 7. **Validar un número de teléfono (10 dígitos)**
\#!/bin/bash telefono="1234567890" if \[\[ "$telefono" =~ ^\[0-9]{10}$ ]]; then   echo "El número de teléfono es válido." else   echo "El número de teléfono no es válido." fi
### 8. **Validar si un comando existe en el sistema**
\#!/bin/bash if command -v git &> /dev/null; then   echo "Git está instalado." else   echo "Git no está instalado." fi
### 9. **Validar una IP usando expresiones regulares**
\#!/bin/bash ip="192.168.0.1" if \[\[ "$ip" =~ ^(\[0-9]{1,3}\\.){3}\[0-9]{1,3}$ ]]; then   echo "La IP es válida." else   echo "La IP no es válida." fi
### 10. **Validar si una cadena contiene otra cadena**
\#!/bin/bash cadena="Este es un ejemplo de texto" buscar="ejemplo" if \[\[ "$cadena" == \*"$buscar"\* ]]; then   echo "La cadena contiene '$buscar'." else   echo "La cadena no contiene '$buscar'." fi
### Resumen
Bash ofrece múltiples maneras de validar información utilizando condicionales, expresiones regulares y comandos de Unix. Esto te permite realizar validaciones de todo tipo, desde la existencia de archivos y directorios hasta el formato de cadenas como correos o números de teléfono.
Para los que esten usando la terminal zsh a mi me funciono el siguiente codigo:
#!/bin/bash # Programa para ejemplificar como validar la informacion del usuario option=0 backupName="" clave="" echo "Programa de utilidades Postgres" # Acepta el ingreso de informacion de solo un caracter read -p "Ingresar una opcion: " -n 1 option echo -e "\n" read -p "Ingresar el nombre del archivo del backup: " -n 10 backupName echo -e "\n" echo -e "\nOpcion: $option \nBackupName: $backupName" read -s -p "Clave: " clave echo -e "\nClave: $clave"
Parece ser que el comando read -n1 solo capturará el n# primerros carácteres y en caso de ser una cadena mas larga, el resto se quedará en el buffer de entrada.