A bash shell script is a plain text file containing a set of various commands that we usually type in the command line.It can be used to automate software development tasks such as code compilation,debugging source code,change management and software testing.
Bash-Bourne again shell
Let's start and create a file named hello-world.sh
and add this code
#!/bin/bash
echo "Hello world"
The first line of the script #!/bin/bash
is called shebang.It tells the operating system which interpreter to use to run the script.
It instructs the operating system to use bin/bash ,the Bash shell,passing it the script's path as an argument.
Example
/bin/bash hello-world.sh
The second line echo is a builtin command that writes the arguement it recieves to the standard output.
The script can be executed in couple of ways:
./hello-world.sh
bash hello-world.sh
warning: To run the script through this method you need to give the permissions chmod +x hello-world.sh
.
A variable is a container for storing values.As the name indicates variables contain a value that can be changed or modified based on the condition or the information passed to the script.
Note: spaces cannot be used around the '=' assignment operator
example:
#!/bin/bash
#declaring the variable name
name="Rahul"
echo "$name"
#output-Rahul
#reassigning the value to the variable name
name="Supraa"
echo "#name"
#output-Supraa
The variables value can be accessed using $ or ${}.
example
#!/bin/bash
name="Rahul"
echo "$name"
#or echo "${name}".
Bash has builtin variables which can be really helpful when writing script.Any task like knowing the current working directory or knowing the hostname can be done using the internal variables.
example:
#!/bin/bash
# display the current working directory.
echo $PWD
# prints the hostname.
echo $HOSTNAME
# prints the path environment variables.
echo $PATH
The comments are added for the readable explanation of the code.
Anything written after the hash sign #
is considered as comment by the interpreter.Any text written in this line will not be executed.
example:
#!/bin/bash
# this is a comment.
# this is also a comment.
The read
command is used to take input from the user.The way input()
is used in python or cin<<
is used in c++.we can use read
in bash scripting.
example:
#!/bin/bash
echo "enter your name:"
read name
#the user input will be stored in the name variable.
echo "Hello,$name"
Just like other programming languages we can perform operations on bash as well.
example:
#!/bin/bash
echo "$(( 2 + 4 ))"
+
- addition-
- substraction*
- multiplication%
- modulus/
- division
example:
#!/bin/bash
num1=4
num2=5
# addition
echo "$(( num1 + num2 ))"
# substraction
echo "$(( num1 - num2 ))"
# multiplication
echo "$(( num1 * num 2 ))"
# division
echo "$(( num1 / num2 ))"
Relational operators allow to make comparisons between the operators.
=
- Assignment operator<
or-lt
- Less than<=
or-le
- Less than or equal to>
or-gt
- Greator than>=
or-ge
- Greator than or equal to!=
- Not equal to
Logical operators are used to combine multiple conditional statements.The outcome is generally a boolean value i'e either true or false.
&&
or-a
- AND||
or-o
- OR!
- NOT
example
if [[ 1 -lt 5 && 2 -lt 5 ]];then
echo "You are right"
else
echo "You seem to be incorrect"
fi
The conditional statements like if
and 'else' are used to make decisions based on the specified conditions.
example:
name="Rahul"
if [[ $name == "Rahul" ]];then
echo "hello $name"
else
echo "Invalid user!"
fi
Switch statement are used to perform tasks based on certain conditions. It consists of cases which decide the flow of the program.
#!/bin/bash
echo "enter a number from 1 to 3"
read number
case $number in
1)
echo "You chose 1"
;;
2)
echo "You chose 2"
;;
3)
echo "You chose 3"
;;
*)
echo "You did not pick a correct number"
;;
esac
The loops are used to perform a particular task for a certain number of times.
There are three types of loops in Bash and they are while
,until
and for
loop.
#!/bin/bash
num=$1
while [ $num -lt 5 ]
do
echo "$num"
(( num++ ))
done
#!/bin/bash
for i in {1..5}
do
echo $i
done
#!/bin/bash
until [[ $choice == "blue" ]]
do
echo "Pick red or blue"
read choice
done
echo "you chose blue"
NOTE: We can use break and continue statement to break out of loops based on certain conditions.
example:
#!/bin/bash
for i in {1..10}
do
if [[ $i == 5 ]];then
break;
else
echo "$i"
fi
done
Arrays are used to store multiple values.We can store multiple values in the same variable and access using the array index
example:To access the first element we can do arr[0]
.The index starts from 0.
#!/bin/bash
arr=("Rahul" "Peter" "Tony")
echo "The first element of the array is ${arr[0]}"
echo "The whole array is ${arr[@]}"
echo "The length of the array is ${#arr[@]}"
Functions are block of code which are used to perform particular task and break the entire code into small modules. Functions make the code more readable and understandable.
example:
func_add ()
{
local x=$1 # 1st argument to the function
local y=$2 # 2nd argument to the function
result=$(( x + y ))
}
# the function can be called like this
func_add 2 5
- You can use bash -x before your filename to debug your file
example
- To debug a file named hello.sh you can run it like
bash -x ./hello.sh
- You can also add pointers in your script to debug
example
#!/bin/bash
set -x
echo "enter your name"
read name
for i in [1..5]
do
echo $i
set -x
Pro Tip: Keep practicing to get good at it.
Checkout this cheatsheet for more.