File attributes comparisons

From Linux Shell Scripting Tutorial - A Beginner's handbook
Revision as of 22:49, 29 March 2016 by Admin (talk | contribs) (Text replacement - "<source lang="bash">" to "<syntaxhighlight lang="bash" >")
Jump to navigation Jump to search

← 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

<syntaxhighlight lang="bash" >[ -a /etc/resolv.conf ] && echo "File found" || echo "Not found"</source>

-b file

True if file exists and is a block special file.

Example

<syntaxhighlight lang="bash" >[ -b /dev/zero ] && echo "block special file found" || echo "block special file not found"</source> OR <syntaxhighlight lang="bash" >[ -b /dev/sda ] && echo "block special file found" || echo "block special file not found"</source>

-c file

True if file exists and is a character special file.

Example

<syntaxhighlight lang="bash" >[ -c /dev/tty0 ] && echo "Character special file found." || echo "Character special file not found."</source>

-d dir

True if file exists and is a directory.

Example

<syntaxhighlight lang="bash" >#!/bin/bash DEST="/backup" SRC="/home"

  1. Make sure backup dir exits

[ ! -d "$DEST" ] && mkdir -p "$DEST"

  1. If source directory does not exits, die...

[ ! -d "$SRC" ] && { echo "$SRC directory not found. Cannot make backup to $DEST"; exit 1; }

  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


  1. Find out if our backup job failed or not and notify on screen

[ $? -eq 0 ] && echo "Backup done!" || echo "Backup failed"</source>

-e file

True if file exists.

Example

<syntaxhighlight lang="bash" >[ -e /tmp/test.txt ] && echo "File found" || echo "File not found"</source>

-f file

True if file exists and is a regular file.

Example

<syntaxhighlight lang="bash" >[ ! -f /path/to/file ] && echo "File not found!"</source> 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. <syntaxhighlight lang="bash" >#!/bin/bash

  1. Purpose: A Shell Script To Create Webalizer Stats Configration File
  2. Written by: Vivek Gite
  3. ---------------------------------------------------------------------
  4. Set vars
  1. Apache vroot for each domain

HTTPDROOT="/home/httpd"

  1. Path to GeoIP DB

GEOIPDBPATH="/usr/local/share/GeoIP/GeoIP.dat"

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

  1. 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; }

  1. Alright, set some variable based upon $DOMAIN

OUT="$HTTPDROOT/$DOMAIN/stats/webalizer.conf" CONFROOT="$HTTPDROOT/$DOMAIN/stats" LOGFILE="$HTTPDROOT/$DOMAIN/logs/access.log"

  1. Die if configuration file exits...

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

  1. Make sure configuration directory exists

[ ! -d $CONFROOT ] && mkdir -p $CONFROOT

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

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 →