If Anidados
Clase 20 de 43 • Curso de Programación en Bash Shell
Contenido del curso
Clase 20 de 43 • Curso de Programación en Bash Shell
Contenido del curso
Gabriel Salvador
Denisse Godoy
Miguel Angel Reyes Moreno
Martin DAVILA
José B. Méndez Padín
Oswaldo Peralta
Oswaldo Peralta
Diego Andrés Beltrán Garavito
Alfonso Adame Rueda
Roger Alexis Valarezo Garcia
Victor Ruiz
Rafael Baculima
valentina stephany kassar acuña
Macarena Sepúlveda
DAVID EDUARDO BAEZ SANCHEZ
Jose Miguel Diaz
Marvin Javier Santos Fernández
Moises Hernandez
Sergy Lopez Moreno
Francisco Ignacio Regular Contreras
Mario Alexander Vargas Celis
Diego Andres Benitez
Manuel Jesus Reyes López
Ian Cristian Ariel Yané
Juan Manuel Hincapié
Cristian Camilo Cortes Ortiz
Haward Rafael Tillero Jimenez
Me parece raro usar un solo igual para validar una condición cuando en la mayoría de lenguajes se usen 2 iguales (==)
Ambos sirven, pero la style guide de Google recomienda usar doble signo de igual (==):
Entonces ¿por qué el profesor quiso usar solo 1 signo en vez de ambos? Se ve muy extraño.
# !/bin/bash # Programa para ejemplificar el uso de los ifs anidados # Autor: Martin Davila notaClase=0 continua="" echo "Ejemplo Sentencia If -else" read -n1 -p "Indique cúal es su nota (1-9):" notaClase echo -e "\n" if [ $notaClase -ge 7 ]; then echo "El alumno aprueba la materia" read -p "Si va continuar estudiando en el siguiente nivel (s/n):" continua if [ $continua = "s" ]; then echo "Bienvenido al siguiente nivel" else echo "Gracias por trabajar con nosotros, mucha suerte !!!" fi else echo "El alumno reprueba la materia" fi```
Entonces, por lo que veo, en los if se pueden usar tanto los corchetes como los paréntesis indistintamente, ¿no? Y, además, dobles o simples.
Asi es estimado, doble parentesis (( )) o corchetes simples [ ] cumplen la misma funciòn, sin embargo corchetes simples parece ser la màs utilizada, supongo que por su simplicidad.
Una correcciòn respecto a mi respuesta anterior. El profesor usa parentesis dobles con operadores relacionales del tipo ">=" y corchetes cuando usa -ge (greater than), entre otros.
Con esto parece claro que sì hay diferencias respecto al uso de (( )) o [ ]
Hola, les dejo mis apuntes.
# ! /bin/bash # programa para explicar la condicion i anidados # Author: Diego Beltran tw @diguitodev hista @diegodevelops notaUn=0 continua="" echo "Ejemplo Sentecia IF -Else" read -n1 -p "INdique su nota (1-9): " notaUn echo -e "\n" if [ $notaUn -ge 7 ]; then echo "El alumno aprobó" read -p "continuar estudiando (s/n) " continua if [ $continua = "s" ]; then echo "Bienvenido" else echo "gracias, te esperamos" fi else echo "El alumno no aprobo" fi```
estoy super contento con este curso gracias platzi
Que diferencia hay entre usar un if con () o con []
Me refiero a esto if (( $notaClase >= 7 )); then if [ $edad -le 18 ]; then
Muchas gracias
Hola esto fue lo que encontre, espero te sirva.
Paréntesis individuales (...) está creando una subshell Doble paréntesis - ((...)) es para operaciones aritméticas Single Square Bracket: [...] es la sintaxis de POSIX test Double Square Brackets - [[]] es la sintaxis de las expresiones condicionales de bash
Ten muy en cuenta al momento de querer comparar dos números usar (( )). Ya que si usas [[ ]] el resultado será otro ya que se comparará como texto y no como un valor.
#!/bin/bash
prog para ejemplificar el uso de los if anidados
#Autor: Macarena
notaClase=0
echo "Ejemplo de sentencia IF:ELSE" read -n1 -p "Indique cual es su nota(1-9):" notaClase echo -e "\n" if (( $notaClase >= 7 )); then echo "El alumno aprueba la materia" read -p "Si va a continuar estudiando en el siguiente nivel (s/n):" continua if [ $continua = "s" ]; then echo "Bienvenido al siguiente nivel" else echo "Gracias por trabajar con nosotros, mucha suerte!!!" fi else echo "Reprueba la materia" fi
Entendido
#!/bin/bash # Programa para utilziat IF Anidado # DBZ notaDeClase=0 continua="" echo "************************************************" echo "Ejemplo sentencia If Anidados" echo "************************************************" read -n2 -p "Indica cuales es la nota (1-10)" notaDeClase echo -e "\n" if (( $notaDeClase >= 7 )); then echo "El alumno aprobo la materia con una nota de: $notaDeClase ¡¡¡¡¡Felicitaciones!!!!!!!" echo "************************************************" echo -e "\n" read -p "Si va continuar estudiando en el siguiente nivel (s/n):" continua if [ $continua = "s" ]; then echo "Ud continua estudiando, su respuesta fue $continua . Buena suerte para el siguiente curso.." else echo "Ud NO continua estudiando, su respuesta fue $continua . Lastima, pero aca te esperamos para seguir estudiando." fi echo "************************************************" echo -e "\n" else echo "El alumno reprueba la materia con una nota de: $notaDeClase Intentalo mas tarde :(" echo -e "\n" fi
# !/bin/bash # Programa para ejemplificar el uso del if anidado. # Autor: Jose Diaz <josemdiazax@gmail.com> notaClase=0 continua="" echo "Ejemplo sentencias if/else" echo -e "\n" read -n1 -p "Indique su nota (0-9): " notaClase echo -e "\n" if [ $notaClase -ge 7 ] ; then echo -e "Aprobado \n" read -n1 -s -p "¿Continuaras estudiando? (s/n)" continua echo -e "\n" if [ $continua == "s" ] ; then echo "Bienvenido al siguiente nivel" else echo "Vete a la mierda" fi else echo "Reprobado" fi
que hacia el -p despues del read?
Hice el Ejercicio indicado pero tengo el siguiente error: line 15: [: =: unary operator expected
Alguien me ayuda a validar que puede ser lo incorrecto?, les anexo el codigo
notaClase=0 continua="" echo "Programa Ejemplo IF Anidado" read -n1 -p "Ingresa la Calificacion (0-9): " notaClase echo -e "\n" if [ $notaClase -ge 7 ]; then echo "Aprobaste la Materia" echo -p "Deseas continuar? (s/n): " continua if [ $continua = "s" ]; then echo "Welcome to next level" else echo "Gracias por Participar, Exito" fi else echo "El numero reprobo" fi
Tiene un error en la linea: echo -p "Deseas continuar? (s/n): " continua
cambia el "echo" por "read"
#!/bin/bash notaClase=0 continua="" echo "Programa Ejemplo IF Anidado" read -n1 -p "Ingresa la Calificacion (0-9): " notaClase echo -e "\n" if [ $notaClase -ge 7 ]; then echo "Aprobaste la Materia" read -p "Deseas continuar? (s/n): " continua if [ $continua == "s" ]; then echo "Welcome to next level" else echo "Gracias por Participar, Exito" fi else echo "El numero reprobo" fi
En **Bash**, puedes utilizar **if anidados** para evaluar múltiples condiciones dentro de una misma estructura. Esto significa que un bloque `if` puede estar contenido dentro de otro bloque `if` para evaluar condiciones más complejas. ### Sintaxis: ```bash if [ condición1 ]; then # Código si la condición1 es verdadera if [ condición2 ]; then # Código si la condición2 es verdadera else # Código si la condición2 es falsa fi else # Código si la condición1 es falsa fi ``` ### Ejemplo de `if` anidado: ```bash #!/bin/bash read -p "Ingrese su edad: " edad if [ "$edad" -ge 18 ]; then echo "Eres mayor de edad." if [ "$edad" -ge 65 ]; then echo "Eres un adulto mayor." else echo "Eres un adulto joven." fi else echo "Eres menor de edad." if [ "$edad" -le 12 ]; then echo "Eres un niño." else echo "Eres un adolescente." fi fi ``` ### Explicación: 1. Primero se evalúa la condición principal con el `if` externo, si la condición es verdadera, se ejecuta el bloque de código dentro de ese `if`. 2. Dentro del primer bloque `if`, hay otro `if` que evalúa otra condición. Si esta segunda condición es verdadera, se ejecuta otro bloque de código; si no, se ejecuta el bloque `else`. 3. El `else` del primer `if` también puede contener un `if` adicional para manejar más condiciones si la primera fue falsa. Este tipo de estructura es útil cuando necesitas comprobar múltiples criterios o condiciones de forma jerárquica. Sin embargo, es recomendable no abusar de los `if` anidados, ya que pueden hacer que los scripts sean más difíciles de leer. ````En \*\*Bash\*\*, puedes utilizar \*\*if anidados\*\* para evaluar múltiples condiciones dentro de una misma estructura. Esto significa que un bloque `if` puede estar contenido dentro de otro bloque `if` para evaluar condiciones más complejas. \### Sintaxis: ```bash if \[ condición1 ]; then   \# Código si la condición1 es verdadera   if \[ condición2 ]; then   \# Código si la condición2 es verdadera   else   \# Código si la condición2 es falsa   fi else   \# Código si la condición1 es falsa fi ``` \### Ejemplo de `if` anidado: ```bash \#!/bin/bash read -p "Ingrese su edad: " edad if \[ "$edad" -ge 18 ]; then   echo "Eres mayor de edad."       if \[ "$edad" -ge 65 ]; then   echo "Eres un adulto mayor."   else   echo "Eres un adulto joven."   fi else   echo "Eres menor de edad."       if \[ "$edad" -le 12 ]; then   echo "Eres un niño."   else   echo "Eres un adolescente."   fi fi ``` \### Explicación: 1\. Primero se evalúa la condición principal con el `if` externo, si la condición es verdadera, se ejecuta el bloque de código dentro de ese `if`. 2\. Dentro del primer bloque `if`, hay otro `if` que evalúa otra condición. Si esta segunda condición es verdadera, se ejecuta otro bloque de código; si no, se ejecuta el bloque `else`. 3\. El `else` del primer `if` también puede contener un `if` adicional para manejar más condiciones si la primera fue falsa. Este tipo de estructura es útil cuando necesitas comprobar múltiples criterios o condiciones de forma jerárquica. Sin embargo, es recomendable no abusar de los `if` anidados, ya que pueden hacer que los scripts sean más difíciles de leer.
Dejo mi versión del código, aclarando que incluyo el ciclo while, el cual será visto más adelante, pero que implemente a partir de una clase previa donde fue usado.
#!/bin/bash notaClase=0 continua="" read -n2 -p "Indique cuál es su nota (0-10) " notaClase echo -e "\n" while [ $notaClase -gt 10 ] || [ $notaClase -lt 0 ] do echo "La nota ingresada es incorrecta" read -n2 -p "Indique cuál es su nota (0-10) " notaClase echo -e "\n" done if [ $notaClase -lt 5 ]; then echo "El estudiante reprueba la materia con una calificación de $notaClase" elif [ $notaClase -ge 5 ] && [ $notaClase -lt 7 ]; then echo "El estudiante puede presentar examen supletorio" else echo "El estudiante aprueba con una calificación de $notaClase" read -p "¿Desea cursar en esta institución el siguiente nivel? (s/n): " continua if [ $continua == "s" ]; then echo "Muchas gracias por confiar en nosotros, le damos la bienvenida al siguiente nivel" else echo "Gracias por trabajar y haber confiado en nosotros hasta ahora, mucha suerte !!!" fi fi
#!/bin/bash #Programa para mostrar el uso de los if anidados #Autor: Jesus Reyes - mjreyes4c@gmail.com notaClase=0 continua="" validareg='^[1-9]$' validaanswer='^[SsNn]$' echo "Ejemplo sentencia if anidados" echo -e "\n" read -n1 -p "indica cual es su nota (1-9):" notaClase echo -e "\n" if [[ $notaClase =~ $validareg ]]; then if [[ $notaClase -ge 7 ]]; then echo "el alumno aprueba la materia" read -p "Por favor indique si continuara estudiando en el siguiente nivel: (s/n)" continua if [[ $continua =~ $validaanswer ]]; then if [[ $continua = "s" ]] || [[ $continua = "S" ]]; then echo "Bienvenido al siguiente nivel" else echo "Gracias por trabajar con nosotros, muchas suerte!" fi else echo "caracter invalido" fi else echo "el alumno reprueba la materia" fi else echo "Por favor ingresa un numero entre el 1 y el 9" fi ```#!/bin/bash \#Programa para mostrar el uso de los if anidados \#Autor: Jesus Reyes - <mjreyes4c@gmail.com> notaClase=0 continua="" validareg='^\[1-9]$' validaanswer='^\[SsNn]$' echo "Ejemplo sentencia if anidados" echo -e "\n" read -n1 -p "indica cual es su nota (1-9):" notaClase echo -e "\n" if \[\[ $notaClase =~ $validareg ]]; then    if \[\[ $notaClase -ge 7 ]]; then   echo "el alumno aprueba la materia"   read -p "Por favor indique si continuara estudiando en el siguiente nivel: (s/n)" continua   if \[\[ $continua =~ $validaanswer ]]; then   if \[\[ $continua = "s" ]] || \[\[ $continua = "S" ]]; then   echo "Bienvenido al siguiente nivel"   else   echo "Gracias por trabajar con nosotros, muchas suerte!"   fi   else   echo "caracter invalido"   fi   else   echo "el alumno reprueba la materia"   fi else   echo "Por favor ingresa un numero entre el 1 y el 9" fi
#!/bin/bash echo "Deseas saber si votas? [Ingresa 's' para si | Ingresa 'n' para no]: " read opcion if [[ $opcion == "s" ]];then # Programa para consultar la edad y nombre del usuario # Declaración de expresiones regulares regex_nombre="^[A-Z]?[a-z]+$" regex_edad="^[0-9]{1,3}$" #Solicitar datos echo "Ingresa tu nombre: " read nombre echo "Ingresa tu edad: " read edad if [[ $edad > 18 && $edad =~ $regex_edad && $nombre =~ $regex_nombre ]]; then echo "$nombre, eres mayor de edad, debes votar." else echo "$nombre, eres menor de edad, no votas." fi else echo "adios" fi
Ejemplo
# !/bin/bash # Programa para ejemplificar el uso de los if anidados # Author: Juan Manuel notaClase=0 continua="" echo "Ejemplo Sentencia IF-Else" read -n1 -p "Indique cual es su nota (1-9): " notaClase echo -e "\n" if [ $notaClase -ge 7 ]; then echo "El alumno aprobó la materia" read -n1 -p "Va a continuar estudiando en el siguiente nivel? (s/n): " continua if [ $continua = "s" ]; then echo -e "\n" echo "Bienvenido al siguiente nivel" else echo -e "\n" echo "Gracias por trabajar con nosotros, mucha suerte" fi else echo "El alumno reprobó la materia" fi
Terminal:
#!/bin/bash # Program to exemplify how to use nested 'if'. # Author: Cristian Camilo - Cristianco9 grade=0 nextsubjet="" echo "************ VALIDATION SYSTEM ************" read -p "Plase enter your grade: " grade if [ $grade -ge 7 ]; then echo "*********** Subject approved **************" echo "Do you want start with the next subject?" read -p "Please enter (y/n)" nextSubject if [ $nextSubject = "y" ]; then echo "******* Welcome to the next subject *******" echo "******************* END *******************" else echo "***** Thanks you for studying with us *****" echo "******************* END *******************" fi else echo "************ Failed subject ***************" echo "******************* END *******************" fi
Agregando el cambio de String Mayuscula a Minuscula para evitar error en la respuesta.
# !/bin/bash # Programa para ejemplificar el uso de los ifs anidados # Autor: Haward Tillero - htillero@gmail.com notaClase=0 continua = "" echo "Ejemplo Sentencia if - else" read -n1 -p "Indique cúal es su nota (1-9):" notaClase echo -e "\n" if [[ $notaClase -ge 7 ]]; then echo "El alumno aprueba la materia" read -n1 -p "Si va continuar estudiando en el siguiente nivel (s/n):" continua echo -e "\n" if [[ ${continua,} = "s" ]]; then echo "Bienvenido al siguiente nivel" else echo "Gracias por trabajar con nosotros, mucha suerte!!!" fi else echo "El alumno reprueba la materia" fi