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 24

Preguntas 4

Ordenar por:

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

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

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.

#!/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"
# !/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
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\*\* ```bash \#!/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\*\* ```bash \#!/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\*\* ```bash \#!/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\*\* ```bash \#!/bin/bash correo="[email protected]" 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\*\* ```bash \#!/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\*\* ```bash \#!/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)\*\* ```bash \#!/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\*\* ```bash \#!/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\*\* ```bash \#!/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\*\* ```bash \#!/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: ```js #!/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.
  • ¿ 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"```