A simple if then else example in bash looks like this:

 

            #!/bin/bash
            V1="foo"
            V2="bar"
            if [ "$V1" = "$V2" ]; then
                echo expression evaluated as true
            else
                echo expression evaluated as false
            fi

The syntax used in above example is :

if TEST-COMMANDS; then CONSEQUENT-COMMANDS; fi

The TEST-COMMAND list is executed, and if its return status is zero, the CONSEQUENT-COMMANDS list is executed. The return status is the exit status of the last command executed, or zero if no condition tested true.

TEST-COMMANDS

The TEST-COMMAND often involves numerical or string comparison tests, but it can also be any command that returns a status of zero when it succeeds and some other status when it fails.

Unary expressions are often used to examine the status of a file. Further more, you may use more complex expressions in test commands.

Expressions used with if

The table below contains an overview of the so-called "primaries" that make up the TEST-COMMAND command or list of commands. These primaries are put between square brackets to indicate the test of a conditional expression.


Primary expressions

Primary        Meaning
[ -a FILE ]    True if FILE exists.
[ -b FILE ]    True if FILE exists and is a block-special file.
[ -c FILE ]    True if FILE exists and is a character-special file.
[ -d FILE ]    True if FILE exists and is a directory.
[ -e FILE ]    True if FILE exists.
[ -f FILE ]    True if FILE exists and is a regular file.
[ -g FILE ]    True if FILE exists and its SGID bit is set.
[ -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 SUID (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.
[ -N FILE ]    True if FILE exists and has been modified since it was last read.
[ -S FILE ]    True if FILE exists and is a socket.

[ FILE1 -nt FILE2 ] True if FILE1 has been changed more recently than FILE2,
or if FILE1 exists and FILE2 does not.
[ FILE1 -ot FILE2 ] True if FILE1 is older than FILE2, or is FILE2 exists and FILE1 does not.
[ FILE1 -ef FILE2 ] True if FILE1 and FILE2 refer to the same device and inode numbers.

[ -o OPTIONNAME ] True if shell option "OPTIONNAME" is enabled.
[ -z STRING ]     True of the length if "STRING" is zero.
[ -n STRING ] or [ STRING ] True if the length of "STRING" is non-zero.

[ STRING1 == STRING2 ] True if the strings are equal.
"=" may be used instead of "==" for strict POSIX compliance.
[ STRING1 != STRING2 ] True if the strings are not equal.
[ STRING1 < STRING2 ] True if "STRING1" sorts before "STRING2".
[ STRING1 > STRING2 ] True if "STRING1" sorts after "STRING2".
[ ARG1 OP ARG2 ] "OP" is one of -eq, -ne, -lt, -le, -gt or -ge.
Note: For "<" and ">", string are compared lexicographically in the current locale

Expressions may be combined using the following operators, listed in decreasing order of precedence:

Combining expressions

Operation             Effect
[ ! EXPR ]    True if EXPR is false.
[ ( EXPR ) ]     Returns the value of EXPR.
This may be used to override the normal precedence of operators.
[ EXPR1 -a EXPR2 ]    True if both EXPR1 and EXPR2 are true.
[ EXPR1 -o EXPR2 ]    True if either EXPR1 or EXPR2 is true.

Note:The [ (or test) built-in evaluates conditional expressions using a set of rules based on the number of arguments.

Commands following the then statement

The CONSEQUENT-COMMANDS list that follows the then statement can be any valid UNIX command, any executable program, any executable shell script or any shell statement, with the exception of the closing fi. It is important to remember that the then and fi are considered to be separated statements in the shell. Therefore, when issued on the command line, they are separated by a semi-colon.

Below is a simple examples.

The first example checks for the existence of a file:



#!/bin/bash

echo "This scripts checks the existence of the messages file."
echo "Checking..."
if [ -f /etc/redhat-release ]
  then
     echo "This server  installed "; cat /etc/redhat-release
fi
echo
echo "...done."