We can check the conditional statement in bash scripting
1. if..then..fi statement (Simple If)
2. if..then..else..fi statement (If-Else)
3. if..elif..else..fi statement (Else If ladder)
4. if..then..else..if..then..fi..fi..(Nested if)
File Operations
-s file exists and is not empty
-f file exists and is not a directory
-d directory exists
-x file is executable
-w file is writable
-r file is readable
Numeric Comparison
expr1 -eq expr2 Returns true if the expressions are equal
expr1 -ne expr2 true if the expressions are not equal
expr1 -gt expr2 true if expr1 is greater than expr2
expr1 -ge expr2 Returns true if expr1 >= to expr2
expr1 -lt expr2 Returns true if expr1 is less than expr2
expr1 -le expr2 Returns true if expr1 is >= expr2
! expr1 Negates the result of the expression
-lt | < |
-gt | > |
-le | <= |
-ge | >= |
-eq | == |
-ne | != |
String Comparison
Str1 = Str2 Returns true if the strings are equal
Str1 != Str2 Returns true if the strings are not equal
-n Str1 Returns true if the string is not null
-z Str1 Returns true if the string is null
= | equal |
!= | not equal |
< | less then |
> | greater then |
-n s1 | string s1 is not empty |
-z s1 | string s1 is empty |
if..then..fi
if [ expression ]
then
Statement(s) to be executed if expression is true
fi
Here Shell expression is evaluated. If the resulting value is true, given statement(s) are executed.If expression is false then no statement would be not executed. Most of the times you will use comparison operators while making decisions.
#!/bin/sh
a=10
b=20
if [ $a == $b ]
then
echo "$a is equal to $b"
fi
if [ $a != $b ]
then
echo "a is not equal to b"
fi
#!/bin/bash
count=100
if [ $count -eq 100 ]
then
echo "Count is 100"
fi
#!/bin/bash
if [ $? -eq 0 ]
then
echo 'Success!'
else
echo "Failed!!!!"
fi
#!/bin/bash
count=`wc -l /root/nopass | cut -f1 -d" "`
echo $count
if [ "$count" > "150" ]
then
echo "File has more than 150 lines"
fi
#!/bin/bash
gender="female"
if [[ "$gender" == f* ]] #syntax differ when * comes
then
echo "Welcome, Madame.";
fi
#!/bin/bash
if [ "$(whoami)" != 'root' ]; then
echo "You have no permission to run $0 as non-root user."
exit 1;
fi
Note: you can give the system commands in two ways:
1. inside tilde `` Or using second method
2. $()
if..then..else..fi
; semi-colon is a command terminator in bash
Use single quote when you want to literally print everything inside the single quote.
echo 'Hostname=$HOSTNAME ; Current User=`whoami` ; Message=\$ is USD'
Use double quotes when you want to display the real meaning of special variables.
echo "Hostname=$HOSTNAME ; Current User=`whoami` ; Message=\$ is USD"
Double quotes will remove the special meaning of all characters except the following:
$ Parameter Substitution.
` Backquotes
\$ Literal Dollar Sign.
\´ Literal Backquote.
\” Embedded Doublequote.
\\ Embedded Backslashes.
Before special variables use escape characters
#!/bin/sh
# This is some secure program that uses security.
VALID_PASSWORD="secret" #this is our password.
echo -n "Please enter the password:"
read PASSWORD
if [ "$PASSWORD" == "$VALID_PASSWORD" ]; then
echo "You have access!"
else
echo "ACCESS DENIED!"
fi
If..then..else if..then..else if..then..else [Nested if]
#!/bin/sh
# Prompt for a user name...
echo -n "Please enter your name:"
read USERNAME
# Check for the file.
if [ -s ${USERNAME}_DAT ]; then
# Read the age from the file.
AGE=`cat ${USERNAME}_DAT` # This is how you execute a command and put # the text output from the command into a # variable.
echo "You are $AGE years old!"
else
# Ask the user for his/her age
echo "How old are you?"
read AGE
if [ "$AGE" -le 2 ]; then
echo "You are too young!"
else
if [ "$AGE" -ge 100 ]; then
echo "You are too old!"
else
# Write the age to a new file.
echo $AGE > ${USERNAME}_DAT
fi
fi
fi
If..elif (else if)
if [ expression 1 ]
then
Statement(s) to be executed if expression 1 is true
elif [ expression 2 ]
then
Statement(s) to be executed if expression 2 is true
elif [ expression 3 ]
then
Statement(s) to be executed if expression 3 is true
else
Statement(s) to be executed if no expression is true
fi
#!/bin/sh
a=10
b=20
if [ $a == $b ]
then
echo "a is equal to b"
elif [ $a -gt $b ]
then
echo "a is greater than b"
elif [ $a -lt $b ]
then
echo "a is less than b"
else
echo "None of the condition met"
fi
#!/bin/sh
# Prompt for a user name...
echo "Please enter your age:"
read AGE
if [ "$AGE" -lt 20 ] || [ "$AGE" -ge 50 ]; then
echo "Sorry, you are out of the age range."
elif [ "$AGE" -ge 20 ] && [ "$AGE" -lt 30 ]; then
echo "You are in your 20s"
elif [ "$AGE" -ge 30 ] && [ "$AGE" -lt 40 ]; then
echo "You are in your 30s"
elif
\[ "$AGE" -ge 40 ] && [ "$AGE" -lt 50 ]; then
echo "You are in your 40s"
fi
Nested if/else
#!/bin/bash
# Declare variable choice and assign value 4
choice=4
# Print to stdout
echo "1. Bash"
echo "2. Scripting"
echo "3. Tutorial"
echo -n "Please choose a word [1,2 or 3]? "
# Loop while the variable choice is equal 4
# bash while loop
while [ $choice -eq 4 ]; do
# read user input
read choice
# bash nested if/else
if [ $choice -eq 1 ] ; then
echo "You have chosen word: Bash"
else
if [ $choice -eq 2 ] ; then
echo "You have chosen word: Scripting"
else
if [ $choice -eq 3 ] ; then
echo "You have chosen word: Tutorial"
else
echo "Please make a choice between 1-3 !"
echo "1. Bash"
echo "2. Scripting"
echo "3. Tutorial"
echo -n "Please choose a word [1,2 or 3]? "
choice=4
fi
fi
fi
done
********************************************
Exmp1:
#!/bin/bash
# Author:
# Date:
# Purpose:
password="IF"
echo -n "Please enter your password:"
read passwd
if [ $password = $passwd ]; then
echo "You have the access to run this script"
else
echo "Access Denied"
exit
fi
if [ -d ~/IF ]; then
echo "Directory exists. creting file"
cd /home/ec2-user/IF ; touch iftesting
else
echo "directory does not exists...Creating directory"
mkdir /home/ec2-user/IF
exit
fi
Exmp2:
#!/bin/sh
# Prompt for a user name...
echo "Please enter your name:"
read USERNAME
# Check for the file.
if [ -s ${USERNAME}_DAT ]; then
# Read the age from the file.
AGE=`cat ${USERNAME}_DAT`
echo "You are $AGE years old!"
else
# Ask the user for his/her age
echo "How old are you?"
read AGE
if [ "$AGE" -le 2 ]; then
echo "You are too young!"
else
if [ "$AGE" -ge 100 ]; then
echo "You are too old!"
else
# Write the age to a new file.
echo $AGE > ${USERNAME}_DAT
fi
fi
fi
Exmp3:
#!/bin/sh
# Prompt for a user name...
echo "Please enter your age:"
read AGE
if [ "$AGE" -lt 20 ] || [ "$AGE" -ge 50 ]; then
echo "Sorry, you are out of the age range."
elif [ "$AGE" -ge 20 ] && [ "$AGE" -lt 30 ]; then
echo "You are in your 20s"
elif [ "$AGE" -ge 30 ] && [ "$AGE" -lt 40 ]; then
echo "You are in your 30s"
elif [ "$AGE" -ge 40 ] && [ "$AGE" -lt 50 ]; then
echo "You are in your 40s"
fi
Exmp4:
#!/bin/bash
# Purpose: Detecting Hardware Errors
# Author:
# Note : The script must run as a cron-job.
# Last updated on :
# -----------------------------------------------
# Store path to commands
LOGGER=/usr/bin/logger
FILE=/var/log/mcelog
# Store email settings
AEMAIL="jeffinm@gmail.com "
ASUB="H/W Error - $(hostname)"
AMESS="Warning - Hardware errors found on $(hostname) @ $(date). See log file for the details /var/log/mcelog."
OK_MESS="OK: NO Hardware Error Found."
WARN_MESS="ERROR: Hardware Error Found."
# Check if $FILE exists or not
if test ! -f "$FILE"
then
echo "Error - $FILE not found or mcelog is not configured for 64 bit Linux systems."
exit 1
fi
# okay search for errors in file
error_log=$(grep -c -i "hardware error" $FILE)
# error found or not?
if [ $error_log -gt 0 ]
then # yes error(s) found, let send an email
echo "$AMESS" | email -s "$ASUB" $AEMAIL
else # naa, everything looks okay
echo "$OK_MESS"
fi