# Decision Making

As in popular programming languages, the shell also supports logical decision making.

The basic conditional decision making construct is:

if [ expression ]; then

code if 'expression' is true

fi

``````NAME="John"
if [ "\$NAME" = "John" ]; then
echo "True - my name is indeed John"
fi
``````

It can be expanded with 'else'

``````NAME="Bill"
if [ "\$NAME" = "John" ]; then
echo "True - my name is indeed John"
else
echo "False"
echo "You must mistaken me for \$NAME"
fi
``````

It can be expanded with 'elif' (else-if)

``````NAME="George"
if [ "\$NAME" = "John" ]; then
echo "John Lennon"
elif [ "\$NAME" = "George" ]; then
echo "George Harrison"
else
echo "This leaves us with Paul and Ringo"
fi
``````

The expression used by the conditional construct is evaluated to either true or false. The expression can be a single string or variable. A empty string or a string consisting of spaces or an undefined variable name, are evaluated as false. The expression can be a logical combination of comparisons: negation is denoted by !, logical AND (conjunction) is denoted by &&, and logical OR (disjunction) is denoted by ||. Conditional expressions should be surrounded by double brackets [[ ]].

### Types of numeric comparisons

``````comparison    Evaluated to true when
\$a -lt \$b    \$a < \$b
\$a -gt \$b    \$a > \$b
\$a -le \$b    \$a <= \$b
\$a -ge \$b    \$a >= \$b
\$a -eq \$b    \$a is equal to \$b
\$a -ne \$b    \$a is not equal to \$b
``````

### Types of string comparisons

``````comparison    Evaluated to true when
"\$a" = "\$b"     \$a is the same as \$b
"\$a" == "\$b"    \$a is the same as \$b
"\$a" != "\$b"    \$a is different from \$b
-z "\$a"         \$a is empty
``````
• note1: whitespace around = is required

• note2: use "" around string variables to avoid shell expansion of special characters as *

### Logical combinations

``````if <a href='/en/_%24VAR_A_-eq_1_%26%26_%28%24VAR_B_%3D_%22bee%22_'>| \$VAR_T = "tee") </a> ; then
command...
fi
``````

### case structure

``````case "\$variable" in
"\$condition1" )
command...
;;
"\$condition2" )
command...
;;
esac
``````

### simple case bash structure

Note in this case \$case is variable and does not have to be named case - this is just an example

``````mycase=1
case \$mycase in
1) echo "You selected bash";;
2) echo "You selected perl";;
3) echo "You selected phyton";;
4) echo "You selected c++";;
5) exit
esac
``````

## Exercise

Change the variables in the first section, so that each if statement resolves as True.

### Online Courses Learn Basic Commands in Linux Shell  Linux Shell Programming for Beginners  Learn Bash Shell in Linux for Beginners - Lite  Learn Bash Shell in Linux for Beginners  Shell Scripting: Discover How to Automate Command Line Tasks 