You need to use the test command to check file types and compare values. The same command can be used to see if a file exist of not. The syntax is as follows:
The following command will tell if a text file called /etc/hosts exists or not using bash conditional execution :
test -e filename
[ -e filename ]
test -f filename
[ -f filename ]
Sample outputs:
[ -f /etc/hosts ] && echo "Found" || echo "Not found"
FoundThe same code can be converted to use with if..else..fi which allows to make choice based on the success or failure of a test command:
#!/bin/bash
file="/etc/hosts"
if [ -f "$file" ]
then
echo "$file found."
else
echo "$file not found."
fi
File test operators
The following operators returns true if file exists:-b FILE
FILE exists and is block special
-c FILE
FILE exists and is character special
-d FILE
FILE exists and is a directory
-e FILE
FILE exists
-f FILE
FILE exists and is a regular file
-g FILE
FILE exists and is set-group-ID
-G FILE
FILE exists and is owned by the effective group ID
-h FILE
FILE exists and is a symbolic link (same as -L)
-k FILE
FILE exists and has its sticky bit set
-L FILE
FILE exists and is a symbolic link (same as -h)
-O FILE
FILE exists and is owned by the effective user ID
-p FILE
FILE exists and is a named pipe
-r FILE
FILE exists and read permission is granted
-s FILE
FILE exists and has a size greater than zero
-S FILE
FILE exists and is a socket
-t FD file descriptor FD is opened on a terminal
-u FILE
FILE exists and its set-user-ID bit is set
-w FILE
FILE exists and write permission is granted
-x FILE
FILE exists and execute (or search) permission is granted
The syntax is same (see File operators (attributes) comparisons for more info):
if [ operator FileName ]
then
echo "FileName - Found, take some action here"
else
echo "FileName - Not found, take some action here"
fi
No comments:
Post a Comment