Reto 2
Clase 17 de 43 • Curso de Programación en Bash Shell
Contenido del curso
Reto 2:
Solicitar la información de cada uno de ustedes como nombres, apellidos, edad, dirección y números telefónicos; y posterior imprima toda la información.
Francisco Ignacio Regular Contreras
Fredy Mendoza Vargas
Macarena Sepúlveda
Carlos Velasquez
Esteban Martini
Luis Cáceres
Sebastian CA
Armando Cardenas
Javier Eduardo Morón Mendoza
Fernando Velasco
Denisse Godoy
Andres Prieto
Mauricio Combariza
Andres Prieto
Samuel Ceballos Cuervo
Javier Guevara
Marco
Marco
John Florez
Cristian Blandon
Jose Suarez
Josue Armando Martinez Gonzalez
Adan Natanael Segura Galicia
John Burgos
Esteban Martini
Abner Alejandro Nicolás Recinos
El reto resuelto:
#!/bin/bash regexedad='^([1-9]{1,2})$' regexnombre='^([A-z]{2,})$' regexapellido='^([A-z]{2,})$' regexdireccion='^([A-Z]*)' regexnumero='^[0-9]{10})$' read -p "Ingrese su nombre: " nombre read -p "Ingrese su Apellido: " apellido read -p "Ingrese su edad: " edad read -p "ingrese su dirección: " direccion read -p "ingrese su numero de telefono: " telefono if [[ $edad =~ $regexedad ]]; then echo "edad valida" else echo "edad invalida" fi if [[ $nombre =~ $regexnombre ]]; then echo "nombre valido" else echo "nombre invalido" fi if [[ $apellido =~ $regexapellido ]]; then echo "apellido valido" else echo "apellido invalido" fi if [[ $direccion =~ $regexdireccion ]]; then echo "Dirección valida" else echo "Dirección invalida" fi if [[ $telefono =~ $regextelefono ]]; then echo "telefono valido" else echo "telefono invalido" fi echo "los datos" echo $nombre echo $apellido echo $edad echo $direccion echo $telefono
Gracias
Gracias!
Mi código, humilde, pero cumple con el Reto:
#!/usr/bin/env bash # Gets personal info and then print it # Carlos Velasquez - @crlosvelaquez name="" lastname="" age="" address="" cellphone="" echo "Type your data:" read -p "What is your name? " name read -p "What is your lastname? " lastname read -p "How old are you? " age read -p "Where do you live? " address read -p "What is your cellphone? " cellphone echo -e "\n" echo "Your data: " echo "Her/His name is $name $lastname" echo "She/He is $age" echo "She/He lives in $address" echo "Her/His cellphone is $cellphone"
comparto el codigo! me "inspire" en algunos comentarios :D
#! /bin/bash # RETO 2: programa de ingreso de datos personales, validacion e impresion nombreRegEx='^([A-Z??????a-z??????]{1,}\s?){1,2}$' apellidoRegEx='^[A-Z??????a-z??????]{1,}\s?[A-Z??????a-z??????]{1,}$' edadRegex='^[0-9][0-9]?[0-9]?$' direccionRegEx='^[A-Z??????a-z??????0-9.,# ]{1,}?$' telefonoRegEx='^([(0-9]{2,2}[-. ]?)([(0-9]{2,2}[-. ]?)([0-9]{2,2}[-. ]?)([0-9]{2,2}[-. ]?)([(0-9]{2,2}[-. ]?)$' oldAge=65 youngAge=8 # Solicitamos el Apellido read -p "Ingrese su apellido:" apellido while [[ ! $apellido =~ $apellidoRegEx ]] do echo -e "el Apellido no es valido" read -p "Ingrese el Apellido (po favo):" apellido done # Solicitamos el nombre read -p "Ingrese su nombre:" nombre while [[ ! $nombre =~ $nombreRegEx ]] do echo -e "el Nombre no es valido" read -p "Ingrese el Nombre (po favo):" nombre done # Solicitamos la edad read -p "Ingrese su edad:" edad while [[ ! $edad =~ $edadRegEx ]] do echo -e "la edad no es valida" read -p "Ingrese su edad (po favo):" edad done if [[ $edad -gt $oldAge ]]; then echo -e "aprendiendo a programar a su edad! Felicidades!" fi if [[ $edad -lt $youngAge ]]; then echo -e "Too young!" fi # Solicitamos el telefono read -p "Ingrese su Telefono:" telefono while [[ ! $telefono =~ $telefonoRegEx ]] do echo -e "el telefono no es valido" read -p "Ingrese su telefono (po favo):" telefono done # Solicitamos la direccion read -p "Ingrese su Direccion:" direccion while [[ ! $direccion =~ $direccionRegEx ]] do echo -e "la direccion no es valida" read -p "Ingrese su direccion (po favo):" direccion done echo -e "" echo -e "################" echo -e " Datos Personales:" echo -e "################" echo -e "Apellido: $apellido" echo -e "Nombre: $nombre" echo -e "Edad: $edad Telefono: $telefono" echo -e "Direccion: $direccion"
#!/bin/bash read -p “Nombre:” nombre read -p “Apellido:” apellido read -p “Edad:” edad read -p “Direccion:” direccion read -p “Telefono:” telefono
echo “sus datos son:” $nombre, $apellido, $edad, $direccion, $telefono
Codigo:
#!/bin/bash #asks user for name, surname, age, address, phone# #at the end prints all the information #NOTE: regex = regular expression #NOTE: [\n# $&:\s\t] this can be used for text msgs, ex: ayoo hello there! #regexs name_regex='^([A-Z]{1})([a-z]*)$' #in the state of California is legal to have a single letter as a first name surname_regex='^([A-Z]{1})([a-z]*)$' age_regex='^([1-9][1-9])$' address_regex='^([A-Z]{1})([a-z]*\s)([A-Z]{2}\s)([0-9]*)$' phone_regex='^([0-9]{10})$' #~functions~ function invalid_syntax { echo "Invalid syntax..." echo "Please try again and double check if you miss spelled something" echo "" } while [[ ! $u_name =~ $name_regex ]]; do read -p "Name: " u_name if [[ $u_name =~ $name_regex ]]; then break else invalid_syntax fi done while [[ ! $u_surname =~ $surname_regex ]]; do read -p "Surname: " u_surname if [[ $u_surname =~ $surname_regex ]]; then break else invalid_syntax fi done while [[ ! $u_age =~ $age_regex ]]; do read -p "Age: " u_age if [[ $u_age =~ $age_regex ]]; then break else invalid_syntax fi done while [[ ! $u_phone =~ $phone_regex ]]; do read -p "Phone number: " u_phone if [[ $u_phone =~ $phone_regex ]]; then break else invalid_syntax fi done echo "" while [[ ! $u_address =~ $name_regex ]]; do echo "format: Town + State abreviation + ZIP code" read -p "Address: " u_address if [[ $u_address =~ $address_regex ]]; then break else invalid_syntax fi done read -p "Are you sure about the info above? [y/n]: " u_answer if [ $u_answer == "y" ]; then echo "okay, printing results..." sleep 1s echo "" elif [ $u_answer == "n" ]; then echo "okay, re-sending registration form..." sleep 1s clear bash b32.sh else echo "You typed: $u_answer" echo -e "Sorry, but you can only type:\n'n' = no\n'y' = yes" echo "" fi #asks user for name, surname, age, address, phone# echo "------RESULTS-----" echo "" echo "Name: $u_name" echo "Surname: $u_surname" echo "Age: $u_age" echo "Address: $u_address" echo "Phone number: $u_phone"
Output:
Name: Christopher Surname: Michaels Age: 18 Phone number: 3163256521 format: Town + State abreviation + ZIP code Address: Baviar CA 032124 Are you sure about the info above? [y/n]: y okay, printing results... ------RESULTS----- Name: Christopher Surname: Michaels Age: 18 Address: Baviar CA 032124 Phone number: 3163256521
Pro Tip: para debuggear tu script en vim sin terminar el proceso ni cerrar el script que estas escribiendo puedes presionar ESC + [ctrl + z] y te sacará del vim, Para regresar solo escribe [fg] y volverás al VIM con el script actual para seguir realizando modificaciones.
# !/bin/bash # Solicitar la información como nombres, apellidos, edad, dirección y teléfono, luego imprimir nombre="" apellido="" edad="" direccion="" telefono="" read -p "Ingrese su nombre: " nombre read -p "Ingrese su apellido: " apellido read -p "Ingrese su edad: " edad read -p "Ingrese su dirección: " direccion read -p "Ingrese su teléfono: " telefono echo "Su nombre es: $nombre" echo "Su apellido es: $apellido" echo "Su edad es: $edad" echo "Su direccion es: $direccion" echo "Su telefono es: $telefono"
El mio, sin usar funciones:
# !/bin/bash # Reto 2 - Solicitar informacion e imprimirla | adding controls # R = Regex # Autor: Erick Velasco ## Declaracion de variables nombres=""; wordsR='^[A-Z a-z]{2,35}$' apellidos=""; edad=0; edadR='^(1[5-9])|([2-9][0-9])$' direccion=""; direccionR='^[A-Za-z \.]{2,30}(N|No|Nro|#)[ ]?[0-9]{1,5}$' telefono=0; telefonoR='^[0-9]{4,10}$' flag=0 ## Validar la informacion while [[ $flag -eq 0 ]]; do read -p $'Ingrese sus nombres:\n' nombres if [[ $nombres =~ $wordsR ]]; then flag=1 else echo "Nombre Invalido." fi done flag=0 while [[ $flag -eq 0 ]]; do read -p $'Ingrese sus apellidos:\n' apellidos if [[ $apellidos =~ $wordsR ]]; then flag=1 else echo "Apellido/s Invalido/s." fi done flag=0 while [[ $flag -eq 0 ]]; do read -p $'Ingrese su edad:\n' edad if [[ $edad =~ $edadR ]]; then flag=1 else echo "Edad no valida." fi done flag=0 while [[ $flag -eq 0 ]]; do read -p $'Ingrese su direccion:\n' direccion if [[ $direccion =~ $direccionR ]]; then flag=1 else echo "Direccion Invalida." fi done flag=0 while [[ $flag -eq 0 ]]; do read -p $'Ingrese su numero telefonico:\n' telefono if [[ $telefono =~ $telefonoR ]]; then flag=1 else echo "Telefono no valido" fi done ## Mostrar los datos echo -e "Nombres:\t$nombres" echo -e "Apellidos:\t$apellidos" echo -e "Edad:\t\t$edad" echo -e "Direccion:\t$direccion" echo -e "Telefono:\t$telefono" exit 0
Es necesario inicializar las variables para obtener input? Cuál es la mejor práctica al respecto?
¿Existen un "prettier" para bash? O en su defecto un plugin para vim
Andrés, todo el script se puede desarrollar en vs-code que para mi es mucho más amigable que vim
Gracias Mauricio, pero yo trabajo con Nvim, un fork de Vim, es decir; ese es el editor que me gusta usar y el que tengo como editor principal; trabajo sobre mi terminal y es la forma que más me gusta de desarrollar, pues en realidad Vim y Nvim es muy fácil de modificar; mira este repositorio que es mi Nvim, gracias por tu comentario
#!/bin/bash read -p "Ingrese su nombre: " nombre echo "" read -p "Ingrese su/s apellido/s: " apellidos echo "" read -p "Ingrese su edad: " edad echo "" read -p "Ingrese su direccion: " direccion echo "" read -p "Ingrese su numero de telefono: " numeroTel echo "" echo "Nombre: $nombre, apellidos: $apellidos, edad: $edad, direccion: $direccion, tel: $numeroTel"
me gusto su programa
aun que en la ultima parte el programa se puso en modo acosador ajaja
Done!
¡Hola! Comparto mi desarrollo del reto.
Sólo para practicar lo aprendido de opciones, implementé 2 modificadores, -n que pide nombre y edad, -a que pide apellido y dirección, y en cualquier caso, al final, se pide el teléfono.
#!/usr/bin/bash # Script de practica para captura de informacion e implementacion de opciones echo -e "Informacion del paciente\n" while [ -n "$1" ]; do case "$1" in -n) read -p "Ingrese su nombre: " nombre read -p "Ingrese su edad: " edad echo "Hola $nombre de $edad años";; -a) read -p "Ingrese su apellido: " apellido read -p "Ingrese su direccion: " direccion echo "Tu apellido es $apellido y vives en $direccion";; --) shift break ;; *) echo "El modificador ingresado es invalido." exit 0;; esac shift done read -s -p "Ingresa tu telefono: " telefono echo "Tu telefono es $telefono"
Les dejo screenshots de los resultados :)
Así quedó mi reto:
#! /bin/bash #Reto 2 validar informacion #Autor Jose Suarez
idRegex='^([1-9]{1})([0-9]{3,7})$' nombreRegex='^([A-Z]{1})([a-z])$' apellidoRegex='^([A-Z]{1})([a-z])$' edadRegex='^([0-9]{1,2})$' paisRegex='^ARG|BRA|BOL|COL|CHI|ECU|PAR|PER|URU|VEN$' direccionRegex='^([A-Z]{1})([a-z]\s)([0-9])$' telefonoRegex='^([0-9]{8,12})$'
#Ingresar Identificacion read -p "Ingrese su numero de identificacion (Entre 4 y 8 digitos):" id while [[ ! $id =~ $idRegex ]] do echo -e "La identificacion ingresada no es valida" read -p "Ingrese su numero de identificacion (Entre 4 y 8 digitos):" id done
#Ingresar el apellido read -p "Ingrese su Apellido (Primera Letra Mayuscula):" apellido while [[ ! $apellido =~ $apellidoRegex ]] do echo -e "Apellido no valido" read -p "Ingrese su Apellido (Primera Letra Mayuscula):" apellido done
#Ingresar el nombre read -p "Ingrese su Nombre (Primera Letra Mayuscula):" nombre while [[ ! $nombre =~ $nombreRegex ]] do echo -e "Nombre no valido" read -p "Ingrese su Nombre (Primera Letra Mayuscula):" nombre done
#Ingresar la edad read -p "Ingrese su edad:" edad while [[ ! $edad =~ $edadRegex ]] do echo -e "La edad no es valida" read -p "Ingrese su edad:" edad done
#Ingresar el numero de telefono read -p "Ingrese su Numero de Telefono (Debe contener entre 8 y 12 numeros):" telefono while [[ ! $telefono =~ $telefonoRegex ]] do echo -e "El telefono ingresado no es valido" read -p "Ingrese un numero de telefono valido (Debe contener entre 8 y 12 numeros):" telefono done
#Ingresar Pais read -p "Ingrese su pais de residencia (ARG|BRA|BOL|COL|CHI|ECU|PAR|PER|URU|VEN):" pais while [[ ! $pais =~ $paisRegex ]] do echo -e "El pais ingresado no es valido" read -p "Ingrese su pais de residencia (ARG|BRA|BOL|COL|CHI|ECU|PAR|PER|URU|VEN):" pais done
#Ingresar la direccion read -p "Ingrese su Direccion (Ej: Calle 11):" direccion while [[ ! $direccion =~ $direccionRegex ]] do echo -e "La direccion ingresada no es valida" read -p "Ingrese su direccion (Ej: Calle 11):" direccion done
#Imprimir datos echo -e "\n" echo -e "**************************************" echo -e "++++++++Datos Ingresados++++++++++" echo -e "\n" echo -e "Numero de Identificacion:" $id echo -e "Apellido: $apellido" echo -e "Nombre: $nombre" echo -e "Edad: $edad" echo -e "Telefono: $telefono" echo -e "Direccion: $direccion, $pais" echo -e "\n"
Salida
# ! /bin/bash # Solución del reto numero 2: Solicitar la información de cada uno de ustedes como nombres, apellidos, edad, dirección y números telefónicos; y posterior imprima toda la información. nombre="" apellido="" edad=0 direccion="" telefono=0 echo "Otorgame tu información por favor" read -n10 -p "Ingrese un nombre:" nombre echo -e "" read -n15 -p "Ingrese su apellido:" apellido echo -e "" read -n2 -p "Ingrese su edad:" edad echo -e "" read -n25 -p "Ingrese una dirección:" direccion echo -e "" read -n10 -p "Ingrese un numero de telefono:" telefono echo -e "" echo "Bienvenido $nombre $apellido, tienes $edad años de edad, vives en $direccion y te podemos contactar al numero telefonico $telefono" Resultado: Otorgame tu información por favor Ingrese un nombre:usuario Ingrese su apellido:toscano Ingrese su edad:25 Ingrese una dirección:residencia * calle *cr**a Ingrese un numero de telefono:1234567890 Bienvenido usuario toscano, tienes 25 años de edad, vives en residencia * calle *cr**a y te podemos contactar al numero telefonico 1234567890
Me costó pero lo logre.
# !bin/bash #Programa qu valida informacion personal #Autor: Adan Galicia nombreRegex='^[A-Z]\w{2,15}[ A-Za-z]*$' apellidosRegex='^[A-Z]\w{2,15}[ A-Za-z]*$' edadRegex='^[0-9]{1,3}$' direccionRegex='^A-Z{2,65}$' numeroRegex='^([0-9]\-?){9}[0-9]$' read -p "Favor de ingresar su Nombre(s): " nombre read -p "Favor de ingresar su Apellido(s): " apellido read -p "Favor de ingresar su edad: " edad read -p "Favor de ingresar su direccion: " direccion read -p "Favor de ingresar su numero telefonico: " numero if [[ $nombre =~ $nombreRegex ]]; then echo -e "\n Su nombre(s) es: $nombre" else echo -e "\n Ese nombre(s) no es valido" fi if [[ $apellido =~ $apellidosRegex ]]; then echo -e "\n Su apellido(s) es: $apellido" else echo -e "\n Ese apellido(s) no es valido" fi if [[ $edad =~ $edadRegex ]]; then echo -e "\n Su edad es: $edad" else echo -e "\n Esa edad no es valida" fi if [[ $direccion =~ $direccionRegex ]]; then echo -e "\n Su direccion es: $direccion" else echo -e "\n Esa direccion no es valida" fi if [[ $numero =~ $numeroRegex ]]; then echo -e "\n Su numero telefonico es: $numero" else echo -e "\n Ese numero telefonico no es valido" fi
#!/bin/bash #Solicitar la información de cada uno de ustedes como nombres, apellidos, edad, dirección y números telefónicos; #posterior imprima toda la información. #by: devp echo -e "\n" echo "*** BIENVENIDOS AL PROGRAMA ***" echo -e "\n" #Datos echo "*** SOLICITANDO DATOS ***" read -p "Nombre: " nombre read -p "Apellido: " apellido read -p "Edad: " edad read -p "Direccion: " direccion read -p "Teléfono: " telefono echo "*** IMPRIMIENDO DATOS ***" echo "Nombre: " $nombre echo "Apellido: " $apellido echo "Edad: " $edad echo "Direccion: " $direccion echo "Telefono: " $telefono
aca la ejecucion:
bash-5.0# ./11_reto2.sh Ingrese su apellido:Minamino Ingrese su nombre:Suichi Ingrese su edad:67 aprendiendo a programar a su edad! Felicidades! Ingrese su Telefono:0303456 el telefono no es valido Ingrese su telefono (po favo):0303456789 Ingrese su Direccion:Evergreen Av. 742 ################ Datos Personales: ################ Apellido: Minamino Nombre: Suichi Edad: 67 Telefono: 0303456789 Direccion: Evergreen Av. 742 bash-5.0#
./reto_02.sh Ingrese los siguientes datos: Nombres: Abner Apellidos: Recinos Edad: 30 Dirección: America No. Teléfono: 555-000-999
Procesando ...
Apellidos: Recinos Nombre: Abner edad: 30 Dirección America No. Teléfono: 555-000-999