No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Programación en Bash Shell

Curso de Programación en Bash Shell

Marco Antonio Toscano Freire

Marco Antonio Toscano Freire

Validar información

14/43
Recursos

Para el proceso de validación de información tenemos dos maneras de hacerlo:

  • Para validar tamaños se utiliza el siguiente comando: read -n <numero_caracteres>
  • Para validar el tipo de datos se utilizan las expresiones regulares

Aportes 21

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

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.

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

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

  • read -n: Acepta una cantidad de caracteres específica en el standard input
  • read -s: Esconde los caracteres al momento de ingresar el standard input

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?

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

# !/bin/bash
# Programa para entender la utilizacion de las expresiones regulares.
# Autor: Jose Miguel Diaz - [email protected]

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"
<h6>Salida</h6>
#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
#!/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"

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.

La mayoría de las veces no se entiende lo que dice.

  • ¿ Cómo validar tamaños y tipo de dato en el ingreso de la información?
  1. Para validar tamaños se utiliza el comando, el siguiente comando: read -n<numero_caracteres>
  2. Para validar el tipo de datos se utilizan expresiones regulares.

En España las matrículas de coches constan de 3 letras y 4 dígitos, así se podrían validar.
En el read se pone -n7 para limitar el número de dígitos introducidos a 7.
En la expresión regular se pone [a-z,A-Z], para validar tanto mayúsculas como minúsculas.

#!/bin/bash
# Programa validación matricula coche AAA1234
# Autor JRPF : Dic - 2022
clear
echo -e "\nPrograma solicitar matrícula coche AAA1234"
read -p "Matrícula : " -n7 matricula
matriculaExpReg='^[a-z,A-Z]{3}[0-9]{4}'
if [[ $matricula =~ $matriculaExpReg ]]; then
        echo -e "\nMatricula $matricula CORRECTA"
else
        echo -e "\nMatricula $matricula INCORRECTA"
fi

! /bin/bash

Programa para ejemplificar como capturar la información del usuario utilizando el comando read

Autor: Mario Alfaro [email protected]

option=0
backupName=""

echo "Programa Utilidades Postgres"
read -p “Ingresar una opción:” option
read -p “Ingresar el nombre del archivo del backup:” backupName
echo “Opción:$option , backupName:$backupName”

Muy buenos trucos para optimizar el código!

genial

Entendido

#!/bin/bash
# Programa para validar variables

option=0
backupName=""
contrasena=""
echo "Programa Utilidades Postgres"
# Solo un caracter
read -n1 -p "Ingresar una opcion:" option
echo -e "\n"
read -n10 -p "Ingresa el nombre del archivo de Backup(10 caracteres):" backupName
echo -e "\n"
read -s -p "Ingresa contraseña:"  contrasena
echo "La opcion selecionada fue : $option El nombre del Backup es: $backupName La contraeña es: $contrasena "

Poniendo en práctica las expresiones regulares y if-else statement del script anterior:

El script queda asi:

#! /bin/bash
#Programa para ejemplificar como capturar la informacion del usuario y validarla
#Autor Jose Suarez

option=0
backupname="“
clave=”"

echo “Programa Utilidades Postgres”

<h1>Acepta el ingreso de informacion de solo un caracter</h1>

read -n1 -p “Ingresar una opcion:” opcion
echo -e "\n"
read -n10 -p “Ingresar el nombre del archivo del backup:” backupname
echo -e "\n"
echo "Opcion: $opcion , backupname: $backupname"
read -s -p "Clave: " clave
echo “Clave: $clave”

# ! /bin/bash
# Programa para ejemplificar como capturar la información del usuario y validarla
# Autor: Martin Davila

option=0
backupName=""
clave=""

echo "Programa Utilidades Postgres"
# Acepta el ingreso de información de solo un caracter
read -n1 -p "Ingresar una opción:" option
echo -e "\n"
read -n10 -p "Ingresar el nombre del archivo del backup:" backupName
echo -e "\n"
echo "Opción:$option , backupName:$backupName"
read -s -p "Clave:" clave
echo "Clave: $clave"```