This tutorial explains Linux “test” command, options and its usage with examples.
Test is used in conditional execution. It is used for:
1. File attributes comparisons
2. Perform string comparisons.
3. Basic arithmetic comparisons.
test exits with the status determined by EXPRESSION. Placing the EXPRESSION between square brackets ([ and ]) is the same as testing the EXPRESSION with test. To see the exit status at the command prompt, echo the value “$?” A value of 0 means the expression evaluated as true, and a value of 1 means the expression evaluated as false.
Expressions take the following forms:
|( EXPRESSION )
|EXPRESSION is true
|EXPRESSION is false
|EXPRESSION1 -a EXPRESSION2
|both EXPRESSION1 and EXPRESSION2 are true
|EXPRESSION1 -o EXPRESSION2
|either EXPRESSION1 or EXPRESSION2 is true
|the length of STRING is nonzero
|equivalent to -n STRING
|the length of STRING is zero
|STRING1 = STRING2
|the strings are equal
|STRING1 != STRING2
|the strings are not equal
|INTEGER1 -eq INTEGER2
|INTEGER1 is equal to INTEGER2
|INTEGER1 -ge INTEGER2
|INTEGER1 is greater than or equal to INTEGER2
|INTEGER1 -gt INTEGER2
|INTEGER1 is greater than INTEGER2
|INTEGER1 -le INTEGER2
|INTEGER1 is less than or equal to INTEGER2
|INTEGER1 -lt INTEGER2
|INTEGER1 is less than INTEGER2
|INTEGER1 -ne INTEGER2
|INTEGER1 is not equal to INTEGER2
|FILE1 -ef FILE2
|FILE1 and FILE2 have the same device and inode numbers
|FILE1 -nt FILE2
|FILE1 is newer (modification date) than FILE2
|FILE1 -ot FILE2
|FILE1 is older than FILE2
|FILE exists and is block special
|FILE exists and is character special
|FILE exists and is a directory
|FILE exists and is a regular file
|FILE exists and is set-group-ID
|FILE exists and is owned by the effective group ID
|FILE exists and is a symbolic link (same as -L)
|FILE exists and has its sticky bit set
|FILE exists and is a symbolic link (same as -h)
|FILE exists and is owned by the effective user ID
|FILE exists and is a named pipe
|FILE exists and read permission is granted
|FILE exists and has a size greater than zero
|FILE exists and is a socket
|file descriptor FD is opened on a terminal
|FILE exists and its set-user-ID bit is set
|FILE exists and write permission is granted
|FILE exists and execute (or search) permission is granted
1. Simple example stating use of relational operator -gt
$ test 100 -gt 99 && echo "Yes, that's true." || echo "No, that's false."
This command will print the text “Yes, that’s true.” because 100 is greater than 99.
2. This example states the use of test command along-with echoing $? i.e. last command exit status.
[ "awesome" = "awesome" ]; echo $?
This command will print “0” because the expression is true; the two strings are identical.
3. Check if a FILE exists and is a regular file
$ test -f /etc/resolv.conf && echo "File /etc/resolv.conf found." || echo "File /etc/resolv.conf not found." File /etc/resolv.conf found.
4. To test whether a file is nonexistent or empty, type the shell script:
if test ! -s "$1" then echo $1 does not exist or is empty. fi
If the file specified by the first positional parameter to the shell procedure, $1, does not exist or is of size 0, the test command displays the message. If $1 exists and has a size greater than 0, the test command displays nothing.
Note: There must be a space between the -s function and the file name.
The quotation marks around $1 ensure that the test works properly even if the value of $1 is a null string. If the quotation marks are omitted and $1 is the empty string, the test command displays the error message
test: argument expected.
5. To do a complex comparison, type the shell script:
if [ $# -lt 2 -o ! -e "$1" ] then exit fi
If the shell procedure is given fewer than two positional parameters or the file specified by $1 does not exist, then the shell procedure exits. The special shell variable $# represents the number of positional parameters entered on the command line that starts this shell procedure.
Sanfoundry Global Education & Learning Series – 1000 Linux Tutorials.