# test ``` test EXPRESSION [ [ EXPRESSION ] [ ] [ OPTION ] ``` Check file types and compare values. ## After Help Exit with the status determined by `EXPRESSION`. An omitted `EXPRESSION` defaults to false. Otherwise, `EXPRESSION` is true or false and sets exit status. It is one of: * ( EXPRESSION ) `EXPRESSION` is true * ! EXPRESSION `EXPRESSION` is false * EXPRESSION1 -a EXPRESSION2 both `EXPRESSION1` and `EXPRESSION2` are true * EXPRESSION1 -o EXPRESSION2 either `EXPRESSION1` or `EXPRESSION2` is true String operations: * -n STRING the length of `STRING` is nonzero * STRING equivalent to -n `STRING` * -z STRING the length of `STRING` is zero * STRING1 = STRING2 the strings are equal * STRING1 != STRING2 the strings are not equal Integer comparisons: * 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` File operations: * 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` * -b FILE `FILE` exists and is block special * -c FILE `FILE` exists and is character special * -d FILE `FILE` exists and is a directory * -e FILE `FILE` exists * -f FILE `FILE` exists and is a regular file * -g FILE `FILE` exists and is set-group-ID * -G FILE `FILE` exists and is owned by the effective group ID * -h FILE `FILE` exists and is a symbolic link (same as -L) * -k FILE `FILE` exists and has its sticky bit set * -L FILE `FILE` exists and is a symbolic link (same as -h) * -N FILE `FILE` exists and has been modified since it was last read * -O FILE `FILE` exists and is owned by the effective user ID * -p FILE `FILE` exists and is a named pipe * -r FILE `FILE` exists and read permission is granted * -s FILE `FILE` exists and has a size greater than zero * -S FILE `FILE` exists and is a socket * -t FD `file` descriptor `FD` is opened on a terminal * -u FILE `FILE` exists and its set-user-ID bit is set * -w FILE `FILE` exists and write permission is granted * -x FILE `FILE` exists and execute (or search) permission is granted Except for `-h` and `-L`, all FILE-related tests dereference (follow) symbolic links. Beware that parentheses need to be escaped (e.g., by backslashes) for shells. `INTEGER` may also be -l `STRING`, which evaluates to the length of `STRING`. NOTE: Binary `-a` and `-o` are inherently ambiguous. Use `test EXPR1 && test EXPR2` or `test EXPR1 || test EXPR2` instead. NOTE: `[` honors the `--help` and `--version` options, but test does not. test treats each of those as it treats any other nonempty `STRING`. NOTE: your shell may have its own version of `test` and/or `[`, which usually supersedes the version described here. Please refer to your shell's documentation for details about the options it supports.