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)
if [ "$a" -eq "$b" ]
if [ "$a" -ne "$b" ]
if [ "$a" -gt "$b" ]
if [ "$a" -ge "$b" ]
if [ "$a" -lt "$b" ]
if [ "$a" -le "$b" ]
(("$a" < "$b"))
(("$a" <= "$b"))
(("$a" > "$b"))
(("$a" >= "$b"))
Comparación de cadenas
if [ "$a" = "$b" ]
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).
if [ "$a" != "$b" ]NOTA: este operador usa coincidencia de patrón dentro de doble corchete.
if [[ "$a" < "$b" ]] if [ "$a" \< "$b" ]Nota: el operador "<" necesita ser escapado dentro de corchetes.
if [[ "$a" > "$b" ]] if [ "$a" \> "$b" ]Nota: el operador ">" necesita ser escapado dentro de corchetes.
cadena='' # Variable de longitud cero (null) if [ -z "$String" ] then echo "\$cadena está vacía." else echo "\$cadena no está vacía." fi
Comparaciones lógicas
exp1 -a exp2devuelve verdadero si ambas exp1 y exp2 son verdaderas.
exp1 -o exp2devuelve 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 ]]