Test constructs
An if/then construct tests whether the exit status is 0, if so then execute more command!
dedicated command: [ ] This command considers its arguments as comparisonexpressions or file tests and returns an exit status correspondingto the result of the comparison;
extended test command; [[ ]] which performs comparisons in a manner more familiar to programmers;
The (( ... )) and let ... constructs: return exit status which according to whether the arithmetic expressions they evaluate expand to a non-zero value.
The key of this is the[exit status] like execute a command!
File Test Operator
-e -a
check file exist; but -a has been deprecated;
-f
check file is a regular file;
-s
File is not zero size;
-d
File is a directory
-b
File is a block device
-c
File is a character device
-p
File is a pipe
-h
File is a symbol link
-S
File is socket file
-
-t
File (descriptor) is associated with a terminal device
-r
-
File has read permission (for the user running the test)
-w
- File has write permission(for the user running the test) -x
- File has execute permission(for the user running the test) -g
- set the group-id flag on the file or directory -u
- set the user-id flag on the file or directory -O
- Are you the owner of the file -G
- Groups id is same with yours -N
- File modified since it last read? file1 -nt file2
- File1 is newer than the file2 file -ot file2
- File1 is old than the file2 file1 -ef file2
- file1 and file2 are the hard links to the same file ? !
-
reverse the above test result
integer comparison
-
-eq
-
is equal to
if [ "$a" -eq "$b" ]
-ne
-
is not equal to
if [ "$a" -ne "$b" ]
-gt
-
is greater than
if [ "$a" -gt "$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"))
-
=
-
is equal to
if [ "$a" = "$b" ]
Note the whitespace framing the =.
if [ "$a"="$b" ] is not equivalent to the above.
==
-
is equal to
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). # 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.
compound comparison