Table of Contents
CONDITIONAL EXPRESSIONS
A conditional expression is used with the [[
compound command to test attributes of files and to compare
strings. Each expression can be constructed from one or more of the
following unary or binary expressions:
- -a file
- true if file exists.
- -b file
- true if file exists and is a block special file.
- -c file
- true if file exists and is a character special file.
- -d file
- true if file exists and is a directory.
- -e file
- true if file exists.
- -f file
- true if file exists and is an ordinary file.
- -g file
- true if file exists and has its setgid bit set.
- -h file
- true if file exists and is a symbolic link.
- -k file
- true if file exists and has its sticky bit set.
- -n string
- true if length of string is non-zero.
- -o option
- true if option named option is on.
- -p file
- true if file exists and is a fifo special file or a pipe.
- -r file
- true if file exists and is readable by current process.
- -s file
- true if file exists and has size greater than zero.
- -t fd
-
true if file descriptor number fd is open and associated with a
terminal device. (note: fd is not optional)
- -u file
- true if file exists and has its setuid bit set.
- -w file
-
true if file exists and is writable by current process.
- -x file
-
true if file exists and is executable by current process. If
file exists and is a directory, then the current process has
permission to search in the directory.
- -z string
- true if length of string is zero.
- -L file
- true if file exists and is a symbolic link.
- -O file
-
true if file exists and is owned by the effective user id of
this process.
- -G file
-
true if file exists and its group matches the effective group
id of this process.
- -S file
- true if file exists and is a socket.
- file1 -nt file2
- true if file1 exists and is newer than file2.
- file1 -ot file2
- true if file1 exists and is older than file2.
- file1 -ef file2
-
true if file1 and file2 exist and refer to the same file.
- string = pattern
- true if string matches pattern.
- string != pattern
- true if string does not match pattern.
- string1 < string2
-
true if string1 comes before string2 based on ASCII
value of their characters.
- string1 > string2
-
true if string1 comes after string2 based on ASCII value
of their characters.
- exp1 -eq exp2
- true if exp1 is equal to exp2.
- exp1 -ne exp2
- true if exp1 is not equal to exp2.
- exp1 -lt exp2
- true if exp1 is less than exp2.
- exp1 -gt exp2
- true if exp1 is greater than exp2.
- exp1 -le exp2
- true if exp1 is less than or equal to exp2.
- exp1 -ge exp2
- true if exp1 is greater than or equal to exp2.
- ( exp )
- true if exp is true.
- ! exp
- true if exp is false.
- exp1 && exp2
- true if exp1 and exp2 are both true.
- exp1 || exp2
- true if either exp1 or exp2 is true.
In each of the above expressions, if file is of the form
/dev/fd/n, where n is an integer, then the test
applied to the open file whose descriptor number is n, even if the
underlying system does not support the /dev/fd directory.
Mark D. Borges