Reto 3
Clase 19 de 43 • Curso de Programación en Bash Shell
Contenido del curso
Clase 19 de 43 • Curso de Programación en Bash Shell
Contenido del curso
Reto 3:
Solicitar que se ingrese un valor del 1 al 5.
Según el valor ingresado, hacer la validación utilizando las condicionales e imprimir el resultado.
Construir expresiones de validación numéricas, cadenas y archivos según la opción ingresada.
Omar Said Pérez Nicolás
Elías Doldan
Santiago Rueda Martinez
Cristian Orlando Rincon Bonilla
Hector Martin Ocampo Mendoza
Alexander Jair Rojas Paria
Jose Suarez
Darwin Steve Berrio Alvarez
Oscar Jaimes Perea
Paul Manrique
Alberth Fabian Perez Mendivelso
Miguel Angel Reyes Moreno
Elier Cortés Baltodano
Victor Martin Ortiz Palacio
freddy molleda
Andres Vargas
Adan Natanael Segura Galicia
Abner Alejandro Nicolás Recinos
Marconi Poveda
Marvin Javier Santos Fernández
Elmer Ernesto Brito Rodriguez
Juan Camilo Lentino Villalba
eamedranoc1
Isaac Bryan Ascanoa Roncall
Javier Dario Chungana Erira
Mi reto 3
esta bueno pero hay cosas que aun no dimos en la clase
Entiendo que haya comentarios para ayudar a los demas, pero esto simplemente lo veo como una manera de vanagloriarse por saber algo. Aun no se va en el tema.
Mi solución al challenge:
Repositorio
#!/bin/bash # Program: # This program asks the user to enter a number between 1 and 5. # If the user enters a number between 1 and 5, the program displays # the corresponding message. entered_number=0 read -n1 -p "Enter a number between 1 and 5: " entered_number echo -e "\n" if [ $entered_number -eq 1 ]; then echo "You entered 1" elif [ $entered_number -eq 2 ]; then echo "You entered 2" elif [ $entered_number -eq 3 ]; then echo "You entered 3" elif [ $entered_number -eq 4 ]; then echo "You entered 4" elif [ $entered_number -eq 5 ]; then echo "You entered 5" else echo "You did not enter a number between 1 and 5" fi
#!/bin/bash selecRegex='^[1-5]{1}$' read -p "selecciona un numero del 1 al 5: " selec if [[ $selec =~ $selecRegex ]] then if [[ $selec -eq 1 ]] then echo "elegiste 1" elif [[ $selec -eq 2 ]] then echo "Elegiste 2" elif [[ $selec -eq 3 ]] then echo "Elegiste 3" elif [[ $selec -eq 4 ]] then echo "Elegiste 4" elif [[ $selec -eq 5 ]] then echo "Elegiste 5" fi else echo "numero incorrecto" fi
buen bro
Mi reto 3.
#! /bin/bash #Reto 3 #Autor Jose Suarez read -p "Ingrese su nombre: " nombre echo -e "\n Bienvenido $nombre \n" echo "+++++++++++++++++++++++++++++++" echo " Reto al conocimiento" echo -e "+++++++++++++++++++++++++++++++\n" echo "1.- Matematica" echo "2.- Deportes" echo "3.- Historia" echo "4.- Arte" echo "5.- Geografia" echo -e "\n++++++++++++++++++++++++++++++++\n" read -n1 -p "Ingrese su opcion: " opcion echo -e "\n" case $opcion in 1) read -p " ¿Cual es la raiz cuadrada de 16? " respmat if [ $respmat = "4" ]; then echo "Correcto, la raiz cuadrada de 16 es 4" else echo "Respuesta incorrecta, la raiz cuadrada de 16 no es $respmat" fi;; 2) read -p " ¿Que organismo que gobierna las federaciones de fútbol en todo el mundo? " respdep if [ $respdep = "fifa" ] || [ $respdep = "FIFA" ] || [ $respdep = "Fifa" ] ; then echo "Correcto, la FIFA" else echo "Respuesta incorrecta, no es $respdep" fi;; 3) read -p " ¿Cual es el apellido del Libertador de América? " resphis if [ $resphis = "Bolivar" ] || [ $resphis = "BOLIVAR" ] || [ $resphis = "bolivar" ]; then echo "Correcto, el Libertador de América es Simón Bolivar" else echo "Respuesta incorrecta, el apellido del Libertador no es $resphis" fi;; 4) read -p " ¿En qué año nació el Pintor Italiano Leonardo da Vinci? " respart if [ $respart = "1452" ]; then echo "Correcto, Leonardo da Vinci nació en el 1452 y murió en el año 1519" else echo "Respuesta incorrecta, Leonardo da Vinci no nacio en el año $respart" fi;; 5) read -p " ¿Cual es la capital de Austria? " respgeo if [ $respgeo = "Viena" ] || [ $respgeo = "VIENA" ] || [ $respgeo = "viena" ]; then echo "Correcto, la capital de Austria es Viena" else echo "Respuesta incorrecta, $respgeo no es la capital de Austria" fi;; esac
Este reto es muy interesante, pero podrias normalizar la entrada del usuario para que lo que sea que escriba tome el valor sea en minuscula o mayuscula y asi te evitas poner todas las variables que puede tener la palabra
Logro conseguido
-- Una versión simplificada
read -n1 -p "Ingrese un número del 1 al 5: " option if [[ ( $option -gt 0 ) && ( $option -le 5 ) ]]; then echo -e "\nOpción $option :: 200 Ok" else echo -e "\nSyntax fail" fi
MI RETO3:
!/bin/bash
RETO3
Autor: Paul Manrique
option=0 edad=0 numero=0 texto1="" texto2="" ruta1="" ruta2=""
echo "*******************************************************" echo "// DEBE INGRESAR UN VALOR ENTRE 1 y 5 \*************" echo "*****************************************************" echo "1: VALIDAR EDAD 1 - 122 ************" echo "2: NUMERO ENTRE 1 - 10 / VALIDAR SI ES PRIMO **********" echo "3: COMPARAR 2 CADENAS DE TEXTO " echo "4: VALIDAR SI EXISTE ARCHIVO ***********************" echo "5: VALIDAR SI EXISTE ARCHIVO Y TIENE PERMISOS DE LECTURA" echo ""
read -n1 -p "Ingrese el numero:" option echo -e "\n"
if [ $option = 0 ] || [ $option -ge 5 ]; then echo "" echo "ERROR - El numero ingresado: $option - No esta dentro de los parametros" echo "" fi
case $option in
1 ) echo "" echo "INGRESE EDAD" echo "" echo -e "\n" read -p "Edad: " edad
if [ $edad -le 17 ]; then echo "Eres menor de edad" elif [$edad -ge 18 ] && [ $edad -le 122 ]; then echo "Eres mayor de edad, pero no la persona mas longeva en el mundo segun Guiness" else [ $edad -ge 122 ] echo "Eres la persona mas longeva en el mundo segun Guiness" fi;;
2 ) echo "" echo "INGRESE NUMERO A VALIDAR ENTRE 1 Y 10" echo "" echo -e "\n" read -p "Numero: " numero echo -e "\n"
if ($numero = 2) || ($numero = 3) || ($numero = 5) || ($numero = 7); then echo "El numero ingresado es primo: $numero" else echo "El numero ingresado NO es primo $numero" fi;;
3) echo "" echo "INGRESE CADENAS DE TEXTO A COMPARAR" echo "" echo -e "\n" read -p "Primera cadena de texto: " texto1 read -p "Segunda cadena de texto: " texto2
if [ $texto1 = $texto2 ]; then echo "Las cadenas de texto ingresadas son iguales" else echo "Las cadenas de texto son diferentes" fi;;
4) echo "" echo "VALIDAREMOS SI EXISTE EL DIRECTORIO" echo "" echo -e "\n" read -p "Favor ingrese RUTA:" ruta1
if [ -d "$ruta1" ]; then echo "El path o ruta: $ruta1" echo "SI - si existe" else echo "El path o ruta: $ruta1" echo "NO - no existe" fi;;
5) echo "*****************************************" echo "VALIDAREMOS SI:*****" echo "TIENE PERMISOS DE LECTURA**********" echo "*******************************************" echo -e "\n" read -p "Favor ingrese RUTA" ruta2
if [ -r "$ruta2" ]; then echo "El directorio ingresado: $ruta2" echo "SI - POSEE PERMISOS DE LECTURA" else echo "El directorio ingresado: $ruta2" echo "NO - POSEE PERMISOS DE LECTURA" fi;;
esac
Mi reto 3
Más sencillo usar case aquí
# !/bin/bash # Reto 3: Solicitar que ingrese un valor del 1 al 5. Segun el valor a ingresado validarlo utilizando las condicionales e imprimir segun el valor ingresado. Construir expresiones de validación númericas, cadenas y archivos según opcion ingresada. option="" echo "Ingrese el numero correspondiente a la operación que desea realizar." echo "1) Cuál es mi directorio actual?" echo "2) Fecha y hora actual" echo "3) Nombre de Usuario actual" echo "4) Saber si un package se encuetra instalado" echo "5) Saber que permisos tengo sobre el directorio actual" read -p "Ingrese una opcion: " option echo "" case $option in 1) pwd;; 2) date;; 3) whoami;; 4) read -p "Ingrese el nombre del package: " package dpkg -s $package;; 5) ls -la;; *) echo "La opción ingresada no es valida.";; esac
1 #!/bin/bash 2 3 choice="" 4 flag="s" 5 6 while [ $flag = "s" ] 7 do 8 echo "Ingrese una opcion" 9 echo -e "a) \nb) \nc) \nd) \ne) \n" 10 11 read -n1 -p "Que deseas hacer? " choice 12 13 case "$choice" in 14 "a") echo -e "\n\neleccion A\n";; 15 "b") echo -e "\n\neleccion B\n";; 16 "c") echo -e "\n\neleccion C\n";; 17 "d") echo -e "\n\neleccion D\n";; 18 "e") echo -e "\n\neleccion E\n";; 19 esac 20 read -n1 -p "continuaras? [s/n] 21 " flag 22 23 done
Aquí dejo mi aporte. Consiste en un juego tipo lotería donde ganas algo dependiendo del número que escojas. Tiene emojis para hacerlo un poco mas visual y entretenido.
#!/bin/bash #Ejercicio practico: solicitud número del 1 al 5 y dar premio #realizando validación de expresión regular y de tipo de dato. #Autor: Sergio A.Vargas opcionRX='^([1-5]{1})$' #Solicitud de datos echo "Por favor, ingrese un valor del 1 al 5: " read -p "Valor: " valor #Validacion de valor if [[ $valor =~ $opcionRX ]]; then echo -e "opción valida \U0001F44D" else echo -e "opción invalida \U0001F44E" fi #Validacion opción if [[ $valor == 5 ]]; then echo -e "Haz ganado un carro \U0001F699" elif [ $valor == 4 ]; then echo -e "Haz ganado una bici \U0001F6B2" elif [ $valor == 3 ]; then echo -e "Haz ganado una casa \U0001F3E1" elif [ $valor == 2 ]; then echo -e "Haz ganado un dulce \U0001F36C" elif [ $valor == 1 ]; then echo -e "Haz ganado una compu \U0001F4BB" else echo "Fin del juego." fi
# !/bin/bash # Programa menu basico # Autor: Adan Galicia opcion=0 numeroCompu=6 echo "Menu Simple" read -n1 -p "Ingrese una opcion de la 1-5:" opcion echo -e "\n" case $opcion in 1) read -n3 -p "Escribe tu número favorito: " numeroFavorito if [ $numeroFavorito -lt 11 ]; then echo -e "\nEl numero es magico" elif [ $numeroFavorito -ge 10 ] && [ $numeroFavorito -le 100 ]; then echo -e "\nEl numero es universal" else echo -e "\nEl numero es universal" fi ;; 2) read -n1 -p "Adivina en que número estoy pensando (0-9): " numeroUsuario if [ $numeroUsuario -lt $numeroCompu ]; then echo -e "\nTu numero es menor al mio" elif [ $numeroUsuario -gt $numeroCompu ]; then echo -e "\nTu numero es mayor al mio" elif [ $numeroUsuario = $numeroCompu ]; then echo -e "\nFelicidades, has ganado" else echo -e "\nHas encontrado una opcion imposible" fi ;; 3) read -p "Ingrese un color (en minusculas): " color if [ $color = "rojo" ]; then echo -e "\nTu color es rojo" elif [ $color = "azul" ]; then echo -e "\nTu color es azul" elif [ $color = "blanco" ]; then echo -e "\nTu color es blanco" else echo -e "\nEse color aún no esta registrado" fi ;; 4) read -p "Ingrese un path para ver si exite: " path if [ -d $path ]; then echo -e "\nEl path $path existe" else echo -e "\nEl path $path NO existe" fi ;; 5) echo -e "\nHasta la proxima";; "*") echo "Opcion Incorrecta" esac
#!/bin/bash #Reto 3 #Escrito por: Abner Recinos
opcion=0 continuar=1 cadena="" cadena2=""
while [ $continuar == 1 ] do echo " El Preguton (presione un número para comenzar) " echo " 1.- ¿Es una vocal? " echo " 2.- Validar numero par " echo " 3.- Multiplo exacto: " echo " 4.- ¿Existe este archivo? " echo " 5.- Verificar existencia de folder " echo " 6.- Salir " echo " "
read -n1 -p "" opcion echo " " case $opcion in 1 ) read -n1 -p "Escriba una letra: " cadena echo "" case $cadena in "A" ) echo "es una vocal" ;; "a" ) echo "es una vocal" ;; "E" ) echo "es una vocal" ;; "e" ) echo "es una vocal" ;; "I" ) echo "es una vocal" ;; "i" ) echo "es una vocal" ;; "O" ) echo "es una vocal" ;; "o" ) echo "es una vocal" ;; "U" ) echo "es una vocal" ;; "u" ) echo "es una vocal" ;; * ) echo "No es una vocal" ;; esac ;; 2 ) read -p "Escriba un número:" cadena let modulo=$cadena%2 if [ $modulo == 0 ] then echo "El número es par" else echo "El número es impar" fi ;; 3 ) echo "Ingrese dos números" read -p "Valor 1:" cadena read -p "Valor 2:" cadena2 let modulo=$cadena%$cadena2 if [ $modulo == 0 ] then echo "Es exacto" else echo "Inexacto, el modulo es $modulo" fi ;; 4 ) read -p "Ingrese la ruta del archivo" cadena if [ -f $cadena ] then echo "Si" else echo "No" fi ;; 5 ) read -p "Ingrese la ruta de la carpeta" cadena if [ -d $cadena ] then echo "Si" else echo "No" fi ;; 6 ) echo "Hasta pronto" continuar=0 #exit #para este caso tambien puede usarse esta opcion ;; * ) echo "No esta dentro de las opciones" ;; esac read -p "presione cualquier tecla para continuar" -s cadena echo ""
done
#!/bin/bash #Script de resolución reto 3 # Solicitar que se ingrese un valor del 1 al 5. Según el valor ingresado valor a validarlo utilizando las condicionales e imprimir según el valor ingresado. Construir expresiones de valida ción númericas, cadenas y archivos según la opción ingresada. echo " _____________________._______ _________ \__ ___/\______ \ \ \ / / _ \ | | | _/ |\ Y / /_\ \ | | | | \ | \ / | \ |____| |____|_ /___| \___/\____|__ / \/ \/ " echo "Elija 1 pregunta e intente responderla correctamente!" echo "1) Pregunta de Geografia" echo "2) Pregunta de Historia" echo "3) Pregunta de Ciencias" echo "4) Pregunta de Política" echo "5) Pregunta de Informática" echo -e "" read -n1 -p "Escriba el número del tipo de pregunta (1-5) :=> " option echo -e "" case $option in 1) read -p "¿Cuál es la capital de Nueva Zelanda? " answerCapital if [ $answerCapital = "Wellington" ]; then echo "Excelente! Respuesta correcta!" else echo "Lo siento, $answerCapital no es la Capital de Nueva Zelanda!" fi ;; 2) read -p "¿Cuántos años duró la guerra de los 100 años? " answerGuerra if [ $answerGuerra -eq 116 ]; then echo "Excelente! Respuesta correcta!" else echo "Lo siento, la Guerra de los 100 años no duró $answerGuerra años!" fi ;; 3) read -p "¿Cuánto dura la luz del sol en llegar a la tierra?[minutos] " answerLuzSol if [ $answerLuzSol -eq 8 ]; then echo "Excelente! Respuesta correcta!" else echo "Lo siento, la luz del sol no llega a la tierra en $answerLuzSol minutos!" fi ;; 4) read -p "¿Cómo se llama el primer presidente de Nicaragua? " answerPresidente if [ "$answerPresidente" = "Emiliano Chamorro" ]; then echo "Excelente! Respuesta correcta!" else echo "Lo siento, "$answerPresidente" no fue el primer presidente de Nicaragua!" fi ;; 5) read -p "¿Cuántos bits hay en un Kilobyte? " answerKilo if [ $answerKilo -eq 8192 ]; then echo "Excelente! Respuesta correcta!" else if [ $answerKilo -gt 8192 ]; then echo "Lo siento, un Kilobyte es un poco menos que $answerKilo bits!" else echo "Lo siento, un Kilobyte es un poco más que $answerKilo bits!" fi fi ;; esac
#!/bin/bash
es_numero() { [[ $1 =~ ^-?[0-9]+$ ]]; }
pedir_num() {
read -p "$1" n
while ! es_numero "$n"; do
read -p "Error Eso es un letra: $1" n
done
echo "$n"
}
sumar() {
n1=$(pedir_num "Ingresa el primer número: ")
n2=$(pedir_num "Ingresa el Segundo número: ")
echo "Resultado: $((n1 + n2))"
}
restar() {
n1=$(pedir_num "Ingresa el Primer número: ")
n2=$(pedir_num "Ingresa el Segundo número: ")
echo "Resultado: $((n1 - n2))"
}
menu() {
echo "1) Sumar"
echo "2) Restar"
echo "3) Salir"
}
while true; do
menu
read -p "Opción: " op
case $op in
1) sumar ;;
2) restar ;;
3) exit 0 ;;
*) echo "Opción inválida." ;;
esac
done
Lo hice tratando de abarcar todo lo que hemos visto en el curso hasta ahora. Es un script sencillo, pero cubre todos los temas vistos hasta la clase. Recibe dos números como parámetros y luego muestra un menú con opciones para hacer diferentes operaciones con ellos, según la que se elija.
Lo único “extra” que usé fue la línea exit 1, que sirve para terminar el script en caso de que los parámetros sean nulos o no sean numéricos. Esa parte no la hemos visto aún en clase, pero la incluí para hacer una validación más completa.
#!/bin/bash # Solicitar que se ingrese un valor del 1 al 5. # Según el valor ingresado, hacer la validación utilizando las condicionales e imprimir el resultado. # Construir expresiones de validación numéricas, cadenas y archivos según la opción ingresada. currentDirectory=$(pwd) option=0 optionRegex='^[1-6]$' parRegex='^[1-9]$' echo "$currentDirectory/$0" if [[ -n $1 ]] && [[ $1 =~ $parRegex ]] && [[ -n $2 ]] && [[ $2 =~ $parRegex ]]; then echo "Parametros validos: $1 $2" else echo "Parametros invalidos." exit 1 fi while [[ $option != 6 ]]; do echo "Opciones: " echo "1. Sumar" echo "2. Restar" echo "3. Multiplicar" echo "4. Dividir" echo "5. Residuo" echo "6. Salir." read -p "Ingrese un numero [1-6]: " option if [[ $option =~ $optionRegex ]]; then case $option in 1) echo "Suma: $(($1+$2))";; 2) echo "Resta: $(($1-$2))";; 3) echo "Multiplicar: $(($1*$2))";; 4) echo "Dividir: $(($1/$2))";; 5) echo "Residuo: $(($1%$2))";; 6) echo "Saliendo...";; esac else echo "Entrada invalida." fi echo -e "\n" done
Seria bueno que los compañeros y colegas que saben mucho del tema no pongan código que no va al caso. No se trata de competir sino aprender y se que los que amateurs en lugar de aclarar terminan confundiendo. No veo sentido a pasar sobre el contenido. Si fueran cirujanos y estuviéramos en anatomía algunos ya estarían desmembrando cuerpos. Ir todos a la par seria lo mejor. Aportar sobre lo visto.
Aqui esta mi ejercicio:
Input:
Output:
Mi solución al reto 3, intente aplicar varias de las cosas aprendidas hasta la fecha en el curso:
# ! /bin/bash # Reto 3: #Solicitar que se ingrese un valor del 1 al 5. #Según el valor ingresado, hacer la validación utilizando las condicionales e imprimir el resultado. #Construir expresiones de validación numéricas, cadenas y archivos según la opción ingresada. #Autor: Javier - @javich numeroValid='^[1-5]$' limite=5 read -n1 -p "Ingrese un numero del 1 - 5: " numero echo -e "\n" if [[ $numero =~ $numeroValid ]]; then echo "El numero ingresado es: $numero - VALIDO" if [ $numero -eq 1 ] || [ $numero -eq 3 ] || [ $numero -eq 5 ]; then echo "El numero $numero es Impar" else echo "El numero $numero es Par" fi elif [ $numero -gt $limite ]; then echo "El numero ingresado es mayor a $limite - INVALIDO" else echo "El numero ingresado es menor que 1 y/o el caracter NO es VALIDO" fi