With the help of BASH shell and IF command it is possible to find out if file exists or not. Generally, this is known as conditional expressions. Conditional expressions are used by the [[ compound command and the test and [ builtin commands to test file attributes and perform string and arithmetic comparisons. General syntax:
[ parameter FILE ]
OR
test parameter FILE
Where parameter can be any one of the following:
- -e: Returns true value if file exists
- -f: Return true value if file exists and regular file
- -r: Return true value if file exists and is readable
- -w: Return true value if file exists and is writable
- -x: Return true value if file exists and is executable
- -d: Return true value if exists and is a directory
Examples
Find out if file /etc/passwd file exists or not
Type the following commands:
$ [ -f /etc/passwd ] && echo "File exists" || echo "File does not exists"
$ [ -f /tmp/fileonetwo ] && echo "File exists" || echo "File does not exists"
Find out if directory /var/logs exists or not
Type the following commands:
$ [ -d /var/logs ] && echo "Directory exists" || echo "Directory does not exists"
$ [ -d /dumper/fack ] && echo "Directory exists" || echo "Directory does not exists"
You can use conditional expressions in a shell script:
#!/bin/bash FILE=$1 if [ -f $FILE ]; then echo "File $FILE exists" else echo "File $FILE does not exists" fi
Save and execute the script:
$ chmod +x script.sh
$ ./script.sh /path/to/file
$ ./script.sh /etc/resolv.conf
You can use this technique to verify that backup directory and backup source directory exits See example script for more information.
- Email this to a friend
- Printable version
- Rss Feed
- Last Updated: Nov/16/2008

{ 6 comments… read them below or add one }
For me the if statement only works when using the FILE var with quotes like this:
if [ -f "$FILE" ];
script was very userful
I need to check a file on daily basis that is created by anotehr process. The file format is:
DataFile_MMDDYYYY.csv
So, I need to get today’s date in MMDDYYYY format, concate that with a string variable, FileName = “DataFile_” + DatePart + “.csv”
Then look for that FileName file if exists then run a command (sas sendemail.sas).
How can I achieve that? Thanks.
DatePart=`date ‘+%m%d%Y`
FileName =DataFile_${DatePart}.csv
Hello Volks:
I would like to look for a File: if it exists – AND – itĀ“smaller (lt/gt) than 1000000, then … echo ” File too small” , return 1 … and so on:
#!/bin/bash
FILE=nec2.txt
if -f [ "$FILE" ] && -f [ "$FILE" -lt 1000000 ] ;
then
echo “File $FILE too small”
else
echo “File $FILE does not exists”
fi
-rw-rw—- 1 cas lokus 31626 2008-12-15 14:00 xnec2.txt
I use linux 2.4.21-278-smp
Can you please help there ? Pleas reply to donpetrus@hotmail.com
Many thanks in advance – Petrus
Bash knows the NOT procedure for IF. So No ELSE would be used. watch the !