Difference between revisions of "File attributes comparisons"
m (Text replacement - "</source>" to "</syntaxhighlight>") |
|||
(12 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
+ | {{navigation | ||
+ | |previous=String comparison | ||
+ | |next=Shell command line parameters}} | ||
+ | |||
Use the following file comparisons to test various file attributes. You can use the [[test command]] or [[Conditional expression|conditional expression using []]. | Use the following file comparisons to test various file attributes. You can use the [[test command]] or [[Conditional expression|conditional expression using []]. | ||
==-a file== | ==-a file== | ||
True if file exists. | True if file exists. | ||
===Example=== | ===Example=== | ||
− | < | + | <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=== |
+ | <syntaxhighlight lang="bash" >[ -b /dev/zero ] && echo "block special file found" || echo "block special file not found"</syntaxhighlight> | ||
OR | OR | ||
− | < | + | <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=== | ||
+ | <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=== | ||
+ | <syntaxhighlight lang="bash" >#!/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"</syntaxhighlight> | ||
+ | |||
==-e file== | ==-e file== | ||
True if file exists. | True if file exists. | ||
+ | ===Example=== | ||
+ | <syntaxhighlight lang="bash" >[ -e /tmp/test.txt ] && echo "File found" || echo "File not found"</syntaxhighlight> | ||
+ | |||
==-f file== | ==-f file== | ||
True if file exists and is a regular file. | True if file exists and is a regular file. | ||
+ | |||
+ | ===Example=== | ||
+ | <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. | ||
+ | <syntaxhighlight 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"</syntaxhighlight> | ||
+ | |||
==-g file== | ==-g file== | ||
True if file exists and is set-group-id. | True if file exists and is set-group-id. | ||
Line 25: | Line 144: | ||
==-k file== | ==-k file== | ||
True if file exists and its ‘‘sticky’’ bit is set. | True if file exists and its ‘‘sticky’’ bit is set. | ||
+ | |||
==-p file== | ==-p file== | ||
True if file exists and is a named pipe (FIFO). | True if file exists and is a named pipe (FIFO). | ||
Line 33: | Line 153: | ||
==-t fd== | ==-t fd== | ||
True if file descriptor fd is open and refers to a terminal. | True if file descriptor fd is open and refers to a terminal. | ||
− | -u file== | + | ==-u file== |
True if file exists and its set-user-id bit is set. | True if file exists and its set-user-id bit is set. | ||
==-w file== | ==-w file== | ||
Line 50: | Line 170: | ||
True if file exists and has been modified since it was last read. | True if file exists and has been modified since it was last read. | ||
[[Category:Conditional Execution]] | [[Category:Conditional Execution]] | ||
+ | {{navigation | ||
+ | |previous=String comparison | ||
+ | |next=Shell command line parameters}} |
Latest revision as of 22:50, 29 March 2016
← String comparison • Home • Shell 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 comparison • Home • Shell command line parameters →