A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

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 22

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

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.

He visto en varios de ejemplos que la linea #!/bin/bash no est谩 bien escrita, no debe haber ning煤n espacio en blanco, porque no funciona.

Estos ejemplos funcionan porque cuando el sistema operativo no logra reconocer la primera linea, interpreta el archivo con el shell en uso que (de pura casualidad) es BASH.

**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 鈥淪TRING1鈥 sorts before 鈥淪TRING2鈥 lexicographically in the current locale.
[ STRING1 > STRING2 ] --> True if 鈥淪TRING1鈥 sorts after 鈥淪TRING2鈥 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 鈥淥PTIONNAME鈥 is enabled.
[ -z STRING ] --> True of the length if 鈥淪TRING鈥 is zero.
[ -n STRING ] or [ STRING ] --> True if the length of 鈥淪TRING鈥 is non-zero.
[ ARG1 OP ARG2 ] --> 鈥淥P鈥 is one of -eq, -ne, -lt, -le, -gt or -ge. These arithmetic binary operators return true if 鈥淎RG1鈥 is equal to, not equal to, less than, less than or equal to, greater than, or greater than or equal to 鈥淎RG2鈥, respectively. 鈥淎RG1鈥 and 鈥淎RG2鈥 are integers.

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```

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" ]]

Estimados, una consulta鈥 por qu猫 en el primer if se us貌 par猫ntesis y en el segundo corchetes?

Muchas gracias,

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

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

en el bash de mi ubuntu, -n me saca un error: 7: read: Illegal option -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 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

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