File attributes comparisons

From Linux Shell Scripting Tutorial - A Beginner's handbook
Revision as of 11:53, 5 September 2009 by Admin (talk | contribs) (→‎-e file)
Jump to navigation Jump to search

Use the following file comparisons to test various file attributes. You can use the test command or conditional expression using [.

-a file

True if file exists.

Example

[ -a /etc/resolv.conf ] && echo "File found" || echo "Not found"

-b file

True if file exists and is a block special file.

Example

[ -b /dev/zero ] && echo "block special file found" || echo "block special file not found"

OR

[ -b /dev/sda ] && echo "block special file found" || echo "block special file not found"

-c file

True if file exists and is a character special file.

Example

[ -c /dev/tty0  ] && echo "Character special file found." || echo "Character special file not found."

-d dir

True if file exists and is a directory.

Example

#!/bin/bash
DEST=/backup
SRC=/home

# Make sure backup dir exits
[ ! -d $DEST ] && mkdir -p $DEST

# If source directory does not exits, die...
[ ! -d $SRC ] && { echo "$SRC directory not found. Cannot make backup to $DEST"; exit 1; }

# Okay, dump backup using tar
echo "Backup directory $DEST..."
echo "Source directory $SRC..."
/bin/tar zcf $SRC $DEST/backup.tar.gz 2>/dev/null


# Find out if backup failed or not
[ $? -eq 0 ] && echo "Backup done!" || echo "Backup failed"

-e file

True if file exists.

Example

[ -e /tmp/test.txt ] && echo "File found" || echo "File not found"

-f file

True if file exists and is a regular file.

-g file

True if file exists and is set-group-id.

-h file

True if file exists and is a symbolic link.

-k file

True if file exists and its ‘‘sticky’’ bit is set.

-p file

True if file exists and is a named pipe (FIFO).

-r file

True if file exists and is readable.

-s file

True if file exists and has a size greater than zero.

-t fd

True if file descriptor fd is open and refers to a terminal. -u file== True if file exists and its set-user-id bit is set.

-w file

True if file exists and is writable.

-x file

True if file exists and is executable.

-O file

True if file exists and is owned by the effective user id.

-G file

True if file exists and is owned by the effective group id.

-L file

True if file exists and is a symbolic link.

-S file

True if file exists and is a socket.

-N file

True if file exists and has been modified since it was last read.