A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

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 17

Preguntas 3

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta 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
  • 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?

# !/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

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

En zsh algunas opciones cambian a :
read -n[1,2,4,5] --> read -k[1,2,3,4] --> Lee hasta n caracteres
read -p 鈥渢exto鈥 variable --> read "variable?texto"
read -s --> se mantiene para NO mostrar el texto que est谩 ingresando el usuario, como con contrase帽as

Ojala para los pr贸ximos cursos quites la muletilla de decir 鈥渢ema 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.

Muy buenos trucos para optimizar el c贸digo!

#!/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

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 鈥淧rograma Utilidades Postgres鈥

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

read -n1 -p 鈥淚ngresar una opcion:鈥 opcion
echo -e "\n"
read -n10 -p 鈥淚ngresar el nombre del archivo del backup:鈥 backupname
echo -e "\n"
echo "Opcion: $opcion , backupname: $backupname"
read -s -p "Clave: " clave
echo 鈥淐lave: $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"```