Bash Comparison Operators

Binary comparison operators compare two variables or quantities.

To compare strings, some comparison operators are used for numbers, others.

<

Comparing numbers

-eq

is equal to - equals

if [ "$a" -eq "$b" ]

-ne

is not equal to - not equal to

if [ "$a" -ne "$b" ]

-gt

is greater than

if [ "$a" -gt "$b" ]

-eq

is equal to

if [ "$a" -eq "$b" ]

-ge

is greater than or equal to

if [ "$a" -ge "$b" ]

-lt

is less than

if [ "$a" -lt "$b" ]

-le

is less than or equal to

if [ "$a" -le "$b" ]

<

is less than (within double parentheses)

(("$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"))

String comparison

=

is equal to

if [ "$a" = "$b" ]

Caution Note the whitespace framing the =. if [ "$a"="$b" ] is not equivalent to the above.

==

is not equal to

if [ "$a" == "$b" ]

This is a synonym for =. Note 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). # Thanks, Stéphane Chazelas

!=

is not equal to

if [ "$a" != "$b" ]

This operator uses pattern matching within a [[ ... ]] construct.

<

is less than, in ASCII alphabetical order

if [[ "$a" < "$b" ]] if [ "$a" \< "$b" ]

Note that the "<" needs to be escaped within a [ ] construct.

>

is greater than, in ASCII alphabetical order

if [[ "$a" > "$b" ]] if [ "$a" \> "$b" ]

Note that the ">" needs to be escaped within a [ ] construct. See Example 27-11 for an application of this comparison operator.

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

Caution The -n test requires that the string be quoted within the test brackets. Using an unquoted string with ! -z, or even just the unquoted string alone within test brackets (see Example 7-6) normally works, however, this is an unsafe practice. Always quote a tested string.

↓ Bash articles ↓
Bash
Bash Scripting
if else: Conditional operators
while loop
date
Newline
Arithmetic operations
Pass a file or password over SFTP in a Bash script
Errors Bash

Article author: Andrei Olegovich

Related articles

Search this site

Channel @aofeed Chat @aofeedchat

Contacts and cooperation:
I recommend our hosting beget.com
Write to info@aredel.com if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: