Intro ShellProgramming
Intro ShellProgramming
Programming
Objectives
• What is a Shell Program
• Common Shells
• Concepts of shell programming
• How shell programs are executed
• Concepts and use of shell variables
• How command line arguments are passed to shell programs
• Concepts of command substitution
• Basic coding principles
• Write and discuss shell scripts
What is a Shell Program?
• After logging onto the system a prompt for input
appears which is generated by a Command String
Interpreter program called the shell. The shell
– interprets the input,
– takes appropriate action, and
– finally prompts for more input.
• The shell can be used either
– interactively ‐ enter commands at the command prompt,
or
– as an interpreter to execute a shell script
• Note: Shell scripts are dynamically interpreted, NOT
compiled.
What is a Shell Script?
• A Text File
• With Instructions
• Executable
Common Shells
• C‐Shell ‐ csh
– Good for interactive systems
– Inferior programmable features
• Bourne Shell ‐ bsh or sh ‐ also restricted shell ‐ bsh
– Sophisticated pattern matching and file name substitution
• Korn Shell
– Backwards compatible with Bourne Shell
– Regular expression substitution
– emacs editing mode
• Born Again Shell (BASH) – default shell on most Linux system
• TENEX C‐Shell ‐ tcsh
– Based on C‐Shell
– Additional ability to use emacs to edit the command line
– Word completion & spelling correction
Shell Concepts
• Shell script: a shell program, consists of shell
commands to be executed by a shell and is stored in
ordinary file
• Shell variable: read/write storage place for users and
programmers to use as a scratch pad for completing
a task
• Control Flow Commands (or statements): allow non
sequential execution of commands in a shell script
and repeated execution of a block of commands
Running a Shell Script
• Ways of running a Bourne/Bash Shell
– Make the script file executable by adding the execute permission to the
existing access permissions for the file
$ chmod u+x script_file
$
– Run the /bin/sh command with the script file as its parameter
$ /bin/sh script_file
$
– Force the current shell to execute a script in the Bourne shell, regardless
of your current shell
#!/bin/sh
• Null command (:)
When the C shell reads : as the first character it returns a Bourne shell
process that executes the commands in the script. The : command
returns true
Read-only Shell Variables
Reading and Writing Shell
Variables
variable1=value1[variable2=value2…variableN=valueN]
Purpose:
Assign values ‘value1,…,valueN’ to ‘variable1,…,
variableN’ respectively –no space allowed before
and after the equals sign
Reading and Writing Shell Variables
$ name=Tom
$ echo $name
Tom
$ name=Tom Hank
bash: Hank: command not found
$ name=”Tom Hank”
$ echo $name
Tom Hank
$ echo “$name sounds familiar”
Tom Hank sounds familiar
$ echo "\"$name sounds familiar\""
"Tom Hank sounds familiar"
$ echo \$name
$name
$ echo ‘$name’
$name
$
Command Substitution
• Command Substitution: When a command is
enclosed in back quotes, the shell executes the
command and substitutes the command (including
back quotes) with the output of the command
• `command`
Purpose: Substitute its output for `command`
Command Substitution
Reading from Standard Input
read variable-list
Purpose Read one line from standard input and assign
words in the line to variables in ‘name‐list’
$vim readdemo
#!/bin/sh
echo "Enter input: \c"
read line
echo "You entered: $line"
echo "Enter another line: \c"
read word1 word2 word3
echo "The first word is: $word1"
echo "The second word is: $word2"
echo "The rest of the line is: $word3"
exit 0
readdemo (Sample Run)
$ ./readdemo
Enter input: Linux rules the networking world
You entered: Linux rules the networking world
Enter another line: Linux rules the networking
world
The first word is: Linux
The second word is: rules
The rest of the line is: the networking world
Passing Arguments to Shell
Scripts
shift[N]
Purpose Shift the command line arguments N positions to the left
set [options] [argument-list]
Purpose Set values of the positional arguments to the arguments
in ‘argument‐list’ when executed without an argument, the set
command displays the names of all shell variables and their current
values
Special Characters for the echo
Command
Passing Arguments to Shell Scripts
$ vim cmdargs_demo
#!/bin/sh
echo “The command name is: $0.”
echo “The number of command line arguments passed as parameters are $#.”
echo “The value of the command line arguments are: $1 $2 $3 $4 $5 $6 $7 $8 $9.”
echo “Another way to display values of all of the arguments: $@.”
echo “Yet another way is: $*.”
exit 0
$ cmdargs_demo a b c d e f g h i
The command name is: cmdargs_demo.
The number of command line arguments passed as parameters are 9.
The value of the command line arguments are: a b c d e f g h i.
Another way to display values of all of the arguments: a b c d e f g h i.
Yet another way is: a b c d e f g h i.
$ cmdargs_demo One Two 3 Four 5 6
The command name is: cmdargs_demo.
The number of command line arguments passed as parameters are 6.
The value of the command line arguments are: One Two 3 Four 5 6 .
Another way to display values of all of the arguments: One Two 3 Four 5 6.
Yet another way is: One Two 3 Four 5 6.
$
Passing Arguments to Shell Scripts
$ vim shift_demo
#!/bin/sh
echo “The program name is $0.”
echo “The arguments are: $@”
echo “The first three arguments are: $1 $2 $3”
shift
echo “The program name is $0.”
echo “The arguments are: $@”
echo “The first three arguments are: $1 $2 $3”
shift 3
echo “The program name is $0.”
echo “The arguments are: $@”
echo “The first three arguments are: $1 $2 $3”
exit 0
$ shift_demo 1 2 3 4 5 6 7 8 9 10 11 12
The program name is shift_demo.
The arguments are: 1 2 3 4 5 6 7 8 9 10 11 12
The first three arguments are: 1 2 3
The program name is shift_demo.
The arguments are: 2 3 4 5 6 7 8 9 10 11 12
The first three arguments are: 2 3 4
The program name is shift_demo.
The arguments are: 5 6 7 8 9 10 11 12
The first three arguments are: 5 6 7
$
Passing Arguments to Shell Scripts
Control Flow Commands
• Determine the sequence in which statements in a
shell script execute
• Basic types of script flow commands:
– Branching (e.g. if, if – then – elif)
– Looping (e.g. for, while)
Control Flow Commands
Control Flow Commands
Operators for
the test
Command
Example Script
Control Flow Commands
Example Script
Control Flow Commands
Example Script
Control Flow Commands
The for Statement
The for Statement
The while statement
The while statement
$ cat while_demo
#!/bin/sh
secretcode=agent007
echo “Guess the code!”
echo “Enter your guess: \c”
read yourguess
while [ “$secretcode” != “$yourguess” ]
do
echo “Good guess but wrong. Try again!”
echo “Enter your guess: \c”
read yourguess
done
echo “Wow! You are a genius!!”
exit 0
$ while_demo
Guess the code!
Enter your guess: star wars
Good guess but wrong. Try again!
Enter your guess: columbo
Good guess but wrong. Try again!
Enter your guess: agent007
Wow! You are a genius!!
$
The until Statement
The break and continue
Statements
The case Statement
The case Statement
The case Statement
The case Statement