No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Programación en Bash Shell

Curso de Programación en Bash Shell

Marco Antonio Toscano Freire

Marco Antonio Toscano Freire

Sentencias If/Else

18/43
Recursos

Aportes 27

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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

Para conocer la diferencia entre single bracket [ ] vs double brackets [[ ]] pueden consultar la siguiente respuesta en Stackoverflow.

**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.

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,

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 a

En 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

GE -> Greater or Equal / mayor o igual.
LE -> Lower or Equal / menor o igual.

Si les complica mucho utilizar Vim, usen nano, es mucho mas sencillo e intuitivo, requiere una menor curva de aprendizaje.

https://www.nano-editor.org/

en el bash de mi ubuntu, -n me saca un error: 7: read: Illegal option -n

me hice pelota… Por un lado con doble paréntesis, por otro lado con corchetes… No me aclaro

```python #!/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 ```

(( )) (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.

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

  • ¿ Cómo utilizar las sentencias if, else if, else ?
    Condition utiliza
  1. Operadores lógicos.
  2. Operadores condicionales.
    if [ condition ]; then
    statement 1
    elif [ condition ]; then
    statement 2
    else
    statement 3
    fi

De hecho eso de la sintaxis se hace configurando o no el editor vim, ya que yo no hice el archivo de al inicio y aun así también me aparecen las letras subrayadas en rojo

#!/usr/bin/env bash
# Type your age
# Carlos Velasquez - @crlosvelasquez

edad=0

echo "Ejemplo sentencia if-else"

read -p "Type your age: " edad

if [[ $edad =~ ^[0-9]+$ ]]; then
    if [[ $edad -le 18 ]]; then
        echo "The person is a minor"
    elif [[ $edad -ge 19 && $edad -le 65 ]]; then
        echo "The person is an adult"
    else
        echo "The person is an older adult"
    fi
else
    echo "Type a valid number"
fi

Este es mi avance en el curso , muchas gracias profe.

#!/usr/bin/env bash
#lec_10_file.sh
#  bash lec_10_file.sh
echo "IF "
grade=0
age=0
read -n 1 -p "Put your grade between 0 to 9 : " grade
echo -e "\n"
read -p "Put your age : " age

echo "shot IF"
if [[ $grade > 7 ]]; then
  echo "Congratulations! You passed"
else
  echo "Sorry! You need to take it again"
fi

echo "large IF"
if [[ $age -le 18 ]]; then
  echo "You can not vote"
elif [[ $age -le 32 ]]  && [[ $grade > 7 ]]; then
  echo "You can vote  with me "
  echo "You pass the exam"
else
  echo "You are too old"
fi

2x tranca

genial

Listo

#!/bin/bash
# Programa para utilziat IF
# DBZ

notaDeClase=0
edad=0
echo "************************************************"
echo "Ejemplo sentencia If -Else"
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!!!!!!!"
else
    echo "El alumno reprueba la materia con una nota de: $notaDeClase  Intentalo mas tarde :("
    echo -e "\n"
fi
echo "************************************************"
echo -e "\n"
read -n2 -p "Indica cuales es tu edad (1-99)" edad
echo -e "\n"
if [ $edad -le 17 ]; then
    echo "Ud es menor de edad, tienes : $edad Años."
else 
    echo "Ud es mayor de edad, tienes : $edad Años."
fi

El otro es

#!/bin/bash
# Programa para utilziat IF Else If
# DBZ

edad=0
echo "************************************************"
echo "Ejemplo sentencia If -Else-If-Else"
echo "************************************************"
echo "************************************************"
echo -e "\n"
read -n2 -p "Indica cuales es tu edad (1-99)" edad
echo -e "\n"
if [ $edad -le 17 ]; then
    echo "Ud es menor de edad, tienes : $edad Años."
elif [ $edad -le 65 ]; then
    echo "Ud es mayor de edad, tienes : $edad Años."
else
    echo "Ud es de la tercera de edad, tienes : $edad Años."
fi

Como que bash le da un aire a php

# !/bin/bash
# Programa para ejemplificar el uso de la sentencia de decisión if, else
# Autor: Martin Davila

notaClase=0
edad=0

echo "Ejemplo Sentencia If -else"
read -n1 -p "Indique cúal es su nota (1-9):" notaClase
echo -e "\n"
if (( $notaClase >= 7 )); then
    echo "El alumno aprueba la materia"
else
    echo "El alumno reprueba la materia"
fi

read -p "Indique cúal es su edad:" edad
if [ $edad -le 18 ]; then
    echo "La persona no puede sufragar"
else
    echo "La persona puede sufragar"
fi