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