Operadores de comparación

Bash tiene un gran soporte de comparadores de todo tipo que nos permiten hacer comparaciones en los bucles y crear condiciones de todo tipo:

Comparación de enteros (números)

  • -eq
    es igual a
    if [ "$a" -eq "$b" ]
  • -ne
    no es igual a / es distinto a
    if [ "$a" -ne "$b" ]
  • -gt
    es mayor que
    if [ "$a" -gt "$b" ]
  • -ge
    es mayor que o igual a
    if [ "$a" -ge "$b" ]
  • -lt
    es menor que
    if [ "$a" -lt "$b" ]
  • -le
    es menor que o igual a
    if [ "$a" -le "$b" ]
  • <
    es menor que (dentro de doble paréntesis)
    (("$a" < "$b"))
  • <=
    es menor que o igual a (dentro de doble paréntesis)
    (("$a" <= "$b"))
  • >
    es mayor que (dentro de doble paréntesis)
    (("$a" > "$b"))
  • >=
    es mayor que o igual a (dentro de doble paréntesis)
    (("$a" >= "$b"))

Comparación de cadenas

  • =
    es igual a
    if [ "$a" = "$b" ]
  • ==
    es igual a
    if [ "$a" == "$b" ]

    Nota: Aunque es un sinónimo de = el operador ==se comporta diferente cuando se usa dentro de corchetes dobles que simples, por ejemplo:

    [[ $a == z* ]]   # Verdadero si $a empieza con una "z" (expresión regular coincide).
    [[ $a == "z*" ]] # Verdadero si $a es igual a z* (coincide literalmente).
    
    [ $a == z* ]     # Ocurre división de palabras.
    [ "$a" == "z*" ] # Verdadero si $a es igual a z* (coincide literalmente).
  • !=
    no es igual a / Distinto
    if [ "$a" != "$b" ]
    NOTA: este operador usa coincidencia de patrón dentro de doble corchete.
  • <
    es menor que (en orden alfabético ASCII)
    if [[ "$a" < "$b" ]]
    if [ "$a" \< "$b" ]
    Nota: el operador "<" necesita ser escapado dentro de corchetes.
  • >
    es mayor que (en orden alfabético ASCII)
    if [[ "$a" > "$b" ]]
    if [ "$a" \> "$b" ]
    Nota: el operador ">" necesita ser escapado dentro de corchetes.
  • -z
    La cadena está vacía (nulll), tiene longitud cero.
    cadena=''   # Variable de longitud cero (null)
    if [ -z "$String" ]
    then
    echo "\$cadena está vacía."
    else
    echo "\$cadena no está vacía."
    fi
  • -n
    cadena no está vacía (contiene algo) nota: El operador -n exige que la cadena esté entre comillas entre paréntesis. Aunque el uso son comillas puede funcionar es altamente recomendable usar comillas.

Comparaciones lógicas

  • -a
    Y lógico (and)
    exp1 -a exp2
    devuelve verdadero si ambas exp1 y exp2 son verdaderas.
  • -o
    O lógico (or)
    exp1 -o exp2
    devuelve verdadero si alguna de las expresiones exp1 y exp2 son verdaderas.

Éstos últimos operadores son similares a los operadores de Bash && (and) y || (or) cuando se usan con doble corchete:

[[ condition1 && condition2 ]]

Retro

Lugares

Redes

Sistemas

Varios