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 aif [ "$a" -eq "$b" ]
- -ne
no es igual a / distintoif [ "$a" -ne "$b" ]
- -gt
es mayor queif [ "$a" -gt "$b" ]
- -ge
es mayor que o igual aif [ "$a" -ge "$b" ]
- -lt
es menor queif [ "$a" -lt "$b" ]
- -le
es menor que o igual aif [ "$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 aif [ "$a" = "$b" ]
- ==
es igual aif [ "$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.
La cadena está vacía (nulll), tiene longitud cero.
cadena='' # Variable de longitud cero (null) if [ -z "$String" ] then echo "\$String está vacía." else echo "\$String no está vacía." fi
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 ]]
