Integer comparison
-Eq equals to, for example, if ["$ a"-eq "$ B"]
-Ne is not equal to, for example, if ["$ a"-ne "$ B"]
-Gt is greater than, for example, if ["$ a"-gt "$ B"]
-Ge is greater than or equal to, for example, if ["$ a"-ge "$ B"]
-Lt is less than, for example, if ["$ a"-lt "$ B"]
-Le is less than or equal to, for example, if ["$ a"-le "$ B"]
<Less than (double parentheses are required), such as: ("$ a" <"$ B "))
<= Less than or equal to (double parentheses are required), for example: ("$ a" <= "$ B "))
> Greater than (double parentheses are required), such as: ("$ a"> "$ B "))
> = Equal to or greater than (double parentheses required), for example: ("$ a"> = "$ B "))
String comparison
= Equals, for example, if ["$ a" = "$ B"]
= Equal to, such as: if ["$ a" = "$ B"], equivalent to =
Note: The actions in [[] and [] are different in some cases:
[[$ A = z *] # true if $ a starts with "z" (pattern matching)
[[$ A = "z *"] # If $ a is equal to z * (character matching), the result is true.
[$ A = z *] # File globbing and word splitting will occur
["$ A" = "z *"] # If $ a is equal to z * (character matching), the result is true.
File globbing is a stenographer for files. For example, "*. c" is, and then ~ Yes.
But file globbing is not a strict regular expression, although the structure is similar in most cases.
(I don't quite understand. If there is an a.txt file under the/tmpdirectory, then ["a.txt" =. *] will return the true logic, but if/tmphas a.txt and. out two files, so Shell writing will report an error)
! = Not equal to, such as: if ["$ "! = "$ B"]
Note :! = Use pattern matching in the [[] structure.
<Less than, in the ASCII alphabetic order. For example:
If [["$ a" <"$ B"]
If ["$ a" \ <"$ B"]
Note: "<" must be escaped in the [] structure.
> Greater than, in the ASCII alphabetic order. For example:
If [["$ a"> "$ B"]
If ["$ a" \> "$ B"]
Note: ">" needs to be escaped in the [] structure.
-The z string is null. The length is 0.
-N string is not empty
Note: Double quotation marks ("") are good for comparing strings or numbers and can avoid unnecessary troubles (see, however, the mode and regular expression cannot contain double quotation marks.
Hybrid comparison
-A logic and
Exp1-a exp2 if both exp1 and exp2 are true, this expression returns true
-O logic or
Exp1-o exp2 if either exp1 or exp2 is true, the expression returns true.
However, in [[], use & | instead of-a and-o,-o and-a are generally used together with the test command or []
Let's look at some examples:
01
#! /Bin/bash
02
# Comparison of numbers and strings
03
04
# The variables a and B can be both integer and string.
05
# Bash variables are not strongly typed.
06
A = 4
07
B = 5
08
# Compare a and B as integers
09
If ["$ a"-ne "$ B"]
10
Then
11
Echo "$ a is not equal to $ B"
12
Echo "(arithmetic comparison )"
13
Fi
14
Echo
15
# Comparison of a and B as strings
16
If ["$ "! = "$ B"]
17
Then
18
Echo "$ a is not equal to $ B ."
19
Echo "(string comparison )"
20
Fi
21
22
# In this particular example, "-ne" and "! = "Yes.
23
24
Exit 0
01
#! /Bin/bash
02
# Test whether the string is null
03
# $ String1 is not declared and initialized
04
If [-n $ string1]
05
Then
06
Echo "String \" string1 \ "is not null ."
07
Else
08
Echo "String \" string1 \ "is null ."
09
Fi
10
# Incorrect results.
11
# Show $ string1 is not empty, although it is not initialized.
12
13
Echo
14
15
# Add double quotation marks to $ string1 and try again.
16
If [-n "$ string1"]
17
Then
18
Echo "String \" string1 \ "is not null ."
19
Else
20
Echo "String \" string1 \ "is null ."
21
Fi
22
# Output our expected results this time
23
24
Echo
25
26
If [$ string1] # This time, $ string1 becomes "naked", which is equivalent to [-n $ string1].
27
Then
28
Echo "String \" string1 \ "is not null ."
29
Else
30
Echo "String \" string1 \ "is null ."
31
Fi
32
33
String1 = initialized
34
If [$ string1] # Come back
35
Then
36
Echo "String \" string1 \ "is not null ."
37
Else
38
Echo "String \" string1 \ "is null ."
39
Fi
40
# Output the expected results this time
41
42
# But it is best to add double quotation marks "" to the string, because this can avoid unnecessary troubles and is also a good habit.