KEVIN FIGUEROA
primqt n/a
muy bueno el aporte grasias
Mauricio Serra Vallejos
Excelente
Aprende a dominar las sentencias condicionales en Bash con ejemplos claros y comentados. Aquí verás cómo aplicar if, else y elif, la diferencia entre usar doble paréntesis y corchetes, y qué operadores numéricos y lógicos emplear para validar rangos y decisiones de forma fiable.
¿Cómo funcionan las sentencias if, else y elif en Bash?
Las decisiones en Bash siguen una sintaxis clara: if evalúa una condición, then ejecuta sentencias cuando es verdadera, elif añade más condiciones y else cubre el caso final. El bloque siempre cierra con fi.
¿Cómo validar una nota con doble paréntesis?
Ejemplo aritmético usando lectura desde teclado con read -n y read -p.
read -n 1 -p "Indique cuál es su nota (1-9): " nota_clase echo if (( nota_clase >= 7 )); then echo "El alumno aprueba la materia." else echo "El alumno reprueba la materia." fi
Puntos clave:
>=.¿Qué ejemplos prácticos se implementan con variables y read?
Además de notas, puedes evaluar condiciones sobre la edad con operadores específicos de Bash y extender decisiones con elif para manejar múltiples rangos.
¿Cómo validar edad con corchetes y -le?
Usa comparadores numéricos propios del test con corchetes.
read -p "Indique cuál es su edad: " edad if [ "$edad" -le 18 ]; then echo "La persona no puede sufragar o votar." else echo "La persona puede sufragar." fi
Puntos clave:
] y después de [.¿Cómo manejar múltiples rangos con elif?
Cuando hay más de dos opciones, incorpora elif y operadores lógicos.
read -p "Indique cuál es su edad: " edad if [ "$edad" -le 18 ]; then echo "La persona es adolescente." elif [ "$edad" -ge 19 ] && [ "$edad" -le 64 ]; then echo "La persona es adulta." else echo "La persona es adulto mayor." fi
Puntos clave:
¿Qué reglas de sintaxis y operadores debes cuidar en Bash?
Mantener una sintaxis estricta evita errores sutiles. Estas son las prácticas esenciales vistas:
[ condición ]. Sin espacios falla.then si escribes en la misma línea.(( ... )) o con [ -le, -ge ].&& para AND; mantén cada comparación en su propio [ ... ] para claridad.read -p para el prompt; read -n 1 para un carácter.echo para confirmar cada rama de decisión.¿Tienes otra validación que quieras automatizar en Bash? Cuéntala en los comentarios y probamos juntos sus condiciones.
KEVIN FIGUEROA
primqt n/a
muy bueno el aporte grasias
Mauricio Serra Vallejos
Excelente
Juan Camilo Alvarez Jurado
A mi entender, y según lo que investigué, el uso de [[]], [] o (()) depende del caso de uso (favor corríjanme si estoy mal).
[] es para compatibilidad (estándar POSIX)
Los operadores lógicos estándar (>, <, etc.) se usan para comparación lexicográfica de cadenas Para comparar números se usan los operadores: -eq: Igual a -ne: Diferente a -gt: Mayor que -ge: Mayor o igual que -lt: Menor que -le: Menor o igual que [[]] tiene más características que [] (como manejo de expresiones regulares y otros operadores de validación) (()) es para validaciones aritméticas (sólo números implicados; preferible en especial cuando hay operaciones aritméticas). Usa los operadores lógicos estándar.
Un ejemplo combinado de condicionales con números y cadenas:
if (( $edad > 18 )) && [[ $cargo == "Ingeniero" ]]
José B. Méndez Padín
Mi ejemplo del código.
#!/bin/bash # Author: Jose Padín # Date: 08/10/2019 edad=0 echo "EJEMPLO SENTENCIA IF/ELIF/ELSE" read -p "Introduzca su edad: " edad if [ $edad -le 0 ]; then echo "La persona aun no ha nacido, ni falta que le hace" elif [ $edad -ge 1 ] && [ $edad -le 13 ]; then echo "Es un niño" elif [ $edad -le 18 ]; then echo "La persona es adolescente" elif [ $edad -ge 19 ] && [ $edad -le 64 ]; then echo "La persona es adulta" elif [ $edad -ge 65 ] && [ $edad -le 90 ]; then echo "La persona es bastante mayor ya" else echo "La persona es un dinosaurio" fi```
Oswaldo Peralta
Estimados, una consulta... por què en el primer if se usò parèntesis y en el segundo corchetes?
Muchas gracias,
Miguel Angel Reyes Moreno
Por lo que tengo entendido hasta ahora, simplemente son 2 formas diferentes de expresar la misma instrucción
Franco Manca
Resumen de la clase
Sentencias If/Else
Sintaxis if-else
if [ condition ]; then statement else statement fi
Sintaxis if-elif-else
if [ condition ]; then statement elif [ condition ]; then statement else statement fi
Los operadores lógicos estándar (>, <, etc.) se usan para comparación lexicográfica de cadenas. Para comparar números se usan los operadores relacionales:
-eq: is equal to // Igual a-ne: is not equal to // No es igual a-gt: is greater than // Mayor a-ge: is greater than or equal to // Mayor o igual a-lt: is less than // Menor a-le: is less than or equal to // Menor o igual aEn las condiciones tenemos 3 casos:
[ condition ]: condición compatibles con posix shell.[[ condition ]]: es una versión extendida de caso anterior, como manejo de expresiones regulares y soporta mas operadores como posix estadar (||, &&, etc). Tambien es soportado por otras shell como zsh, ksh, entre otras.(( condition )) es para validaciones aritméticas (sólo números implicados; preferible en especial cuando hay operaciones aritméticas). Usa los operadores lógicos estándar.Mas detalles sobre la explicacion sobre como escribir las codiciones en: Difference between single and double square brackets in Bash
Enzo Venturi
Les dejo mi código:
Enrique Villalobos Andrade
GE -> Greater or Equal / mayor o igual. LE -> Lower or Equal / menor o igual.
Irving Juárez
Como que bash le da un aire a php
juan CORSI
(( )) (doble paréntesis): Se utiliza para realizar evaluaciones aritméticas. Puedes usar operadores aritméticos, como +, -, *, /, etc., dentro de (( )). Devuelve un valor de éxito (0) si la expresión dentro de (( )) es verdadera, o un valor de error (no 0) si es falsa.
[ ] (corchetes simples): Se utiliza para realizar evaluaciones de expresiones condicionales. Puede verificar condiciones lógicas o comparar cadenas y valores. Devuelve un valor de éxito (0) si la expresión dentro de [ ] es verdadera, o un valor de error (no 0) si es falsa.
Ernesto Isaac Marrero Gámez
Si les complica mucho utilizar Vim, usen nano, es mucho mas sencillo e intuitivo, requiere una menor curva de aprendizaje.
Charl Barrera
en el bash de mi ubuntu, -n me saca un error: 7: read: Illegal option -n
Gonzalo Gramaglia
Comparte el código entero la próxima, o sé más explícito, así la comunidad puede ayudarte :)
David Mendez Reynoso
Ejecuta el script con el comando $bash nombreScript
Carlos José González Juan
me hice pelota.. Por un lado con doble paréntesis, por otro lado con corchetes... No me aclaro
Marvin Javier Santos Fernández
KEPLER GARCIA
No entiendo que estoy haciendo mal :/
Johan Omar de Jesus Zapata Delgado
prueba
if [ $edad -eq 0]; then
al inicio de tu estuctura if
Andres Prieto
Revisa esta cheatsheet acá tienes varios condicionales
Dilan Romero
**CONDICIONES**
Las condiciones se evalúan dentro de los corchetes *[ ]*, puedes utilizar operadores de comparación, expresiones regulares y variables para crear condiciones
*OPERADORES DE COMPRACIONES*
* *-eq* Igual a
* *-ne* Diferente de
* *-gt* Mayor que
* *-lt* Menor que
* *-ge* Mayor o igual que
* *-le* Menor o igual que
*OPERADORES LOGICOS*
* *&&* Y
* *| |* O
* *!* Negación #!/bin/bash #Ejemplo de uso de if else #Autor Dilan Romero -@dilan78
#LE PEDIREMOS AL USAURIO QUE INGRESE UN NUMERO PARA SABER SI EL POSITVO O NEGATIVO
echo "BIENVENIDOS" read -p "INGRESA UN NUMERO: " numero
#VERIFICAMOS SI EL NUMERO ES POSITIVO, NEGATIVO O CERO
if [ $numero -gt 0 ]; then echo "EL NUMERO ES POSITIVO" elif [ $numero -lt 0 ]; then echo "EL NUMERO ES NEGATIVO" else echo "EL NUMERO ES CERO" fi
#!/bin/bash #Ejemplo de uso de if else #Autor Dilan Romero -@dilan78 #LE PEDIREMOS AL USAURIO QUE INGRESE UN NUMERO PARA SABER SI EL POSITVO O NEGATIVO echo "BIENVENIDOS" read -p "INGRESA UN NUMERO: " numero #VERIFICAMOS SI EL NUMERO ES POSITIVO, NEGATIVO O CERO if [ $numero -gt 0 ]; then echo "EL NUMERO ES POSITIVO" elif [ $numero -lt 0 ]; then echo "EL NUMERO ES NEGATIVO" else echo "EL NUMERO ES CERO" fi
Mario Alexander Vargas Celis
Diego Andres Benitez
#!/bin/bash notaClase=0 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" fi
Luis Alberto Juarez Corona
saludos
1 #! /bin/bash 2 #programa para USAR las condicionales elif 3 4 calif=0 5 edad=0 6 7 echo "Ejemplo Sentencia If-Else" 8 read -n2 -p "Indica cual es tu nota del 1 al 10: " calif 9 10 11 if (( $calif == 10 )); then 12 echo " se aprueba la materia con exito " 13 elif (( $calif <= 10 )) && (( $calif >= 7 )); then 14 echo " NO reprobado" 15 else 16 echo " se reprueba la materia" 17 fi 18 19 read -p "Indique su edad: " edad 20 if [ $edad -ge 18 ] && [ $edad -lt 61 ]; then 21 echo " Eres adulto joven" 22 elif [ $edad -ge 60 ]; then 23 echo " Eres de la tercera edad" 24 else 25 echo " Eres menor de edad" 26 fi 27 28 29 30 31 ~ ~
Mauricio Serra Vallejos
#!/bin/bash echo "Ejemplo sentencias If-elif-else" edad=0 nombre="" read -p "Indique cual es su edad: " edad echo -e "\n" read -p "Indique su nombre: " nombre echo -e "\n" if [ $edad -ge 18 ]; then echo "$nombre es una persona adulta." elif [ $nombre -ge 1 ] && [ $edad -le 15]; then echo "$nombre es una persona joven." else echo "Digite nuevamente la edad." fi
**Conditional statements, primary expressions **
[ STRING1 == STRING2 ] --> True if the strings are equal. "=" may be used instead of "==" for strict POSIX compliance.
[ STRING1 != STRING2 ] --> True if the strings are not equal.
[ STRING1 < STRING2 ] --> True if "STRING1" sorts before "STRING2" lexicographically in the current locale.
[ STRING1 > STRING2 ] --> True if "STRING1" sorts after "STRING2" lexicographically in the current locale.
[ -a FILE ] --> True if FILE exists.
[ -b FILE ] --> True if FILE exists and is a block-special file.
[ -c FILE ] --> True if FILE exists and is a character-special file.
[ -d FILE ] --> True if FILE exists and is a directory.
[ -e FILE ] --> True if FILE exists.
[ -f FILE ] --> True if FILE exists and is a regular file.
[ -g FILE ] --> True if FILE exists and its SGID bit is set.
[ -h FILE ] --> True if FILE exists and is a symbolic link.
[ -k FILE ] --> True if FILE exists and its sticky bit is set.
[ -p FILE ] --> True if FILE exists and is a named pipe (FIFO).
[ -r FILE ] --> True if FILE exists and is readable.
[ -s FILE ] --> True if FILE exists and has a size greater than zero.
[ -t FD ] --> True if file descriptor FD is open and refers to a terminal.
[ -u FILE ] --> True if FILE exists and its SUID (set user ID) bit is set.
[ -w FILE ] --> True if FILE exists and is writable.
[ -x FILE ] --> True if FILE exists and is executable.
[ -O FILE ] --> True if FILE exists and is owned by the effective user ID.
[ -G FILE ] --> True if FILE exists and is owned by the effective group ID.
[ -L FILE ] --> True if FILE exists and is a symbolic link.
[ -N FILE ] --> True if FILE exists and has been modified since it was last read.
[ -S FILE ] --> True if FILE exists and is a socket.
[ FILE1 -nt FILE2 ] --> True if FILE1 has been changed more recently than FILE2, or if FILE1 exists and FILE2 does not.
[ FILE1 -ot FILE2 ] --> True if FILE1 is older than FILE2, or is FILE2 exists and FILE1 does not.
[ FILE1 -ef FILE2 ] --> True if FILE1 and FILE2 refer to the same device and inode numbers.
[ -o OPTIONNAME ] --> True if shell option "OPTIONNAME" is enabled.
[ -z STRING ] --> True of the length if "STRING" is zero.
[ -n STRING ] or [ STRING ] --> True if the length of "STRING" is non-zero.
[ ARG1 OP ARG2 ] --> "OP" is one of -eq, -ne, -lt, -le, -gt or -ge. These arithmetic binary operators return true if "ARG1" is equal to, not equal to, less than, less than or equal to, greater than, or greater than or equal to "ARG2", respectively. "ARG1" and "ARG2" are integers.
En **Bash**, las sentencias **if/else** se usan para evaluar condiciones y ejecutar diferentes bloques de código dependiendo de si una condición es verdadera o falsa.
### Sintaxis básica:
if \[ condición ]; then   \# Código si la condición es verdadera else   \# Código si la condición es falsa fi
### Ejemplo:
\#!/bin/bash read -p "Ingrese su edad: " edad if \[ "$edad" -ge 18 ]; then   echo "Eres mayor de edad." else   echo "Eres menor de edad." fi
### Explicación:
- **if \[ condición ]**: Evalúa la condición dentro de los corchetes \[ ].
- **then**: Si la condición es verdadera, el código que sigue a then se ejecuta.
- **else**: Si la condición es falsa, se ejecuta el bloque de código bajo else.
- **fi**: Finaliza la estructura if/else.
### Ejemplo con múltiples condiciones (elif):
\#!/bin/bash read -p "Ingrese su edad: " edad if \[ "$edad" -ge 18 ]; then   echo "Eres mayor de edad." elif \[ "$edad" -ge 13 ]; then   echo "Eres adolescente." else   echo "Eres niño." fi
En este caso, puedes evaluar múltiples condiciones usando elif.
### Operadores comunes para condiciones:
- **-eq**: igual
- **-ne**: no igual
- **-lt**: menor que
- **-le**: menor o igual que
- **-gt**: mayor que
- **-ge**: mayor o igual que
También se pueden usar operadores lógicos como && (AND) y || (OR) para combinar condiciones:
if \[ "$edad" -ge 18 ] && \[ "$edad" -lt 65 ]; then   echo "Eres un adulto." fi
### Uso de expresiones regulares en Bash:
En Bash también puedes usar expresiones regulares dentro de las sentencias if con el operador =~.
nameRegex='^\[A-Z]\[a-z]{1,15}$' read -p "Ingrese su nombre: " name if \[\[ $name =~ $nameRegex ]]; then   echo "El nombre es válido." else   echo "El nombre no es válido." fi
Este tipo de sentencias te permite un control efectivo sobre el flujo de tu script Bash.