When writing scripts or working on the command line in Linux, you’ll often need to check if a file or directory exists before taking some action. Bash provides several simple ways to test for the existence of files in your system.

This beginner’s guide will cover the basic commands, syntax, and examples for checking if a file or directory exists in Bash. We’ll start from the basics and build up to more advanced usage in scripts.

Checking File Existence Basics

The most straightforward way to check if a file exists in Bash is with the test command. test allows you to evaluate expressions and returns TRUE or FALSE based on the result.

Here is the basic syntax for using test to check for a file:

test -e /path/to/file

The -e flag checks if the file exists, regardless of whether it is a regular file, directory, socket, etc.

Some other common flags used with test are:

  • -f – Check for a regular file
  • -d – Check for a directory
  • -s – Check if file size is greater than 0

For example:

test -f /home/user/file.txt

This would return TRUE if file.txt exists and is a regular file.

Using Square Brackets

Another way to check file existence is with square brackets []. This is a synonym for test in Bash.

The syntax is:

[ -e /path/to/file ]

Square brackets allow you to evaluate the conditional expression inside and return TRUE/FALSE.

For example:

[ -d /home/user/Documents ]

This would check if the /home/user/Documents directory exists.

Double Square Brackets

An advanced version of the square bracket syntax is double square brackets [[ ]].

Double brackets allow for additional features like pattern matching and regular expressions. The syntax is otherwise the same:

[[ -f /path/to/file ]]

For most file existence checks, standard brackets work fine, but double brackets can be useful in certain cases.

Checking File Existence in Conditions

The real power of test and square brackets is using them in control statements like if conditions and while loops.

For example:

# Check if file exists before removing if [ -f "/tmp/log.txt" ]; then rm /tmp/log.txt fi

This tests if /tmp/log.txt exists before trying to remove it.

You can also use the Boolean operators && and || to evaluate conditions:

# Only create file if it does not already exist [ ! -f "/tmp/log.txt" ] && touch /tmp/log.txt

Here ! is used to negate the condition and check non-existence.

File Check Examples in Scripts

Let’s look at a simple Bash script example that checks if a file exists before taking action:

#!/bin/bash FILE="/path/to/file" if [ -f "$FILE" ]; then echo "$FILE exists." else echo "$FILE does not exist." fi

We can expand on this to check multiple files in a loop:

#!/bin/bash FILES="/path/file1 /path/file2 /path/file3" for f in $FILES; do if [ -f "$f" ]; then echo "$f exists." else echo "$f does not exist." fi done

This shows how to iterate through a list of files and test each one.

Advanced Usage Tips

Here are some tips for more advanced usage of file existence checks in Bash:

  • Use quotes around file/directory paths in case they have spaces
  • Prefer [ ] over [[ ]] for compatibility with different shell types
  • Understand the difference between -e-f-d and other test flags
  • Be careful of false positives/negatives when doing existence checks
  • Use -ef to check if two files are actually the same file

Test out the different options so you can decide what works best for your specific needs.

Some Useful Resources

Here are some recommended online resources that can be included:

  1. GNU Bash Manual:
    • A comprehensive guide to Bash, the default shell in most Linux distributions.
    • URL: GNU Bash Manual
  2. Advanced Bash-Scripting Guide:
  3. ShellCheck:
    • An online tool for checking Bash scripts for common errors and suggesting improvements.
    • URL: ShellCheck
  4. Linux Command Library:
    • A resource offering detailed examples and explanations for a wide range of Linux commands, including those used for file checking in Bash.
    • URL: Linux Command Library
  5. Stack Overflow:
    • A valuable resource for practical advice and troubleshooting, with a vast community of experts.
    • URL: Stack Overflow
  6. Cyberciti.biz (nixCraft):
    • Offers practical Linux, UNIX, and Bash shell scripting examples and tutorials.
    • URL: nixCraft
  7. Explain Shell:
    • A tool that breaks down shell commands into their components, explaining each part in detail.
    • URL: Explain Shell
  8. The Linux Documentation Project:
  9. Bash Hackers Wiki:
    • Provides a deep dive into various aspects of Bash scripting, suitable for intermediate to advanced users.
    • URL: Bash Hackers Wiki
  10. Codecademy’s Bash Scripting Course:

Conclusion

Checking whether files or directories exist is a frequent task in Bash scripting. The test command along with square brackets provide simple but powerful built-in ways to test for existence before taking action in your scripts.

Mastering these basic file checks will make your Bash scripting more robust and efficient. The conditional expressions give you flexibility in the logic and control flow of your scripts.

For more advanced shell scripting techniques, refer to the Bash documentation or online tutorials.

Categorized in: