Sentencias If/Else
Clase 18 de 43 • Curso de Programación en Bash Shell
Contenido del curso
Clase 18 de 43 • Curso de Programación en Bash Shell
Contenido del curso
Breiner Nieto Barcelo
Fredy Mendoza Vargas
Andrés Felipe Carreño
KEVIN FIGUEROA
primqt n/a
Mauricio Serra Vallejos
Juan Camilo Alvarez Jurado
José B. Méndez Padín
Oswaldo Peralta
Miguel Angel Reyes Moreno
Franco Manca
Enzo Venturi
Enrique Villalobos Andrade
Irving Juárez
juan CORSI
Ernesto Isaac Marrero Gámez
Charl Barrera
Gonzalo Gramaglia
David Mendez Reynoso
Carlos José González Juan
Marvin Javier Santos Fernández
KEPLER GARCIA
Johan Omar de Jesus Zapata Delgado
Andres Prieto
Dilan Romero
Mario Alexander Vargas Celis
Diego Andres Benitez
Luis Alberto Juarez Corona
Mauricio Serra Vallejos
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 a
Muchas gracias por el aporte
Gracias Breiner por la información.
**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.
muy bueno el aporte grasias
Excelente
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" ]]
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```
Estimados, una consulta... por què en el primer if se usò parèntesis y en el segundo corchetes?
Muchas gracias,
Por lo que tengo entendido hasta ahora, simplemente son 2 formas diferentes de expresar la misma instrucción
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
Les dejo mi código:
GE -> Greater or Equal / mayor o igual. LE -> Lower or Equal / menor o igual.
Como que bash le da un aire a php
(( )) (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.
Si les complica mucho utilizar Vim, usen nano, es mucho mas sencillo e intuitivo, requiere una menor curva de aprendizaje.
en el bash de mi ubuntu, -n me saca un error: 7: read: Illegal option -n
Comparte el código entero la próxima, o sé más explícito, así la comunidad puede ayudarte :)
Ejecuta el script con el comando $bash nombreScript
me hice pelota.. Por un lado con doble paréntesis, por otro lado con corchetes... No me aclaro
No entiendo que estoy haciendo mal :/
prueba
if [ $edad -eq 0]; then
al inicio de tu estuctura if
Revisa esta cheatsheet acá tienes varios condicionales
**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
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.
#!/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
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 ~ ~
#!/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