SlideShare a Scribd company logo
1 of 69
CSCI 330
THE UNIX SYSTEM
Bash Programming
BASIC SHELL PROGRAMMING
 A script is a file that contains shell commands
 data structure: variables
 control structure: sequence, decision, loop
 Shebang line for bash shell script:
#! /bin/bash
#! /bin/sh
 to run:
 make executable: % chmod +x script
 invoke via: % ./script
2
CSCI330-TheUnixSystem
BASH SHELL PROGRAMMING
 Input
 prompting user
 command line arguments
 Decision:
 if-then-else
 case
 Repetition
 do-while, repeat-until
 for
 select
 Functions
 Traps 3
CSCI330-TheUnixSystem
USER INPUT
 shell allows to prompt for user input
Syntax:
read varname [more vars]
 or
read –p "prompt" varname [more vars]
 words entered by user are assigned to
varname and “more vars”
 last variable gets rest of input line 4
CSCI330-TheUnixSystem
USER INPUT EXAMPLE
#! /bin/sh
read -p "enter your name: " first last
echo "First name: $first"
echo "Last name: $last"
5
CSCI330-TheUnixSystem
SPECIAL SHELL VARIABLES
6
CSCI330-TheUnixSystem
Parameter Meaning
$0 Name of the current shell script
$1-$9 Positional parameters 1 through 9
$# The number of positional parameters
$* All positional parameters, “$*” is one string
$@ All positional parameters, “$@” is a set of strings
$? Return status of most recently executed command
$$ Process id of current process
EXAMPLES: COMMAND LINE
ARGUMENTS
% set tim bill ann fred
$1 $2 $3 $4
% echo $*
tim bill ann fred
% echo $#
4
% echo $1
tim
% echo $3 $4
ann fred 7
CSCI330-TheUnixSystem
The ‘set’
command can
be used to
assign values to
positional
parameters
BASH CONTROL STRUCTURES
 if-then-else
 case
 loops
 for
 while
 until
 select
8
CSCI330-TheUnixSystem
IF STATEMENT
if command
then
statements
fi
 statements are executed only if command
succeeds, i.e. has return status “0”
9
CSCI330-TheUnixSystem
TEST COMMAND
Syntax:
test expression
[ expression ]
 evaluates ‘expression’ and returns true or false
Example:
if test –w "$1"
then
echo "file $1 is write-able"
fi 10
CSCI330-TheUnixSystem
THE SIMPLE IF STATEMENT
if [ condition ]; then
statements
fi
 executes the statements only if condition is
true
11
CSCI330-TheUnixSystem
THE IF-THEN-ELSE STATEMENT
if [ condition ]; then
statements-1
else
statements-2
fi
 executes statements-1 if condition is true
 executes statements-2 if condition is false
12
CSCI330-TheUnixSystem
THE IF…STATEMENT
if [ condition ]; then
statements
elif [ condition ]; then
statement
else
statements
fi
 The word elif stands for “else if”
 It is part of the if statement and cannot be used
by itself
13
CSCI330-TheUnixSystem
RELATIONAL OPERATORS
Meaning Numeric String
Greater than -gt
Greater than or equal -ge
Less than -lt
Less than or equal -le
Equal -eg = or ==
Not equal -ne !=
str1 is less than str2 str1 < str2
str1 is greater str2 str1 > str2
String length is greater than zero -n str
String length is zero -z str
CSCI330-TheUnixSystem
14
COMPOUND LOGICAL EXPRESSIONS
! not
&& and
|| or
15
CSCI330-TheUnixSystem
and, or
must be enclosed within
[[ ]]
EXAMPLE: USING THE ! OPERATOR
#!/bin/bash
read -p "Enter years of work: " Years
if [ ! "$Years" -lt 20 ]; then
echo "You can retire now."
else
echo "You need 20+ years to retire"
fi
16
CSCI330-TheUnixSystem
EXAMPLE: USING THE &&
OPERATOR
#!/bin/bash
Bonus=500
read -p "Enter Status: " Status
read -p "Enter Shift: " Shift
if [[ "$Status" = "H" && "$Shift" = 3 ]]
then
echo "shift $Shift gets $$Bonus bonus"
else
echo "only hourly workers in"
echo "shift 3 get a bonus"
fi 17
CSCI330-TheUnixSystem
EXAMPLE: USING THE ||
OPERATOR
#!/bin/bash
read -p "Enter calls handled:" CHandle
read -p "Enter calls closed: " CClose
if [[ "$CHandle" -gt 150 || "$CClose" -gt 50 ]]
then
echo "You are entitled to a bonus"
else
echo "You get a bonus if the calls"
echo "handled exceeds 150 or"
echo "calls closed exceeds 50"
fi 18
CSCI330-TheUnixSystem
FILE TESTING
Meaning
-d file True if ‘file’ is a directory
-f file True if ‘file’ is an ord. file
-r file True if ‘file’ is readable
-w file True if ‘file’ is writable
-x file True if ‘file’ is executable
-s file True if length of ‘file’ is nonzero
19
CSCI330-TheUnixSystem
EXAMPLE: FILE TESTING
#!/bin/bash
echo "Enter a filename: "
read filename
if [ ! –r "$filename" ]
then
echo "File is not read-able"
exit 1
fi
20
CSCI330-TheUnixSystem
EXAMPLE: FILE TESTING
#! /bin/bash
if [ $# -lt 1 ]; then
echo "Usage: filetest filename"
exit 1
fi
if [[ ! -f "$1" || ! -r "$1" || ! -w "$1" ]]
then
echo "File $1 is not accessible"
exit 1
fi
21
CSCI330-TheUnixSystem
EXAMPLE: IF… STATEMENT
# The following THREE if-conditions produce the same result
* DOUBLE SQUARE BRACKETS
read -p "Do you want to continue?" reply
if [[ $reply = "y" ]]; then
echo "You entered " $reply
fi
* SINGLE SQUARE BRACKETS
read -p "Do you want to continue?" reply
if [ $reply = "y" ]; then
echo "You entered " $reply
fi
* "TEST" COMMAND
read -p "Do you want to continue?" reply
if test $reply = "y"; then
echo "You entered " $reply
fi
22
CSCI330-TheUnixSystem
EXAMPLE: IF..ELIF... STATEMENT
#!/bin/bash
read -p "Enter Income Amount: " Income
read -p "Enter Expenses Amount: " Expense
let Net=$Income-$Expense
if [ "$Net" -eq "0" ]; then
echo "Income and Expenses are equal -
breakeven."
elif [ "$Net" -gt "0" ]; then
echo "Profit of: " $Net
else
echo "Loss of: " $Net
fi
23
CSCI330-TheUnixSystem
THE CASE STATEMENT
 use the case statement for a decision that is
based on multiple choices
Syntax:
case word in
pattern1) command-list1
;;
pattern2) command-list2
;;
patternN) command-listN
;;
esac
24
CSCI330-TheUnixSystem
CASE PATTERN
 checked against word for match
 may also contain:
*
?
[ … ]
[:class:]
 multiple patterns can be listed via:
|
25
CSCI330-TheUnixSystem
EXAMPLE 1: THE CASE STATEMENT
#!/bin/bash
echo "Enter Y to see all files including hidden files"
echo "Enter N to see all non-hidden files"
echo "Enter q to quit"
read -p "Enter your choice: " reply
case $reply in
Y|YES) echo "Displaying all (really…) files"
ls -a ;;
N|NO) echo "Display all non-hidden files..."
ls ;;
Q) exit 0 ;;
*) echo "Invalid choice!"; exit 1 ;;
esac
26
CSCI330-TheUnixSystem
EXAMPLE 2: THE CASE STATEMENT
#!/bin/bash
ChildRate=3
AdultRate=10
SeniorRate=7
read -p "Enter your age: " age
case $age in
[1-9]|[1][0-2]) # child, if age 12 and younger
echo "your rate is" '$'"$ChildRate.00" ;;
# adult, if age is between 13 and 59 inclusive
[1][3-9]|[2-5][0-9])
echo "your rate is" '$'"$AdultRate.00" ;;
[6-9][0-9]) # senior, if age is 60+
echo "your rate is" '$'"$SeniorRate.00" ;;
esac 27
CSCI330-TheUnixSystem
BASH PROGRAMMING: SO FAR
 Data structure
 Variables
 Numeric variables
 Arrays
 User input
 Control structures
 if-then-else
 case
28
CSCI330-TheUnixSystem
BASH PROGRAMMING: STILL TO
COME
 Control structures
 Repetition
 do-while, repeat-until
 for
 select
 Functions
 Trapping signals
29
CSCI330-TheUnixSystem
REPETITION CONSTRUCTS
30
CSCI330-TheUnixSystem
THE WHILE LOOP
 Purpose:
To execute commands in “command-list” as long
as “expression” evaluates to true
Syntax:
while [ expression ]
do
command-list
done
31
CSCI330-TheUnixSystem
EXAMPLE: USING THE WHILE LOOP
#!/bin/bash
COUNTER=0
while [ $COUNTER -lt 10 ]
do
echo The counter is $COUNTER
let COUNTER=$COUNTER+1
done
32
CSCI330-TheUnixSystem
EXAMPLE: USING THE WHILE LOOP
#!/bin/bash
Cont="Y"
while [ $Cont = "Y" ]; do
ps -A
read -p "want to continue? (Y/N)" reply
Cont=`echo $reply | tr [:lower:] [:upper:]`
done
echo "done"
33
CSCI330-TheUnixSystem
EXAMPLE: USING THE WHILE LOOP
#!/bin/bash
# copies files from home- into the webserver- directory
# A new directory is created every hour
PICSDIR=/home/carol/pics
WEBDIR=/var/www/carol/webcam
while true; do
DATE=`date +%Y%m%d`
HOUR=`date +%H`
mkdir $WEBDIR/"$DATE"
while [ $HOUR -ne "00" ]; do
DESTDIR=$WEBDIR/"$DATE"/"$HOUR"
mkdir "$DESTDIR"
mv $PICSDIR/*.jpg "$DESTDIR"/
sleep 3600
HOUR=`date +%H`
done
done
34
CSCI330-TheUnixSystem
THE UNTIL LOOP
 Purpose:
To execute commands in “command-list” as long
as “expression” evaluates to false
Syntax:
until [ expression ]
do
command-list
done
35
CSCI330-TheUnixSystem
EXAMPLE: USING THE UNTIL LOOP
#!/bin/bash
COUNTER=20
until [ $COUNTER -lt 10 ]
do
echo $COUNTER
let COUNTER-=1
done
36
CSCI330-TheUnixSystem
EXAMPLE: USING THE UNTIL LOOP
#!/bin/bash
Stop="N"
until [ $Stop = "Y" ]; do
ps -A
read -p "want to stop? (Y/N)" reply
Stop=`echo $reply | tr [:lower:] [:upper:]`
done
echo "done"
37
CSCI330-TheUnixSystem
THE FOR LOOP
 Purpose:
To execute commands as many times as the
number of words in the “argument-list”
Syntax:
for variable in argument-list
do
commands
done
38
CSCI330-TheUnixSystem
EXAMPLE 1: THE FOR LOOP
#!/bin/bash
for i in 7 9 2 3 4 5
do
echo $i
done
39
CSCI330-TheUnixSystem
EXAMPLE 2: USING THE FOR LOOP
#!/bin/bash
# compute the average weekly temperature
for num in 1 2 3 4 5 6 7
do
read -p "Enter temp for day $num: " Temp
let TempTotal=$TempTotal+$Temp
done
let AvgTemp=$TempTotal/7
echo "Average temperature: " $AvgTemp 40
CSCI330-TheUnixSystem
LOOPING OVER ARGUMENTS
 simplest form will iterate over all command line
arguments:
#! /bin/bash
for parm
do
echo $parm
done
41
CSCI330-TheUnixSystem
SELECT COMMAND
 Constructs simple menu from word list
 Allows user to enter a number instead of a word
 User enters sequence number corresponding to
the word
Syntax:
select WORD in LIST
do
RESPECTIVE-COMMANDS
done
 Loops until end of input, i.e. ^d (or ^c)
42
CSCI330-TheUnixSystem
SELECT EXAMPLE
#! /bin/bash
select var in alpha beta gamma
do
echo $var
done
 Prints:
43
CSCI330-TheUnixSystem
1) alpha
2) beta
3) gamma
#? 2
beta
#? 4
#? 1
alpha
SELECT DETAIL
 PS3 is select sub-prompt
 $REPLY is user input (the number)
#! /bin/bash
PS3="select entry or ^D: "
select var in alpha beta
do
echo "$REPLY = $var"
done
44
CSCI330-TheUnixSystem
Output:
select ...
1) alpha
2) beta
? 2
2 = beta
? 1
1 = alpha
SELECT EXAMPLE
#!/bin/bash
echo "script to make files private"
echo "Select file to protect:"
select FILENAME in *
do
echo "You picked $FILENAME ($REPLY)"
chmod go-rwx "$FILENAME"
echo "it is now private"
done 45
CSCI330-TheUnixSystem
BREAK AND CONTINUE
 Interrupt for, while or until loop
 The break statement
 transfer control to the statement AFTER the done
statement
 terminate execution of the loop
 The continue statement
 transfer control to the statement TO the done
statement
 skip the test statements for the current iteration
 continues execution of the loop
46
CSCI330-TheUnixSystem
THE BREAK COMMAND
while [ condition ]
do
cmd-1
break
cmd-n
done
echo "done"
47
CSCI330-TheUnixSystem
This iteration is over
and there are no
more iterations
THE CONTINUE COMMAND
while [ condition ]
do
cmd-1
continue
cmd-n
done
echo "done"
48
CSCI330-TheUnixSystem
This iteration is
over; do the next
iteration
EXAMPLE:
for index in 1 2 3 4 5 6 7 8 9 10
do
if [ $index –le 3 ]; then
echo "continue"
continue
fi
echo $index
if [ $index –ge 8 ]; then
echo "break"
break
fi
done 49
CSCI330-TheUnixSystem
DONE !
BASH SHELL PROGRAMMING
 Sequence
 Decision:
 if-then-else
 case
 Repetition
 do-while, repeat-until
 for
 select
 Functions
 Traps
50
CSCI330-TheUnixSystem
still to come
SHELL FUNCTIONS
 A shell function is similar to a shell script
 stores a series of commands for execution later
 shell stores functions in memory
 shell executes a shell function in the same shell that
called it
 Where to define
 In .profile
 In your script
 Or on the command line
 Remove a function
 Use unset built-in
51
CSCI330-TheUnixSystem
SHELL FUNCTIONS
 must be defined before they can be referenced
 usually placed at the beginning of the script
Syntax:
function-name () {
statements
}
52
CSCI330-TheUnixSystem
EXAMPLE: FUNCTION
#!/bin/bash
funky () {
# This is a simple function
echo "This is a funky function."
echo "Now exiting funky function."
}
# declaration must precede call:
funky 53
CSCI330-TheUnixSystem
EXAMPLE: FUNCTION
#!/bin/bash
fun () { # A somewhat more complex function.
JUST_A_SECOND=1
let i=0
REPEATS=30
echo "And now the fun really begins."
while [ $i -lt $REPEATS ]
do
echo "-------FUNCTIONS are fun-------->"
sleep $JUST_A_SECOND
let i+=1
done
}
fun 54
CSCI330-TheUnixSystem
FUNCTION PARAMETERS
 Need not be declared
 Arguments provided via function call are
accessible inside function as $1, $2, $3, …
$# reflects number of parameters
$0 still contains name of script
(not name of function)
55
CSCI330-TheUnixSystem
EXAMPLE: FUNCTION WITH
PARAMETER
#! /bin/sh
testfile() {
if [ $# -gt 0 ]; then
if [[ -f $1 && -r $1 ]]; then
echo $1 is a readable file
else
echo $1 is not a readable file
fi
fi
}
testfile .
testfile funtest 56
CSCI330-TheUnixSystem
EXAMPLE: FUNCTION WITH
PARAMETERS
#! /bin/bash
checkfile() {
for file
do
if [ -f "$file" ]; then
echo "$file is a file"
else
if [ -d "$file" ]; then
echo "$file is a directory"
fi
fi
done
}
checkfile . funtest
57
CSCI330-TheUnixSystem
LOCAL VARIABLES IN FUNCTIONS
 Variables defined within functions are global,
i.e. their values are known throughout the entire
shell program
 keyword “local” inside a function definition
makes referenced variables “local” to that
function
58
CSCI330-TheUnixSystem
EXAMPLE: FUNCTION
#! /bin/bash
global="pretty good variable"
foo () {
local inside="not so good variable"
echo $global
echo $inside
global="better variable"
}
echo $global
foo
echo $global
echo $inside
59
CSCI330-TheUnixSystem
HANDLING SIGNALS
 Unix allows you to send a signal to any process
 -1 = hangup kill -HUP 1234
 -2 = interrupt with ^C kill -2 1235
 no argument = terminate kill 1235
 -9 = kill kill -9 1236
 -9 cannot be blocked
 list your processes with
ps -u userid
60
CSCI330-TheUnixSystem
SIGNALS ON LINUX
% kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
 ^C is 2 - SIGINT 61
CSCI330-TheUnixSystem
HANDLING SIGNALS
 Default action for most signals is to end process
 term: signal handler
 Bash allows to install custom signal handler
Syntax:
trap 'handler commands' signals
Example:
trap 'echo do not hangup' 1 2
62
CSCI330-TheUnixSystem
EXAMPLE: TRAP HANGUP
#! /bin/bash
# kill -1 won’t kill this process
# kill -2 will
trap 'echo dont hang up' 1
while true
do
echo "try to hang up"
sleep 1
done
63
CSCI330-TheUnixSystem
EXAMPLE: TRAP MULTIPLE
SIGNALS
#! /bin/sh
# plain kill or kill -9 will kill this
trap 'echo 1' 1
trap 'echo 2' 2
while true; do
echo -n .
sleep 1
done
64
CSCI330-TheUnixSystem
EXAMPLE: REMOVING TEMP FILES
#! /bin/bash
trap 'cleanup; exit' 2
cleanup () {
/bin/rm -f /tmp/tempfile.$$.?
}
for i in 1 2 3 4 5 6 7 8
do
echo "$i.iteration"
touch /tmp/tempfile.$$.$i
sleep 1
done
cleanup
65
CSCI330-TheUnixSystem
RESTORING DEFAULT HANDLERS
 trap without a command list will remove a signal
handler
 Use this to run a signal handler once only
#! /bin/sh
trap 'justonce' 2
justonce() {
echo "not yet"
trap 2 # now reset it
}
while true; do
echo -n "."
sleep 1
done
66
CSCI330-TheUnixSystem
DEBUG SHELL PROGRAMS
 Debugging is troubleshooting errors that may
occur during the execution of a program/script
 The following two commands can help you debug
a bash shell script:
 echo
use explicit output statements to trace execution
 set
67
CSCI330-TheUnixSystem
DEBUGGING USING “SET”
 The “set” command is a shell built-in command
 has options to allow flow of execution
–v option prints each line as it is read
–x option displays the command and its arguments
–n checks for syntax errors
 options can turned on or off
 To turn on the option: set -xv
 To turn off the options: set +xv
 Options can also be set via she-bang line
#! /bin/bash -xv 68
CSCI330-TheUnixSystem
DONE !
SUMMARY: BASH SHELL
PROGRAMMING
 Sequence
 Decision:
 if-then-else
 case
 Repetition
 do-while, repeat-until
 for
 select
 Functions
 Traps
69
CSCI330-TheUnixSystem

More Related Content

What's hot (20)

Linux basic commands
Linux basic commandsLinux basic commands
Linux basic commands
 
Shell scripting
Shell scriptingShell scripting
Shell scripting
 
Linux Programming
Linux ProgrammingLinux Programming
Linux Programming
 
C++ oop
C++ oopC++ oop
C++ oop
 
Introduction to Python programming
Introduction to Python programmingIntroduction to Python programming
Introduction to Python programming
 
Shell scripting
Shell scriptingShell scripting
Shell scripting
 
Linux Instrumentation
Linux InstrumentationLinux Instrumentation
Linux Instrumentation
 
Complete Guide for Linux shell programming
Complete Guide for Linux shell programmingComplete Guide for Linux shell programming
Complete Guide for Linux shell programming
 
Users and groups
Users and groupsUsers and groups
Users and groups
 
Basics of shell programming
Basics of shell programmingBasics of shell programming
Basics of shell programming
 
Linux file system
Linux file systemLinux file system
Linux file system
 
C++ Memory Management
C++ Memory ManagementC++ Memory Management
C++ Memory Management
 
Linux commands
Linux commandsLinux commands
Linux commands
 
Basic Linux Internals
Basic Linux InternalsBasic Linux Internals
Basic Linux Internals
 
Course 102: Lecture 14: Users and Permissions
Course 102: Lecture 14: Users and PermissionsCourse 102: Lecture 14: Users and Permissions
Course 102: Lecture 14: Users and Permissions
 
Cron
CronCron
Cron
 
Unix - Filters/Editors
Unix - Filters/EditorsUnix - Filters/Editors
Unix - Filters/Editors
 
Variables & Data Types In Python | Edureka
Variables & Data Types In Python | EdurekaVariables & Data Types In Python | Edureka
Variables & Data Types In Python | Edureka
 
4 internet programming
4 internet programming4 internet programming
4 internet programming
 
Linux basic commands
Linux basic commandsLinux basic commands
Linux basic commands
 

Similar to Bash Programming

50 most frequently used unix linux commands (with examples)
50 most frequently used unix   linux commands (with examples)50 most frequently used unix   linux commands (with examples)
50 most frequently used unix linux commands (with examples)Rodrigo Maia
 
Linux Shell Scripting
Linux Shell ScriptingLinux Shell Scripting
Linux Shell ScriptingRaghu nath
 
Raspberry pi Part 25
Raspberry pi Part 25Raspberry pi Part 25
Raspberry pi Part 25Techvilla
 
ShellAdvanced aaäaaaaaaaaaaaaaaaaaaaaaaaaaaa
ShellAdvanced aaäaaaaaaaaaaaaaaaaaaaaaaaaaaaShellAdvanced aaäaaaaaaaaaaaaaaaaaaaaaaaaaaa
ShellAdvanced aaäaaaaaaaaaaaaaaaaaaaaaaaaaaaewout2
 
Chapter 3 Using Unix Commands
Chapter 3 Using Unix CommandsChapter 3 Using Unix Commands
Chapter 3 Using Unix CommandsMeenalJabde
 
34-shell-programming.ppt
34-shell-programming.ppt34-shell-programming.ppt
34-shell-programming.pptKiranMantri
 
Best training-in-mumbai-shell scripting
Best training-in-mumbai-shell scriptingBest training-in-mumbai-shell scripting
Best training-in-mumbai-shell scriptingvibrantuser
 
Unix OS & Commands
Unix OS & CommandsUnix OS & Commands
Unix OS & CommandsMohit Belwal
 
Basic linux commands
Basic linux commands Basic linux commands
Basic linux commands Raghav Arora
 
Workshop on command line tools - day 1
Workshop on command line tools - day 1Workshop on command line tools - day 1
Workshop on command line tools - day 1Leandro Lima
 
Best training-in-mumbai-shell scripting
Best training-in-mumbai-shell scriptingBest training-in-mumbai-shell scripting
Best training-in-mumbai-shell scriptingvibrantuser
 

Similar to Bash Programming (20)

What is a shell script
What is a shell scriptWhat is a shell script
What is a shell script
 
50 most frequently used unix
50 most frequently used unix50 most frequently used unix
50 most frequently used unix
 
50 most frequently used unix
50 most frequently used unix50 most frequently used unix
50 most frequently used unix
 
50 Most Frequently Used UNIX Linux Commands -hmftj
50 Most Frequently Used UNIX  Linux Commands -hmftj50 Most Frequently Used UNIX  Linux Commands -hmftj
50 Most Frequently Used UNIX Linux Commands -hmftj
 
50 most frequently used unix linux commands (with examples)
50 most frequently used unix   linux commands (with examples)50 most frequently used unix   linux commands (with examples)
50 most frequently used unix linux commands (with examples)
 
Examples -partII
Examples -partIIExamples -partII
Examples -partII
 
Linux Shell Scripting
Linux Shell ScriptingLinux Shell Scripting
Linux Shell Scripting
 
Raspberry pi Part 25
Raspberry pi Part 25Raspberry pi Part 25
Raspberry pi Part 25
 
ShellAdvanced aaäaaaaaaaaaaaaaaaaaaaaaaaaaaa
ShellAdvanced aaäaaaaaaaaaaaaaaaaaaaaaaaaaaaShellAdvanced aaäaaaaaaaaaaaaaaaaaaaaaaaaaaa
ShellAdvanced aaäaaaaaaaaaaaaaaaaaaaaaaaaaaa
 
Chapter 3 Using Unix Commands
Chapter 3 Using Unix CommandsChapter 3 Using Unix Commands
Chapter 3 Using Unix Commands
 
34-shell-programming.ppt
34-shell-programming.ppt34-shell-programming.ppt
34-shell-programming.ppt
 
Best training-in-mumbai-shell scripting
Best training-in-mumbai-shell scriptingBest training-in-mumbai-shell scripting
Best training-in-mumbai-shell scripting
 
Unix OS & Commands
Unix OS & CommandsUnix OS & Commands
Unix OS & Commands
 
Basic linux commands
Basic linux commands Basic linux commands
Basic linux commands
 
Workshop on command line tools - day 1
Workshop on command line tools - day 1Workshop on command line tools - day 1
Workshop on command line tools - day 1
 
Linux com
Linux comLinux com
Linux com
 
Unix
UnixUnix
Unix
 
Best training-in-mumbai-shell scripting
Best training-in-mumbai-shell scriptingBest training-in-mumbai-shell scripting
Best training-in-mumbai-shell scripting
 
Linux
LinuxLinux
Linux
 
Linux
LinuxLinux
Linux
 

Recently uploaded

Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 

Recently uploaded (20)

Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 

Bash Programming

  • 1. CSCI 330 THE UNIX SYSTEM Bash Programming
  • 2. BASIC SHELL PROGRAMMING  A script is a file that contains shell commands  data structure: variables  control structure: sequence, decision, loop  Shebang line for bash shell script: #! /bin/bash #! /bin/sh  to run:  make executable: % chmod +x script  invoke via: % ./script 2 CSCI330-TheUnixSystem
  • 3. BASH SHELL PROGRAMMING  Input  prompting user  command line arguments  Decision:  if-then-else  case  Repetition  do-while, repeat-until  for  select  Functions  Traps 3 CSCI330-TheUnixSystem
  • 4. USER INPUT  shell allows to prompt for user input Syntax: read varname [more vars]  or read –p "prompt" varname [more vars]  words entered by user are assigned to varname and “more vars”  last variable gets rest of input line 4 CSCI330-TheUnixSystem
  • 5. USER INPUT EXAMPLE #! /bin/sh read -p "enter your name: " first last echo "First name: $first" echo "Last name: $last" 5 CSCI330-TheUnixSystem
  • 6. SPECIAL SHELL VARIABLES 6 CSCI330-TheUnixSystem Parameter Meaning $0 Name of the current shell script $1-$9 Positional parameters 1 through 9 $# The number of positional parameters $* All positional parameters, “$*” is one string $@ All positional parameters, “$@” is a set of strings $? Return status of most recently executed command $$ Process id of current process
  • 7. EXAMPLES: COMMAND LINE ARGUMENTS % set tim bill ann fred $1 $2 $3 $4 % echo $* tim bill ann fred % echo $# 4 % echo $1 tim % echo $3 $4 ann fred 7 CSCI330-TheUnixSystem The ‘set’ command can be used to assign values to positional parameters
  • 8. BASH CONTROL STRUCTURES  if-then-else  case  loops  for  while  until  select 8 CSCI330-TheUnixSystem
  • 9. IF STATEMENT if command then statements fi  statements are executed only if command succeeds, i.e. has return status “0” 9 CSCI330-TheUnixSystem
  • 10. TEST COMMAND Syntax: test expression [ expression ]  evaluates ‘expression’ and returns true or false Example: if test –w "$1" then echo "file $1 is write-able" fi 10 CSCI330-TheUnixSystem
  • 11. THE SIMPLE IF STATEMENT if [ condition ]; then statements fi  executes the statements only if condition is true 11 CSCI330-TheUnixSystem
  • 12. THE IF-THEN-ELSE STATEMENT if [ condition ]; then statements-1 else statements-2 fi  executes statements-1 if condition is true  executes statements-2 if condition is false 12 CSCI330-TheUnixSystem
  • 13. THE IF…STATEMENT if [ condition ]; then statements elif [ condition ]; then statement else statements fi  The word elif stands for “else if”  It is part of the if statement and cannot be used by itself 13 CSCI330-TheUnixSystem
  • 14. RELATIONAL OPERATORS Meaning Numeric String Greater than -gt Greater than or equal -ge Less than -lt Less than or equal -le Equal -eg = or == Not equal -ne != str1 is less than str2 str1 < str2 str1 is greater str2 str1 > str2 String length is greater than zero -n str String length is zero -z str CSCI330-TheUnixSystem 14
  • 15. COMPOUND LOGICAL EXPRESSIONS ! not && and || or 15 CSCI330-TheUnixSystem and, or must be enclosed within [[ ]]
  • 16. EXAMPLE: USING THE ! OPERATOR #!/bin/bash read -p "Enter years of work: " Years if [ ! "$Years" -lt 20 ]; then echo "You can retire now." else echo "You need 20+ years to retire" fi 16 CSCI330-TheUnixSystem
  • 17. EXAMPLE: USING THE && OPERATOR #!/bin/bash Bonus=500 read -p "Enter Status: " Status read -p "Enter Shift: " Shift if [[ "$Status" = "H" && "$Shift" = 3 ]] then echo "shift $Shift gets $$Bonus bonus" else echo "only hourly workers in" echo "shift 3 get a bonus" fi 17 CSCI330-TheUnixSystem
  • 18. EXAMPLE: USING THE || OPERATOR #!/bin/bash read -p "Enter calls handled:" CHandle read -p "Enter calls closed: " CClose if [[ "$CHandle" -gt 150 || "$CClose" -gt 50 ]] then echo "You are entitled to a bonus" else echo "You get a bonus if the calls" echo "handled exceeds 150 or" echo "calls closed exceeds 50" fi 18 CSCI330-TheUnixSystem
  • 19. FILE TESTING Meaning -d file True if ‘file’ is a directory -f file True if ‘file’ is an ord. file -r file True if ‘file’ is readable -w file True if ‘file’ is writable -x file True if ‘file’ is executable -s file True if length of ‘file’ is nonzero 19 CSCI330-TheUnixSystem
  • 20. EXAMPLE: FILE TESTING #!/bin/bash echo "Enter a filename: " read filename if [ ! –r "$filename" ] then echo "File is not read-able" exit 1 fi 20 CSCI330-TheUnixSystem
  • 21. EXAMPLE: FILE TESTING #! /bin/bash if [ $# -lt 1 ]; then echo "Usage: filetest filename" exit 1 fi if [[ ! -f "$1" || ! -r "$1" || ! -w "$1" ]] then echo "File $1 is not accessible" exit 1 fi 21 CSCI330-TheUnixSystem
  • 22. EXAMPLE: IF… STATEMENT # The following THREE if-conditions produce the same result * DOUBLE SQUARE BRACKETS read -p "Do you want to continue?" reply if [[ $reply = "y" ]]; then echo "You entered " $reply fi * SINGLE SQUARE BRACKETS read -p "Do you want to continue?" reply if [ $reply = "y" ]; then echo "You entered " $reply fi * "TEST" COMMAND read -p "Do you want to continue?" reply if test $reply = "y"; then echo "You entered " $reply fi 22 CSCI330-TheUnixSystem
  • 23. EXAMPLE: IF..ELIF... STATEMENT #!/bin/bash read -p "Enter Income Amount: " Income read -p "Enter Expenses Amount: " Expense let Net=$Income-$Expense if [ "$Net" -eq "0" ]; then echo "Income and Expenses are equal - breakeven." elif [ "$Net" -gt "0" ]; then echo "Profit of: " $Net else echo "Loss of: " $Net fi 23 CSCI330-TheUnixSystem
  • 24. THE CASE STATEMENT  use the case statement for a decision that is based on multiple choices Syntax: case word in pattern1) command-list1 ;; pattern2) command-list2 ;; patternN) command-listN ;; esac 24 CSCI330-TheUnixSystem
  • 25. CASE PATTERN  checked against word for match  may also contain: * ? [ … ] [:class:]  multiple patterns can be listed via: | 25 CSCI330-TheUnixSystem
  • 26. EXAMPLE 1: THE CASE STATEMENT #!/bin/bash echo "Enter Y to see all files including hidden files" echo "Enter N to see all non-hidden files" echo "Enter q to quit" read -p "Enter your choice: " reply case $reply in Y|YES) echo "Displaying all (really…) files" ls -a ;; N|NO) echo "Display all non-hidden files..." ls ;; Q) exit 0 ;; *) echo "Invalid choice!"; exit 1 ;; esac 26 CSCI330-TheUnixSystem
  • 27. EXAMPLE 2: THE CASE STATEMENT #!/bin/bash ChildRate=3 AdultRate=10 SeniorRate=7 read -p "Enter your age: " age case $age in [1-9]|[1][0-2]) # child, if age 12 and younger echo "your rate is" '$'"$ChildRate.00" ;; # adult, if age is between 13 and 59 inclusive [1][3-9]|[2-5][0-9]) echo "your rate is" '$'"$AdultRate.00" ;; [6-9][0-9]) # senior, if age is 60+ echo "your rate is" '$'"$SeniorRate.00" ;; esac 27 CSCI330-TheUnixSystem
  • 28. BASH PROGRAMMING: SO FAR  Data structure  Variables  Numeric variables  Arrays  User input  Control structures  if-then-else  case 28 CSCI330-TheUnixSystem
  • 29. BASH PROGRAMMING: STILL TO COME  Control structures  Repetition  do-while, repeat-until  for  select  Functions  Trapping signals 29 CSCI330-TheUnixSystem
  • 31. THE WHILE LOOP  Purpose: To execute commands in “command-list” as long as “expression” evaluates to true Syntax: while [ expression ] do command-list done 31 CSCI330-TheUnixSystem
  • 32. EXAMPLE: USING THE WHILE LOOP #!/bin/bash COUNTER=0 while [ $COUNTER -lt 10 ] do echo The counter is $COUNTER let COUNTER=$COUNTER+1 done 32 CSCI330-TheUnixSystem
  • 33. EXAMPLE: USING THE WHILE LOOP #!/bin/bash Cont="Y" while [ $Cont = "Y" ]; do ps -A read -p "want to continue? (Y/N)" reply Cont=`echo $reply | tr [:lower:] [:upper:]` done echo "done" 33 CSCI330-TheUnixSystem
  • 34. EXAMPLE: USING THE WHILE LOOP #!/bin/bash # copies files from home- into the webserver- directory # A new directory is created every hour PICSDIR=/home/carol/pics WEBDIR=/var/www/carol/webcam while true; do DATE=`date +%Y%m%d` HOUR=`date +%H` mkdir $WEBDIR/"$DATE" while [ $HOUR -ne "00" ]; do DESTDIR=$WEBDIR/"$DATE"/"$HOUR" mkdir "$DESTDIR" mv $PICSDIR/*.jpg "$DESTDIR"/ sleep 3600 HOUR=`date +%H` done done 34 CSCI330-TheUnixSystem
  • 35. THE UNTIL LOOP  Purpose: To execute commands in “command-list” as long as “expression” evaluates to false Syntax: until [ expression ] do command-list done 35 CSCI330-TheUnixSystem
  • 36. EXAMPLE: USING THE UNTIL LOOP #!/bin/bash COUNTER=20 until [ $COUNTER -lt 10 ] do echo $COUNTER let COUNTER-=1 done 36 CSCI330-TheUnixSystem
  • 37. EXAMPLE: USING THE UNTIL LOOP #!/bin/bash Stop="N" until [ $Stop = "Y" ]; do ps -A read -p "want to stop? (Y/N)" reply Stop=`echo $reply | tr [:lower:] [:upper:]` done echo "done" 37 CSCI330-TheUnixSystem
  • 38. THE FOR LOOP  Purpose: To execute commands as many times as the number of words in the “argument-list” Syntax: for variable in argument-list do commands done 38 CSCI330-TheUnixSystem
  • 39. EXAMPLE 1: THE FOR LOOP #!/bin/bash for i in 7 9 2 3 4 5 do echo $i done 39 CSCI330-TheUnixSystem
  • 40. EXAMPLE 2: USING THE FOR LOOP #!/bin/bash # compute the average weekly temperature for num in 1 2 3 4 5 6 7 do read -p "Enter temp for day $num: " Temp let TempTotal=$TempTotal+$Temp done let AvgTemp=$TempTotal/7 echo "Average temperature: " $AvgTemp 40 CSCI330-TheUnixSystem
  • 41. LOOPING OVER ARGUMENTS  simplest form will iterate over all command line arguments: #! /bin/bash for parm do echo $parm done 41 CSCI330-TheUnixSystem
  • 42. SELECT COMMAND  Constructs simple menu from word list  Allows user to enter a number instead of a word  User enters sequence number corresponding to the word Syntax: select WORD in LIST do RESPECTIVE-COMMANDS done  Loops until end of input, i.e. ^d (or ^c) 42 CSCI330-TheUnixSystem
  • 43. SELECT EXAMPLE #! /bin/bash select var in alpha beta gamma do echo $var done  Prints: 43 CSCI330-TheUnixSystem 1) alpha 2) beta 3) gamma #? 2 beta #? 4 #? 1 alpha
  • 44. SELECT DETAIL  PS3 is select sub-prompt  $REPLY is user input (the number) #! /bin/bash PS3="select entry or ^D: " select var in alpha beta do echo "$REPLY = $var" done 44 CSCI330-TheUnixSystem Output: select ... 1) alpha 2) beta ? 2 2 = beta ? 1 1 = alpha
  • 45. SELECT EXAMPLE #!/bin/bash echo "script to make files private" echo "Select file to protect:" select FILENAME in * do echo "You picked $FILENAME ($REPLY)" chmod go-rwx "$FILENAME" echo "it is now private" done 45 CSCI330-TheUnixSystem
  • 46. BREAK AND CONTINUE  Interrupt for, while or until loop  The break statement  transfer control to the statement AFTER the done statement  terminate execution of the loop  The continue statement  transfer control to the statement TO the done statement  skip the test statements for the current iteration  continues execution of the loop 46 CSCI330-TheUnixSystem
  • 47. THE BREAK COMMAND while [ condition ] do cmd-1 break cmd-n done echo "done" 47 CSCI330-TheUnixSystem This iteration is over and there are no more iterations
  • 48. THE CONTINUE COMMAND while [ condition ] do cmd-1 continue cmd-n done echo "done" 48 CSCI330-TheUnixSystem This iteration is over; do the next iteration
  • 49. EXAMPLE: for index in 1 2 3 4 5 6 7 8 9 10 do if [ $index –le 3 ]; then echo "continue" continue fi echo $index if [ $index –ge 8 ]; then echo "break" break fi done 49 CSCI330-TheUnixSystem
  • 50. DONE ! BASH SHELL PROGRAMMING  Sequence  Decision:  if-then-else  case  Repetition  do-while, repeat-until  for  select  Functions  Traps 50 CSCI330-TheUnixSystem still to come
  • 51. SHELL FUNCTIONS  A shell function is similar to a shell script  stores a series of commands for execution later  shell stores functions in memory  shell executes a shell function in the same shell that called it  Where to define  In .profile  In your script  Or on the command line  Remove a function  Use unset built-in 51 CSCI330-TheUnixSystem
  • 52. SHELL FUNCTIONS  must be defined before they can be referenced  usually placed at the beginning of the script Syntax: function-name () { statements } 52 CSCI330-TheUnixSystem
  • 53. EXAMPLE: FUNCTION #!/bin/bash funky () { # This is a simple function echo "This is a funky function." echo "Now exiting funky function." } # declaration must precede call: funky 53 CSCI330-TheUnixSystem
  • 54. EXAMPLE: FUNCTION #!/bin/bash fun () { # A somewhat more complex function. JUST_A_SECOND=1 let i=0 REPEATS=30 echo "And now the fun really begins." while [ $i -lt $REPEATS ] do echo "-------FUNCTIONS are fun-------->" sleep $JUST_A_SECOND let i+=1 done } fun 54 CSCI330-TheUnixSystem
  • 55. FUNCTION PARAMETERS  Need not be declared  Arguments provided via function call are accessible inside function as $1, $2, $3, … $# reflects number of parameters $0 still contains name of script (not name of function) 55 CSCI330-TheUnixSystem
  • 56. EXAMPLE: FUNCTION WITH PARAMETER #! /bin/sh testfile() { if [ $# -gt 0 ]; then if [[ -f $1 && -r $1 ]]; then echo $1 is a readable file else echo $1 is not a readable file fi fi } testfile . testfile funtest 56 CSCI330-TheUnixSystem
  • 57. EXAMPLE: FUNCTION WITH PARAMETERS #! /bin/bash checkfile() { for file do if [ -f "$file" ]; then echo "$file is a file" else if [ -d "$file" ]; then echo "$file is a directory" fi fi done } checkfile . funtest 57 CSCI330-TheUnixSystem
  • 58. LOCAL VARIABLES IN FUNCTIONS  Variables defined within functions are global, i.e. their values are known throughout the entire shell program  keyword “local” inside a function definition makes referenced variables “local” to that function 58 CSCI330-TheUnixSystem
  • 59. EXAMPLE: FUNCTION #! /bin/bash global="pretty good variable" foo () { local inside="not so good variable" echo $global echo $inside global="better variable" } echo $global foo echo $global echo $inside 59 CSCI330-TheUnixSystem
  • 60. HANDLING SIGNALS  Unix allows you to send a signal to any process  -1 = hangup kill -HUP 1234  -2 = interrupt with ^C kill -2 1235  no argument = terminate kill 1235  -9 = kill kill -9 1236  -9 cannot be blocked  list your processes with ps -u userid 60 CSCI330-TheUnixSystem
  • 61. SIGNALS ON LINUX % kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX  ^C is 2 - SIGINT 61 CSCI330-TheUnixSystem
  • 62. HANDLING SIGNALS  Default action for most signals is to end process  term: signal handler  Bash allows to install custom signal handler Syntax: trap 'handler commands' signals Example: trap 'echo do not hangup' 1 2 62 CSCI330-TheUnixSystem
  • 63. EXAMPLE: TRAP HANGUP #! /bin/bash # kill -1 won’t kill this process # kill -2 will trap 'echo dont hang up' 1 while true do echo "try to hang up" sleep 1 done 63 CSCI330-TheUnixSystem
  • 64. EXAMPLE: TRAP MULTIPLE SIGNALS #! /bin/sh # plain kill or kill -9 will kill this trap 'echo 1' 1 trap 'echo 2' 2 while true; do echo -n . sleep 1 done 64 CSCI330-TheUnixSystem
  • 65. EXAMPLE: REMOVING TEMP FILES #! /bin/bash trap 'cleanup; exit' 2 cleanup () { /bin/rm -f /tmp/tempfile.$$.? } for i in 1 2 3 4 5 6 7 8 do echo "$i.iteration" touch /tmp/tempfile.$$.$i sleep 1 done cleanup 65 CSCI330-TheUnixSystem
  • 66. RESTORING DEFAULT HANDLERS  trap without a command list will remove a signal handler  Use this to run a signal handler once only #! /bin/sh trap 'justonce' 2 justonce() { echo "not yet" trap 2 # now reset it } while true; do echo -n "." sleep 1 done 66 CSCI330-TheUnixSystem
  • 67. DEBUG SHELL PROGRAMS  Debugging is troubleshooting errors that may occur during the execution of a program/script  The following two commands can help you debug a bash shell script:  echo use explicit output statements to trace execution  set 67 CSCI330-TheUnixSystem
  • 68. DEBUGGING USING “SET”  The “set” command is a shell built-in command  has options to allow flow of execution –v option prints each line as it is read –x option displays the command and its arguments –n checks for syntax errors  options can turned on or off  To turn on the option: set -xv  To turn off the options: set +xv  Options can also be set via she-bang line #! /bin/bash -xv 68 CSCI330-TheUnixSystem
  • 69. DONE ! SUMMARY: BASH SHELL PROGRAMMING  Sequence  Decision:  if-then-else  case  Repetition  do-while, repeat-until  for  select  Functions  Traps 69 CSCI330-TheUnixSystem