Bash Script – Check if file has read permissions

To check if a file is readable in bash, in other words if the file has read permissions, use  [ -r FILE ]   expression.

Syntax

The syntax of the expression to check if the file is readable or not is given below.

</>
Copy
[ -r path/to/file ]

replace path/to/file with the actual path to file, whose read permissions you need to check.

The expression returns a value of true if the file is present and has read permission, or a false if the file does not have read permissions.

Examples

For the sake of examples, we will use two files shown below.

$ ls -lr
total 125016
--w-------  1 root         root                12 Oct  5 09:35 sample.txt
-rwxr--r--  1 root         root                20 Oct  5 15:33 dummy.txt

If you observe the permissions for these files,

  • sample.txt has no read permissions.
  • dummy.txt has read permissions for all users.

1. Check if file is readable for dummy.txt

In the following example, we shall use -r expression, and check if the file dummy.txt is readable. We use the -r option as a condition in bash if else statement.

example.sh

</>
Copy
#!/bin/bash

file="dummy.txt"

if [ -r "$file" ]
then
	echo "$file is readable."
else
	echo "$file is not readable."
fi

Bash Version: GNU bash, version 5.2.15(1)-release (aarch64-apple-darwin22.1.0)

Run this script file in a Terminal, and you shall see the following output, provided you have the file dummy.txt mentioned in your system.

Output

sh-3.2# bash example.sh 
dummy.txt is readable.

2. Check if file is readable for sample.txt

In the following example, we shall use -r expression, and check if the file sample.txt is readable.

example.sh

</>
Copy
#!/bin/bash

file="sample.txt"

if [ -r "$file" ]
then
	echo "$file is readable."
else
	echo "$file is not readable."
fi

Bash Version: GNU bash, version 5.2.15(1)-release (aarch64-apple-darwin22.1.0)

Output

sh-3.2# bash example.sh 
sample.txt is not readable.

Conclusion

In this Bash Tutorial, we learned how to check if specified file is readable or not.