Bash 101 Part 4: Brackets / braces / Parenthesis, Arithmetic and Loops
Bash can do arithmetic and loops. While this comes as no surprise, this article intends to show some examples of both and provide a few references where you can learn more.
Also covered: What the different bracket types mean.
Notes:
- Brackets, Braces and Parenthesis (StackOverflow)
- Bash doc on Shell Expansions (gnu.org)
- Bash Arithmetic
- Bash arithmetic (Cyberciti.biz)
- Shell Arithmetic (gnu.org)
- Floating Point arithmetic in Bash (Not supported natively in Bash)
- Bash Function that can perform floating arithmetic (linuxjournal.com)
- Bash floating point calculations (linuxconfig.org)
- Discussion around bash floating point arithmetic (gidforums.com)
- Bash looping
- Bash for loop examples (cyberciti.biz) Fantastic article!
- Simple loop examples (tldp.org)
Brackets, Parenthesis and braces
Bash uses Brackets and parenthesis to indicate what operations should be performed. Here are a few forms you may find along with a brief description:
- [ ]
- Single brackets are used for comparison operations. In the past [ was a command like the unix test command.
- [[ ]]
- Double brackets are also used for comparisons, but they expose a richer syntax which enables more testing and comparison operations
- ( )
- Single parenthesis call a sub-shell
- (( ))
- Double parenthesis are used for arithmetic (demonstrated below)
- { }
- Single Braces can be used to:
- Unambiguously identify variables
- Define a sequence of commands for the current shell context
- Single Braces can be used to:
For more information see the Stack Overflow article or the Bash documentation
Arithmetic operations
Bash will allow you to perform mathematical operations within a script. For a complete list of supported operations, see the documentation(Shell-Arithmetic)
I am to demonstrate how to use Arithmetic expansion to perform:
- Addition / Subtration
- Multiplication / Division
Addition and Subraction
#!/bin/bash
# This script will demonstrate addition and subraction
echo "Sample script to demonstrate addition and subraction"
echo " "
# Define the variables
var1=7
var2=5
# Perform operations & display the result
addition_result=$((var1+var2))
echo "Addition of $var1 and $var2 = $addition_result"
echo " "
subtraction_result=$((var2-var1))
echo "Subtraction of $var1 from $var2 = $subtraction_result"
Here are the script results:
The process works the same for Multiplication and Division:
#!/bin/bash
# This script will demonstrate Multiplication and Division
echo "Sample script to demonstrate Multiplication and Division"
echo " "
# Define the variables
var1=10
var2=5
# Perform operations & display the result
m_result=$((var1*var2))
echo "Multiplication of $var1 and $var2 = $m_result"
echo " "
d_result=$((var1/var2))
echo "Division of $var1 by $var2 = $d_result"
Here is the command output:
Here are the key points to take away (Arithmetic):
- Integer variables can be assigned just like strings VARNAME=89
- Enclose integer variables in $(( )) to perform operations on them (add/sub/mul/div)
- You can capture the result of the numeric operation in a variable for later use/display
Important Note: For floating point operations, see the references listed in the Notes section above. It looks like Bash primarily deals with integers and you need to use external commands or some code to get floating point math to work.
Loops and looping
Bash supports For / For each, while and until loops. I'll be showing examples of for, foreach and while. If you'd like more comprehensive examples or information about these loop styles see the Notes section for additional references.
Example script listing 3 loop types: for, foreach and while:
#!/bin/bash
#
# This script shows loop examples
# Typical C like For loop
echo "This is what I would consider to be a typical for loop"
for (( i=0; i<5; i++))
do
echo "This is the $i'th loop!"
done
# for-each loop
echo " "
echo "This is like a foreach loop in C#.Net"
for filename in ~/*
do
echo "Filename is $filename"
done
# While loop
echo " "
echo "Here's the while loop"
count=0
while [ $count -lt 7 ]
do
echo "The count is: $count"
count=$(($count+1))
done
Here is the command output of all 3 loops:
Here are the key points to take away (Loops):
- The statements between the do and done statements will be repeated during each iteration
- For c-type for loop behavior, use the (( var=0; var < 9; var++)) syntax
- A for-each loop in bash will repeat once for each statement returned by an operation (ls, read, etc...). In the example above, the foreach loop lists all files in my home directory
- A while loop will continue if the criteria contained in the [ $expression ] construct returns true
For more information on the topics covered today, see my reference material listed in the notes section at the top of the article.