Domina los IF anidados en Bash con un flujo claro: primero validas la nota de un alumno y, si aprueba, abres una segunda decisión para saber si continuará en el siguiente nivel. Verás cómo usar operadores lógicos y condicionales, la sintaxis con corchetes y el cierre con la palabra reservada fi en un script .sh dentro de Ubuntu Server.
¿Qué son los IF anidados y para qué sirven?
Los IF anidados son condiciones dentro de otras condiciones: un if se ejecuta solo si el if principal se cumple. Permiten validaciones internas tras una evaluación principal, muy usados en algoritmos numéricos cuando una decisión depende de otra. Así, tras decidir si el alumno aprueba, se valida si continuará estudiando en el mismo colegio con una segunda condición.
¿Cómo se implementa un IF anidado en un script .sh?
A partir de un archivo .sh, se ajusta la sintaxis de corchetes para las condiciones y se emplean operadores como -ge (mayor o igual) y == para cadenas. Se pide la nota, se valida el resultado y, si aprueba, se consulta si continúa en el siguiente nivel con una segunda condición.
¿Cómo validar la nota con operadores condicionales?
Usa [ "$nota" -ge 7 ] para aprobar con nota mayor o igual a 7.
Estructura con if, then, else, y cierra con fi.
Mantén espacios alrededor de los corchetes y el operador.
¿Cómo preguntar si continúa estudiando con comparación de cadenas?
Lee una variable continua y compárala con == contra S o N.
Si es S, muestra “Bienvenido al siguiente nivel.”.
Si es N, muestra “Gracias por trabajar con nosotros. Mucha suerte.”.
¿Cuál es el flujo completo en Bash?
#!/bin/bash# Programa para ejemplificar el uso de los IF anidadosecho"¿Cuál es su nota?"read nota
if["$nota" -ge 7];thenecho"El alumno aprueba la materia."echo"¿Va a continuar estudiando en el siguiente nivel? (S/N)"read continua
if["$continua"=="S"];thenecho"Bienvenido al siguiente nivel."elseecho"Gracias por trabajar con nosotros. Mucha suerte."fielseecho"El alumno reprueba la materia."fi
Nota y validación principal: se decide si aprueba o reprueba.
Segunda validación anidada: solo si aprueba se pregunta si continúa.
Cierre correcto: cada if se cierra con su propio fi.
¿Qué habilidades, conceptos y keywords refuerzas con este ejemplo?
Este caso desarrolla competencias prácticas en Bash y scripting.
IF anidados: condición dentro de otra condición para validar decisiones encadenadas.
Operadores condicionales numéricos: -ge para mayor o igual que 7.
Comparación de cadenas: == para evaluar S o N en continua.
Sintaxis con corchetes: [ condición ] con espacios obligatorios.
Estructura de control: if, then, else, fi para abrir y cerrar bloques.
Entrada de usuario: read para capturar nota y continua.
Mensajería: echo para comunicar estados: aprueba, reprueba, continúa o no continúa.
Práctica en Ubuntu Server: edición y ejecución de un script.sh con cambios de sintaxis.
¿Te gustaría que exploremos más validaciones anidadas o añadamos rangos de calificaciones? Deja tus dudas o ideas en los comentarios.
# !/bin/bash
# Programa para ejemplificar el uso de los ifs anidados
# Autor:MartinDavilanotaClase=0continua=""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```
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 [ ]
# !/bin/bash
# programa para explicar la condicion i anidados
# Author:DiegoBeltran tw @diguitodev hista @diegodevelops
notaUn=0continua=""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```
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.
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
#!/bin/bash# Programa para utilziat IFAnidado# DBZnotaDeClase=0continua=""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:JoseDiaz<josemdiazax@gmail.com>notaClase=0continua=""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
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=0continua=""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
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/bashnotaClase=0continua=""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/bashecho "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
# !/bin/bash# Programa para ejemplificar el uso de los if anidados# Author: Juan ManuelnotaClase=0continua=""echo"Ejemplo Sentencia IF-Else"read -n1 -p "Indique cual es su nota (1-9): " notaClase
echo -e "\n"if[$notaClase -ge 7];thenecho"El alumno aprobó la materia"read -n1 -p "Va a continuar estudiando en el siguiente nivel? (s/n): " continua
if[$continua="s"];thenecho -e "\n"echo"Bienvenido al siguiente nivel"elseecho -e "\n"echo"Gracias por trabajar con nosotros, mucha suerte"fielseecho"El alumno reprobó la materia"fi
#!/bin/bash# Program to exemplify how to use nested 'if'.# Author:CristianCamilo-Cristianco9grade=0nextsubjet=""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:HawardTillero- htillero@gmail.comnotaClase=0continua =""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
Tiene un error en la linea:
echo -p "Deseas continuar? (s/n): " continua
cambia el "echo" por "read"
#!/bin/bashnotaClase=0continua=""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.
#!/bin/bash#Programa para mostrar el uso de los if anidados
#Autor:JesusReyes- mjreyes4c@gmail.comnotaClase=0continua=""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:JesusReyes-<mjreyes4c@gmail.com>notaClase=0continua=""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