File test operators in Linux shell script

In this article, we will see File test operators in Linux shell script with examples.

In linux and unix operating systems every thing is a file. When you are using files in your shell or bash script, it is a good idea to do some tests on the file before using it.

The file tests include:

Checking for existence of the file.
File is readable, writeable or executable.
File is empty or non-empty
Type of the file and so on.

Operator Description Example
-b file Checks if file is a block special file; if yes, then the condition becomes true. [ -b $file ] is false.
-c file Checks if file is a character special file; if yes, then the condition becomes true. [ -c $file ] is false.
-d file Checks if file is a directory; if yes, then the condition becomes true. [ -d $file ] is not true.
-f file Checks if file is an ordinary file as opposed to a directory or special file; if yes, then the condition becomes true. [ -f $file ] is true.
-g file Checks if file has its set group ID (SGID) bit set; if yes, then the condition becomes true. [ -g $file ] is false.
-k file Checks if file has its sticky bit set; if yes, then the condition becomes true. [ -k $file ] is false.
-p file Checks if file is a named pipe; if yes, then the condition becomes true. [ -p $file ] is false.
-t file Checks if file descriptor is open and associated with a terminal; if yes, then the condition becomes true. [ -t $file ] is false.
-u file Checks if file has its Set User ID (SUID) bit set; if yes, then the condition becomes true. [ -u $file ] is false.
-r file Checks if file is readable; if yes, then the condition becomes true. [ -r $file ] is true.
-w file Checks if file is writable; if yes, then the condition becomes true. [ -w $file ] is true.
-x file Checks if file is executable; if yes, then the condition becomes true. [ -x $file ] is true.
-s file Checks if file has size greater than 0; if yes, then condition becomes true. [ -s $file ] is true.
-e file Checks if file exists; is true even if file is a directory but exists. [ -e $file ] is true.

Examples

#!/bin/sh file="/var/www/r2schools/unix/test.sh" if [ -r $filename ] then echo "File has read access" else echo "File does not have read access" fi if [ -w $filename ] then echo "File has write permission" else echo "File does not have write permission" fi if [ -x $filename ] then echo "File has execute permission" else echo "File does not have execute permission" fi if [ -f $filename ] then echo "File is an ordinary file" else echo "This is sepcial file" fi if [ -d $filename ] then echo "File is a directory" else echo "This is not a directory" fi if [ -s $filename ] then echo "File size is not zero" else echo "File size is zero" fi if [ -e $filename ] then echo "File exists" else echo "File does not exist" fi

Once we save and execute the above scirpt, the script will produce the following result −

File does not have write permission
File does not have execute permission
This is sepcial file
This is not a directory
File size is not zero
File does not exist