Difference between revisions of "File attributes comparisons"

From Linux Shell Scripting Tutorial - A Beginner's handbook
Jump to navigation Jump to search
m (Text replacement - "</source>" to "</syntaxhighlight>")
 
(2 intermediate revisions by the same user not shown)
Line 7: Line 7:
 
True if file exists.
 
True if file exists.
 
===Example===
 
===Example===
<source lang="bash">[ -a /etc/resolv.conf ] && echo "File found" || echo "Not found"</source>
+
<syntaxhighlight lang="bash" >[ -a /etc/resolv.conf ] && echo "File found" || echo "Not found"</syntaxhighlight>
  
 
==-b file==
 
==-b file==
 
True if file exists and is a [[block special file]].
 
True if file exists and is a [[block special file]].
 
===Example===
 
===Example===
<source lang="bash">[ -b /dev/zero ] && echo "block special file found" || echo "block special file not found"</source>
+
<syntaxhighlight lang="bash" >[ -b /dev/zero ] && echo "block special file found" || echo "block special file not found"</syntaxhighlight>
 
OR
 
OR
<source lang="bash">[ -b /dev/sda ] && echo "block special file found" || echo "block special file not found"</source>
+
<syntaxhighlight lang="bash" >[ -b /dev/sda ] && echo "block special file found" || echo "block special file not found"</syntaxhighlight>
  
 
==-c file==
 
==-c file==
 
True if file exists and is a [[character special file]].
 
True if file exists and is a [[character special file]].
 
===Example===
 
===Example===
<source lang="bash">[ -c /dev/tty0  ] && echo "Character special file found." || echo "Character special file not found."</source>
+
<syntaxhighlight lang="bash" >[ -c /dev/tty0  ] && echo "Character special file found." || echo "Character special file not found."</syntaxhighlight>
  
 
==-d dir==
 
==-d dir==
 
True if file exists and is a [[directory]].
 
True if file exists and is a [[directory]].
 
===Example===
 
===Example===
<source lang="bash">#!/bin/bash
+
<syntaxhighlight lang="bash" >#!/bin/bash
DEST=/backup
+
DEST="/backup"
SRC=/home
+
SRC="/home"
  
 
# Make sure backup dir exits
 
# Make sure backup dir exits
[ ! -d $DEST ] && mkdir -p $DEST
+
[ ! -d "$DEST" ] && mkdir -p "$DEST"
  
 
# If source directory does not exits, die...
 
# If source directory does not exits, die...
[ ! -d $SRC ] && { echo "$SRC directory not found. Cannot make backup to $DEST"; exit 1; }
+
[ ! -d "$SRC" ] && { echo "$SRC directory not found. Cannot make backup to $DEST"; exit 1; }
  
 
# Okay, dump backup using tar
 
# Okay, dump backup using tar
 
echo "Backup directory $DEST..."
 
echo "Backup directory $DEST..."
 
echo "Source directory $SRC..."
 
echo "Source directory $SRC..."
/bin/tar zcf $SRC $DEST/backup.tar.gz 2>/dev/null
+
/bin/tar zcf "$DEST/backup.tar.gz" "$SRC" 2>/dev/null
  
  
# Find out if backup failed or not
+
# Find out if our backup job failed or not and notify on screen
[ $? -eq 0 ] && echo "Backup done!" || echo "Backup failed"</source>
+
[ $? -eq 0 ] && echo "Backup done!" || echo "Backup failed"</syntaxhighlight>
  
 
==-e file==
 
==-e file==
 
True if file exists.
 
True if file exists.
 
===Example===
 
===Example===
<source lang="bash">[ -e /tmp/test.txt ] && echo "File found" || echo "File not found"</source>
+
<syntaxhighlight lang="bash" >[ -e /tmp/test.txt ] && echo "File found" || echo "File not found"</syntaxhighlight>
  
 
==-f file==
 
==-f file==
Line 52: Line 52:
  
 
===Example===
 
===Example===
<source lang="bash">[ ! -f /path/to/file ] && echo "File not found!"</source>
+
<syntaxhighlight lang="bash" >[ ! -f /path/to/file ] && echo "File not found!"</syntaxhighlight>
 
A sample shell script that compare various file attributes and create webalizer (application that generates web pages of analysis, from access and usage log) stats configuration file to given Internet domain name.
 
A sample shell script that compare various file attributes and create webalizer (application that generates web pages of analysis, from access and usage log) stats configuration file to given Internet domain name.
<source lang="bash">#!/bin/bash
+
<syntaxhighlight lang="bash" >#!/bin/bash
 
# Purpose: A Shell Script To Create Webalizer Stats Configration File
 
# Purpose: A Shell Script To Create Webalizer Stats Configration File
 
# Written by: Vivek Gite
 
# Written by: Vivek Gite
Line 136: Line 136:
 
echo "TopKURLs 50"  >> $OUT
 
echo "TopKURLs 50"  >> $OUT
  
echo "Weblizer config wrote to $OUT"</source>
+
echo "Weblizer config wrote to $OUT"</syntaxhighlight>
  
 
==-g file==
 
==-g file==

Latest revision as of 22:50, 29 March 2016

← String comparisonHomeShell command line parameters →

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 "$DEST/backup.tar.gz" "$SRC" 2>/dev/null


# Find out if our backup job failed or not and notify on screen
[ $? -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

[ ! -f /path/to/file ] && echo "File not found!"

A sample shell script that compare various file attributes and create webalizer (application that generates web pages of analysis, from access and usage log) stats configuration file to given Internet domain name.

#!/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. ← String comparisonHomeShell command line parameters →