Unix bash string comparison and numeric comparison - unix1998/technical_notes GitHub Wiki
In bash scripting, gt and lt are used for numeric comparisons, while > and < are used for string comparisons or file redirection. They are not the same and are used in different contexts:
Numeric Comparisons
-gt: Greater than-lt: Less than
These are used within double square brackets [ ... ](/unix1998/technical_notes/wiki/-...-) or single square brackets [ ... ] for comparing integers.
Example:
#!/bin/bash
a=5
b=10
if [ $a -gt $b ]; then
echo "$a is greater than $b"
else
echo "$a is not greater than $b"
fi
if [ $a -lt $b ]; then
echo "$a is less than $b"
else
echo "$a is not less than $b"
fi
String Comparisons and Redirection
>: Greater than (for string comparison) or output redirection<: Less than (for string comparison) or input redirection
When used for string comparison within double square brackets [ ... ](/unix1998/technical_notes/wiki/-...-):
Example:
#!/bin/bash
a="apple"
b="banana"
if [ $a > $b ](/unix1998/technical_notes/wiki/-$a->-$b-); then
echo "$a is greater than $b"
else
echo "$a is not greater than $b"
fi
if [ $a < $b ](/unix1998/technical_notes/wiki/-$a-<-$b-); then
echo "$a is less than $b"
else
echo "$a is not less than $b"
fi
When used for file redirection:
Example:
#!/bin/bash
echo "This will be written to a file" > output.txt
cat < input.txt
Summary
- Use
-gtand-ltfor numeric comparisons. - Use
>and<for string comparisons or file redirection.
They are not interchangeable and should be used appropriately based on the context.
###########################################################################
In bash, the symbols <> are not used for inequality comparisons. Instead, you can use != for both numeric and string comparisons. Here's how you can perform inequality checks for both numeric and string values:
Numeric Comparisons
For numeric inequality, you can use -ne (not equal to).
Example:
#!/bin/bash
a=5
b=10
if [ $a -ne $b ]; then
echo "$a is not equal to $b"
else
echo "$a is equal to $b"
fi
String Comparisons
For string inequality, you can use !=.
Example:
#!/bin/bash
a="apple"
b="banana"
if [ "$a" != "$b" ]; then
echo "$a is not equal to $b"
else
echo "$a is equal to $b"
fi
Using [ ... ](/unix1998/technical_notes/wiki/-...-) for More Complex Conditions
You can also use [ ... ](/unix1998/technical_notes/wiki/-...-) for more complex string comparisons or conditions involving logical operators.
Example:
#!/bin/bash
a="apple"
b="banana"
if [ "$a" != "$b" ](/unix1998/technical_notes/wiki/-"$a"-!=-"$b"-); then
echo "$a is not equal to $b"
else
echo "$a is equal to $b"
fi
# Example with logical NOT
if [ ! "$a" == "$b" ](/unix1998/technical_notes/wiki/-!-"$a"-==-"$b"-); then
echo "$a is not equal to $b (using logical NOT)"
else
echo "$a is equal to $b (using logical NOT)"
fi
Summary
- For numeric inequality, use
-ne. - For string inequality, use
!=. <>is not used for inequality in bash.- You can use logical NOT (
!) in combination with[ ... ](/unix1998/technical_notes/wiki/-...-)for complex conditions.
This approach ensures correct operation in bash scripts for both numeric and string comparisons.