Knowledge | Unix/Linux Tutorials
Bash Scripting Tutorial
This bash script tutorial assumes no previous knowledge of bash scripting. As you will soon discover in this quick comprehensive bash scripting guide, learning the bash shell scripting is very easy task. However, if you do not find an answer to your questions by reading this bash tutorial or you need extra help, feel to send us an email with the specify question. We will be more than happy to help you with your bash questions there.
Lets begin this bash scripting tutorial with a simple “This is my First Example” script. Let’s start with learning the bash Shell: Unix Shell Programming.
First, we need to find out where is the bash interpreter located. Enter the following commands into your command line:
$ which bash
Output:
/bin/bash
Second, Open up your favorite text editor and create a new file called “My_first_example.sh”. Insert the following lines into it:
#!/bin/bash #declare string variable STRING="This is my First Example" #Print the variable on the screen echo $STRING
NOTE:Every bash shell script must starts with shebang: “#!” which is not read as a comment. First line is also a place where we must put the interpreter. In this case is: /bin/bash
Third, Make the “My_first_example.sh” executable. Please do the following steps:
$ chmod +x My_first_example.sh
Finally, we are ready to execute our first bash script. Please execute the following command:
./My_first_example.sh
Simple Backup Bash Shell Script
#!/bin/bash tar -czf my_tarfile.tar.gz /home/
Output:
linuxbox:~$./my_backup.sh tar: Removing leading `/' from member names linuxbox:~$ls my_tarfile.tar.gz linuxbox:~$
Variables
In this example we declared a simple bash variable and print it on the screen (stdout) with echo command.
#!/bin/bash STRING="My First Example" echo $STRING
Backup and Variables working together
#!/bin/bash OF=my_backup_$(date +%Y%m%d).tar.gz tar -czf $OF /home/mydirectory
Output:
linuxbox:~$./my_backup.sh linuxbox:~$tar: Removing leading `/' from member names linuxbox:~$ls -l linuxbox:~$my_backup_20120510.tar.gz
Backup and Variables working together
#!/bin/bash
#Define bash global variable
#This variable is global and can be used anywhere in this bash script
VAR="global variable"
function bash {
#Define bash local variable
#This variable is local to bash function only
local VAR="local variable"
echo $VAR
}
echo $VAR
bash
#Note the bash global variable did not change
#"local" is bash reserved word
echo $VAR
Output:
linuxbox:~$./variable.sh global variable local variable global variable linuxbox:~$
Passing Arguments to the Bash Script
#!/bin/bash
#Use predefined variables to access passed arguments
#echo arguments to the shell
echo $1 $2 $3 ' -> echo $1 $2 $3'
#We can also store arguments form bash command line in special array
args=("$@")
#echo arguments to the shell
echo ${args[0]} ${args[1]} ${args[2]} ' -> args=("$@"); echo ${args[0]} ${args[1]} ${args[2]}'
#use $@ to print out all arguments at once
echo $@ ' -> echo $@'
#use $# variable to print out
#number of arguments passed to the bash script
echo Number of arguments passed: $# ' -> echo Number of arguments passed: $#'
Output:
linuxbox:~$./arguments2.sh This is an example
This is an -> echo $1 $2 $3
This is an -> args=("$@"); echo ${args[0]} echo ${args[1]} ${args[2]}
This is an -> echo $@
Number of arguments passed: 4 -> echo Number of arguments passed: $#
Execute Shell Commands with Bash
#!/bin/bash # Use backticks "``" to execute shell command echo `uname -o` #executing bash command without backticks echo uname -o
Reading User Input
#!/bin/bash
echo -e "Hi, please type the word: c"
read word
echo "The word you entered is: $word"
echo -e "Can you please enter two words? "
read word1 word2
echo "Here is your input: $word1 $word2"
echo -e "How do you feel about bash scripting? "
#Read command now stores a reply into the default build-in variable $REPLY
read
echo "You said $REPLY, I'm glad to hear that! "
echo -e "What are your favorite colours ? "
# -a makes read command to read into an array
read -a colours
echo "My favorite colours are also ${colours[0]}, ${colours[1]} and ${colours[2]}:-)"
Output:
linuxbox:~$ ./readme.sh Hi, please type the word: Hello the word you entered is: Hello Can you please enter two word? Hello Customers Here is your input: Hello Customers How do you feel about bash scripting? Very Good You said Very Good, I'm glad to hear that! What are your favorite colours? Blue Orange Red My favorite colours are also Blue, Orange and Red:- linuxbox:~$
Bash Trap Command
#!/bin/bash
#bash trap command
trap bashtrap INT
#bash clear screen command
clear;
#bash trap function is executed when CTRL-C is pressed:
#bash prints message => Executing bash trap subrutine !
bashtrap()
{
echo "CTRL+C Detected !...executing bash trap !"
}
# for loop from 1/10 to 10/10
for a in `seq 1 10`; do
echo "$a/10 to Exit."
sleep 1;
done
echo "Exit Bash Trap Example!!!"
Output:
linuxbox:~$ 1/10 to Exit. 2/10 to Exit. 3/10 to Exit. CTRL+C Detected !... executing bash trap ! 4/10 to Exit. 5/10 to Exit. 6/10 to Exit. 7/10 to Exit. 8/10 to Exit. CTRL+C Detected !... executing bash trap ! 9/10 to Exit. 10/10 to Exit. Exit Bash Trap Example!!! linuxbox:~$
Declare Simple Bash Array
#!/bin/bash
#Declare array with 6 elements
ARRAY=( 'One' 'Two' 'Three' 'Four' 'Five' 'Six' )
# get number of elements in the array
ELEMENTS=${#ARRAY[@]}
#echo each element in array
#for loop
for (( i=0;i<$ELEMENTS;i++));do
echo ${ARRAY[${i}]}
done
Output:
linuxbox:~$./array.sh One Two Three Four Five Six linuxbox:~$
Read File Into Bash Array
#!/bin/bash
#Declare array
declare -a ARRAY
# Link file descriptor 10 with stdin
exec 10<&0
let count=0
while read LINE; do
ARRAY[$count]=$LINE
((count++))
done
echo Number of elements: ${#ARRAY[@]}
#echo array's content
echo ${ARRAY[@]}
#restore stdin from file descriptor 10
#and close file descriptor 10
exec 0<&10 10<&-
Bash Script Execution with an Output:
linuxbox:~$ One Two Three Four Five Six linuxbox:~$./arrays1.sh bash1.txt Number of elements: 6 Bash Scripting Number of Items linuxbox:~$
Related Articles