Bash Scripting

How to Check if a File Exists in Bash – Simply Explained

Why Do We Check Files in Bash?

When writing a Bash script, you often work with files or folders. Before trying to read, copy, or edit them, you should first check if file exists in Bash. Doing this ensures the file or directory is really there and prevents your script from breaking or showing errors.

Ways to Check in Bash

There are several ways to check if file exists in Bash. The most common options are:

  • test EXPRESSION
  • [ EXPRESSION ]
  • [[ EXPRESSION ]]

All of these can be used for file checks, but [[ ]] has more features and works only in Bash, while [ ] and test are more universal and portable.

File Test Flags

Flag    What It Checks
-e      Any kind of file or directory
-f      A regular file (not a folder or special file)
-d      A directory
-r      File is readable
-w      File is writable
-x      File is executable
-L      A symbolic link (shortcut to another file)
-s      A file that is not empty

Examples Explained

Check if any file or folder exists

if [ -e "$FILE" ]; then
  echo "It exists"
fi

This checks if something is there, whether it is a file or a folder.

Check if it is a regular file

if [ -f "$FILE" ]; then
  echo "It is a file"
fi

This makes sure the path is a normal file and not a folder.

Check if it is a directory

if [ -d "$DIR" ]; then
  echo "It is a directory"
fi

This checks only for folders.

Check file permissions

if [ -r "$FILE" ]; then
  echo "You can read this file"
fi

if [ -w "$FILE" ]; then
  echo "You can write to this file"
fi

if [ -x "$FILE" ]; then
  echo "You can run this file"
fi

These tests confirm whether the file can be read, edited, or run as a program.

Check if a file does not exist

if [ ! -f "$FILE" ]; then
  echo "The file is missing"
fi

The exclamation mark means “not”. This checks if the file is absent.

Check more than one file

if [ -f "$FILE1" ] && [ -f "$FILE2" ]; then
  echo "Both files exist"
fi

This makes sure that two files are present before running further commands.

Conclusion

In Bash, checking if a file or directory exists is simple once you know the flags. Use -e for anything, -f for regular files, and -d for folders. Add checks for read, write, or execute permissions when needed. Always put the file name inside quotes to avoid problems with spaces. If you want to test for something missing, use !. With these methods, your Bash scripts will be much safer and easier to manage.

0xSnow

0xSnow is a cybersecurity researcher with a focus on both offensive and defensive security. Working with ethical hacking, threat detection, Linux tools, and adversary simulation, 0xSnow explores vulnerabilities, attack chains, and mitigation strategies. Passionate about OSINT, malware analysis, and red/blue team tactics, 0xSnow shares detailed research, technical walkthroughs, and security tool insights to support the infosec community.

Recent Posts

Install VirtualBox on Ubuntu 18.04 from the Oracle Repository

VirtualBox is a free, open-source, cross-platform virtualization application maintained by Oracle. It lets you run multiple…

12 hours ago

Install PostgreSQL on Ubuntu 18.04 with Remote Access Setup

PostgreSQL (also called Postgres) is a free, open-source, object-relational database management system with a strong reputation…

12 hours ago

Install VMware on Ubuntu 18.04: Workstation Player Setup Guide

VMware Workstation Player is a mature, stable virtualization platform that lets you run multiple isolated operating…

12 hours ago

Set Up a UFW Firewall on Ubuntu 18.04: Allow, Deny, and Manage

A properly configured firewall is one of the most important layers of security for any internet-facing server. UFW (Uncomplicated Firewall) is a user-friendly front-end for managing iptables rules that ships pre-installed on Ubuntu. Its defaults are sensible: block all incoming connections, allow all outgoing connections. No outside traffic reaches your server unless you explicitly open a port. This guide covers how to configure a UFW firewall on Ubuntu 18.04, from setting default policies and application profiles to writing allow and deny rules for specific ports, IPs, and subnets. <strong>Prerequisite:</strong>&nbsp;You&nbsp;need&nbsp;sudo&nbsp;access. Configure UFW Firewall on Ubuntu: Defaults, SSH, and Application Profiles If UFW is not installed, add it with: bashsudo…

12 hours ago

Disable UFW Firewall on Ubuntu 18.04: Stop, Reset, and Re-enable

UFW (Uncomplicated Firewall) is a user-friendly front-end for managing iptables rules on Ubuntu. It ships pre-installed…

12 hours ago

Install Apache Cassandra on Ubuntu 18.04: NoSQL Setup Guide

Apache Cassandra is a free, open-source NoSQL database designed for high availability and linear scalability with…

2 days ago