Edinson Padrón
Irving Juárez
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
Validar la información que ingresa el usuario es clave para asegurar calidad de datos y evitar errores que afecten tu script. Aquí verás cómo controlar el tamaño de la entrada y cómo manejar información confidencial con el comando read en bash, tal como se demuestra en Ubuntu y terminal.
¿Qué es la validación de entradas con read en Bash?
La validación se enfoca en restringir cuántos caracteres se aceptan y en ocultar lo que el usuario escribe cuando es confidencial. Se muestran dos enfoques: con read y, como lectura recomendada aparte, con expresiones regulares. En este contenido nos centramos en read con las opciones -n, -p y -s.
¿Cómo limitar a un solo carácter con -n 1?
read -p "Ingresar una opción: " -n 1 opcion # Separador para nueva línea (según lo explicado): echo -c "\n" # Mostrar lo ingresado. echo "Opción: $opcion"
Punto clave: el cursor se mantiene en la misma línea hasta completar el número de caracteres indicado.
¿Cómo fijar un tamaño específico para nombres de archivo?
read -p "Ingresar nombre del archivo: " -n 10 backup # Separador de línea (según lo explicado): echo -c "\n" # Mostrar lo ingresado. echo "Backup: $backup"
Así se garantiza que el valor tenga el tamaño esperado antes de continuar.
¿Cómo capturar información confidencial con -s?
read -s -p "Ingrese una clave: " clave echo -c "\n" echo "Clave: $clave"
Ventaja: se protege la confidencialidad durante el ingreso (se oculta lo tecleado).
¿Qué consideraciones y límites debes tener en cuenta?
¿Qué muestra la ejecución del script en Ubuntu?
Consejo práctico: considera la UX al usar -n. Si el usuario necesita corregir, el borrado se interpreta como carácter válido y puede romper la intención de la entrada.
¿Qué habilidades y conceptos se refuerzan?
La sesión refuerza prácticas esenciales de scripting:
echo -c y separadores de línea según lo descrito.¿Tienes dudas sobre cómo adaptar estas validaciones a tu propio script o casos reales? Comenta tu objetivo y los campos que necesitas validar, y te orientamos paso a paso.
Edinson Padrón
Irving Juárez
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
Irving Juárez
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
Sergui Morejón
Yefri Gonzalez
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?
Guillermo García López
Hola
Viendo el script de la clase nunca veo que haga utilización de la sentencia -a Estás formulando tu pregunta correctamente?
Juan Antonio Aramburo Pasapera
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
Jhonntan Andres Castaño Rojas
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
Carlos Eduardo Gomez García
¡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
Omar Daniel Centeno
¡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!
Adrián Olmedo
La mayoría de las veces no se entiende lo que dice.
Juan Sebastián Ricaurte Macías
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.
Erick Saravia
Despues de 14 clases, no me he percatado de eso, solo lo leo en los comentarios jaja
Alberto Juan Gabino
Sii, a cada rato dice que hablara del tema de no se que con el tema de quien sabe que ... .-.
Junior Cupe Casquina
#!/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"
Marco Antonio Toscano Freire
ProfesorGenial felicitaciones
Enzo Venturi
Mi aporte:
Julian Crispin
No tuviste que declarar las variables?
Jose Miguel Diaz
Juan Manuel Hincapié
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
Marvin Javier Santos Fernández
Daniel Herrera
Algo que me da curiosidad, si quiero correguir algo cuando se ejecuta el script no me deja borrar, eso es normal?
Elí Eduardo Tamez Canales
Lo dice al final de la clase el por qué pasa
Carlos Mario Mora Restrepo
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
KAYLEE DANAE PAEZ HOOKER
La única forma que veo hasta ahora, es no especificar la opción -n
Mario Alexander Vargas Celis
Nicolas Potrich
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"
Eddie Andres Rios Elgueta
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.
valentina stephany kassar acuña
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
# !/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
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.