use a different set of operators.
1. integer comparison
-eq is equal to
if [ "$a" -eq "$b" ]
if [ "$a" -ne "$b" ]
if [ "$a" -gt "$b" ]
-ge is greater than or equal to
if [ "$a" -ge "$b" ]
if [ "$a" -lt "$b" ]
if [ "$a" -le "$b" ]
(("$a" < "$b"))
<= is less than or equal to (within double parentheses)
(("$a" <= "$b"))
> is greater than (within double parentheses)
(("$a" > "$b"))
>= is greater than or equal to (within double parentheses)
(("$a" >= "$b"))
2. string comparison
= is equal toif [ "$a" = "$b" ]
Note the whitespace framing the =.
if [ "$a"="$b" ] is not equivalent to the above.
if [ "$a" == "$b" ]
This is a synonym for =.
The == comparison operator behaves differently within a double-brackets test than
within single brackets.
[[ $a == z* ]]
# True if $a starts with an "z" (pattern matching).
[[ $a == "z*" ]] # True if $a is equal to z* (literal matching).
[ $a == z* ]
# File globbing and word splitting take place.
[ "$a" == "z*" ] # True if $a is equal to z* (literal matching).
!= is not equal to
if [ "$a" != "$b" ]This operator uses pattern matching within a [[ ... ]] construct.
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ]
Note that the "<" needs to be escaped within a [ ] construct.
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ]
Note that the ">" needs to be escaped within a [ ] construct.
-z string is null, that is, has zero length
String=''
# Zero-length ("null") string variable.
if [ -z "$String" ]
then
echo "\$String is null."
else
echo "\$String is NOT null."
fi
# $String is null.
-n string is not null.
The -n test requires that the string be quoted within the test brackets. Using anunquoted string with ! -z, or even just the unquoted string alone within test brackets
normally works, however, this is an unsafe practice. Always quote a
tested string. [37]