Difference between revisions of "File attributes comparisons"

From Linux Shell Scripting Tutorial - A Beginner's handbook
Jump to navigation Jump to search
Line 46: Line 46:
 
==-f file==
 
==-f file==
 
True if file exists and is a regular file.
 
True if file exists and is a regular file.
 +
 +
===Example===
 +
<source lang="bash">#!/bin/bash
 +
# Purpose: A Shell Script To Create Webalizer Stats Configration File
 +
# Written by: Vivek Gite
 +
# ---------------------------------------------------------------------
 +
# Set vars
 +
 +
# Apache vroot for each domain
 +
HTTPDROOT="/home/httpd"
 +
 +
# Path to GeoIP DB
 +
GEOIPDBPATH="/usr/local/share/GeoIP/GeoIP.dat"
 +
 +
# Get the Internet domain such as cyberciti.biz
 +
echo "*** A Shell Script To Create Webalizer Stats Configration File ***"
 +
read -p "Enter a domain name : " DOMAIN
 +
 +
# Make sure we got the Input else die with an error on screen
 +
[ -z $DOMAIN ] && { echo "Please enter a domain name. Try again!"; exit 1; }
 +
 +
# Alright, set some variable based upon $DOMAIN
 +
OUT="$HTTPDROOT/$DOMAIN/stats/webalizer.conf"
 +
CONFROOT="$HTTPDROOT/$DOMAIN/stats"
 +
LOGFILE="$HTTPDROOT/$DOMAIN/logs/access.log"
 +
 +
# Die if configuration file exits...
 +
[ -f $OUT ] && { echo "Webalizer configuration file '$OUT' exits for domain $DOMAIN."; exit 2; }
 +
 +
# Make sure configuration directory exists
 +
[ ! -d $CONFROOT ] && mkdir -p $CONFROOT
 +
 +
# Write a log file
 +
 +
>$OUT
 +
echo "LogFile $LOGFILE"  >> $OUT
 +
echo "LogType clf"  >> $OUT
 +
echo "OutputDir    $CONFROOT/out"  >> $OUT
 +
echo "HistoryName    $CONFROOT/webalizer.hist"  >> $OUT
 +
echo "Incremental    yes"  >> $OUT
 +
echo "IncrementalName $CONFROOT/webalizer.current"  >> $OUT
 +
echo "HostName      $DOMAIN"  >> $OUT
 +
echo "Quiet          yes"  >> $OUT
 +
echo "FoldSeqErr      yes"  >> $OUT
 +
echo "AllSearchStr    yes"  >> $OUT
 +
echo "HideSite        $DOMAIN"  >> $OUT
 +
echo "HideSite        localhost"  >> $OUT
 +
echo "HideReferrer    $DOMAIN"  >> $OUT
 +
echo "HideURL        *.gif"  >> $OUT
 +
echo "HideURL        *.GIF"  >> $OUT
 +
echo "HideURL        *.jpg"  >> $OUT
 +
echo "HideURL        *.JPG"  >> $OUT
 +
echo "HideURL        *.png"  >> $OUT
 +
echo "HideURL        *.PNG"  >> $OUT
 +
echo "HideURL        *.ra"  >> $OUT
 +
echo "GroupReferrer  yahoo.com/      Yahoo!"  >> $OUT
 +
echo "GroupReferrer  excite.com/    Excite"  >> $OUT
 +
echo "GroupReferrer  infoseek.com/  InfoSeek"  >> $OUT
 +
echo "GroupReferrer  webcrawler.com/ WebCrawler"  >> $OUT
 +
echo "SearchEngine    .yahoo.        p="  >> $OUT
 +
echo "SearchEngine    altavista.com  q="  >> $OUT
 +
echo "SearchEngine    .google.        q="  >> $OUT
 +
echo "SearchEngine    eureka.com      q="  >> $OUT
 +
echo "SearchEngine    lycos.com      query="  >> $OUT
 +
echo "SearchEngine    hotbot.com      MT="  >> $OUT
 +
echo "SearchEngine    msn.com        MT="  >> $OUT
 +
echo "SearchEngine    infoseek.com    qt="  >> $OUT
 +
echo "SearchEngine    webcrawler      searchText="  >> $OUT
 +
echo "SearchEngine    excite          search="  >> $OUT
 +
echo "SearchEngine    netscape.com    search="  >> $OUT
 +
echo "SearchEngine    mamma.com      query="  >> $OUT
 +
echo "SearchEngine    alltheweb.com  query="  >> $OUT
 +
echo "SearchEngine    northernlight.com  qr="  >> $OUT
 +
echo "CountryFlags yes"  >> $OUT
 +
echo "GeoIP yes"  >> $OUT
 +
echo "GeoIPDatabase $GEOIPDBPATH"  >> $OUT
 +
echo "GraphMonths 72"  >> $OUT
 +
echo "IndexMonths 120"  >> $OUT
 +
echo "GraphMonths 72"  >> $OUT
 +
echo "TopReferrers 20"  >> $OUT
 +
echo "TopSites 20"  >> $OUT
 +
echo "TopURLs 50"  >> $OUT
 +
echo "TopKURLs 50"  >> $OUT
 +
 +
echo "Weblizer config wrote to $OUT"</source>
 +
 
==-g file==
 
==-g file==
 
True if file exists and is set-group-id.
 
True if file exists and is set-group-id.

Revision as of 12:11, 5 September 2009

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.

Example

#!/bin/bash
# Purpose: A Shell Script To Create Webalizer Stats Configration File
# Written by: Vivek Gite
# ---------------------------------------------------------------------
# Set vars

# Apache vroot for each domain
HTTPDROOT="/home/httpd"

# Path to GeoIP DB
GEOIPDBPATH="/usr/local/share/GeoIP/GeoIP.dat"

# Get the Internet domain such as cyberciti.biz 
echo "*** A Shell Script To Create Webalizer Stats Configration File ***"
read -p "Enter a domain name : " DOMAIN

# Make sure we got the Input else die with an error on screen
[ -z $DOMAIN ] && { echo "Please enter a domain name. Try again!"; exit 1; }

# Alright, set some variable based upon $DOMAIN 
OUT="$HTTPDROOT/$DOMAIN/stats/webalizer.conf"
CONFROOT="$HTTPDROOT/$DOMAIN/stats"
LOGFILE="$HTTPDROOT/$DOMAIN/logs/access.log"

# Die if configuration file exits...
[ -f $OUT ] && { echo "Webalizer configuration file '$OUT' exits for domain $DOMAIN."; exit 2; }

# Make sure configuration directory exists
[ ! -d $CONFROOT ] && mkdir -p $CONFROOT 

# Write a log file 

>$OUT
echo "LogFile $LOGFILE"  >> $OUT
echo "LogType clf"  >> $OUT
echo "OutputDir     $CONFROOT/out"  >> $OUT
echo "HistoryName     $CONFROOT/webalizer.hist"  >> $OUT
echo "Incremental     yes"  >> $OUT
echo "IncrementalName $CONFROOT/webalizer.current"  >> $OUT
echo "HostName       $DOMAIN"  >> $OUT
echo "Quiet           yes"  >> $OUT
echo "FoldSeqErr      yes"  >> $OUT
echo "AllSearchStr    yes"  >> $OUT
echo "HideSite        $DOMAIN"  >> $OUT
echo "HideSite        localhost"  >> $OUT
echo "HideReferrer    $DOMAIN"  >> $OUT
echo "HideURL         *.gif"  >> $OUT
echo "HideURL         *.GIF"  >> $OUT
echo "HideURL         *.jpg"  >> $OUT
echo "HideURL         *.JPG"  >> $OUT
echo "HideURL         *.png"  >> $OUT
echo "HideURL         *.PNG"  >> $OUT
echo "HideURL         *.ra"  >> $OUT
echo "GroupReferrer   yahoo.com/      Yahoo!"  >> $OUT
echo "GroupReferrer   excite.com/     Excite"  >> $OUT
echo "GroupReferrer   infoseek.com/   InfoSeek"  >> $OUT
echo "GroupReferrer   webcrawler.com/ WebCrawler"  >> $OUT
echo "SearchEngine    .yahoo.         p="  >> $OUT
echo "SearchEngine    altavista.com   q="  >> $OUT
echo "SearchEngine    .google.        q="  >> $OUT
echo "SearchEngine    eureka.com      q="  >> $OUT
echo "SearchEngine    lycos.com       query="  >> $OUT
echo "SearchEngine    hotbot.com      MT="  >> $OUT
echo "SearchEngine    msn.com         MT="  >> $OUT
echo "SearchEngine    infoseek.com    qt="  >> $OUT
echo "SearchEngine    webcrawler      searchText="  >> $OUT
echo "SearchEngine    excite          search="  >> $OUT
echo "SearchEngine    netscape.com    search="  >> $OUT
echo "SearchEngine    mamma.com       query="  >> $OUT
echo "SearchEngine    alltheweb.com   query="  >> $OUT
echo "SearchEngine    northernlight.com  qr="  >> $OUT
echo "CountryFlags yes"  >> $OUT
echo "GeoIP yes"  >> $OUT
echo "GeoIPDatabase $GEOIPDBPATH"  >> $OUT
echo "GraphMonths 72"  >> $OUT
echo "IndexMonths 120"  >> $OUT
echo "GraphMonths 72"  >> $OUT
echo "TopReferrers 20"  >> $OUT
echo "TopSites 20"  >> $OUT
echo "TopURLs 50"  >> $OUT
echo "TopKURLs 50"  >> $OUT

echo "Weblizer config wrote to $OUT"

-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.