View
226
Download
0
Tags:
Embed Size (px)
Citation preview
Introduction to Linux Shell Script Programming
Summer course, Institute of Bioinformatics
National Yang-Ming University
Menu Today!
Part I: Shell Script in Practice Basics about Shell and Exercises of system Shell Scripts Perl Shell Script
Part II: The applications of Shell Script Massive routing jobs Scheduling Backup
Shell !?
This?
This?
or this?
First glance — Linux Shell
Why Shell? Computer only realize the command in binary form
which is difficult for most of human So OS provides a special program call ‘shell’ accepts
human’s command in ‘readable’ form and translates them into 1 and 0 stream
Your commands
Linux shell Converted binary commands
OS kernel
$ ls$ man$ date
BASH000100010101001011000011100110100
Linux kernel
Text Shells
Kernel
Definition It is heart of Linux OS It manages all resources of OS
What it charges I/O (Input and Output) Process Devices File Memory
What is Shell?
Shell is an command language interpreter that executes commands read from the standard input device (your keyboard) or from a file
In Linux OS, it may use one of the following most popular shells (BASH, CSH and KSH)
In Microsoft DOS, the name of shell is COMMAND.COM, but it is NOT as powerful as Linux shell
Operating System Shell
Shell of an operating system it is a program that presents an interface to
various operating system functions and services
Why named “shell”? it is an outer layer of interface between the user
and the innards of the OS (kernel)
Shell, an interface
Main categories CLI (Command Line Interface)
it makes things clear text shell (what we are going to learn now)
GUI (Graphical Use interface) it makes things look easygraphic shell (what people always use nowadays)
CLI
Unix shells Bourne shell (sh)
Almquist shell (ash) Bourne-Again shell (bash)
C shell (csh) TENEX C shell (tcsh)
Korn shell (ksh) Scheme shell (scsh) Z shell (zsh)
Plan 9 and Unix rc shell (rc)
DOS: command.com
OS/2 and windows NT: cmd.exe
DOS, OS/2 and NT 4DOS, 4OS2, 4NT
GUI
MS windows windows explorer litestep Geoshell BB4Win Emerge Desktop
Mac OS: Machitosh Finder
X-window system (Unix) KDE, GNOME Blackbox, CDE
DOSSHELL
KDEGNOME
MS Mac
DOSSHELL
Popular Linux Shells
Shell NameDeveloped by …
RemarkWho Where
*BASH
(Bourne-Again SHell)Brian Fox and Chet Ramey
Free Software Foundation
Most common shell in Linux. It is Freeware shell and usually be the default shell.
CSH (C Shell) Bill JoyUniversity of California (Fro
BSD)
The C shell’s syntax and usage are very similar to the C programming language
KSH (Korn Shell)David G.
KornAT & T Bell Labs
claim that it has combined all advantages of 2 shells above
Bell Labs: The beginning
The research and development center of Lucent Technologies, formerly AT&T.
Bell labs is one of the most renowned scientific laboratories in the world
Alexander Graham Bell (1847~1922)
Alexander Graham Bell founds the company that becomes AT&T with 2 financial backers at 1876. He is also the inventor of the telephone.
His famous sentence “Mr. Watson. Come here! I want you!” were the first words to travel over a wire, ringing in the birth of electronic communication
Bell Labs: Brief
Its official name is Bell Telephone Laboratories or Bell Labs which was originally the research and development arm of the United states Bell System, and it was also the premier corporate facility of its type, developing a range of revolutionary technologies from telephone switches to specialized coverings for telephone cables, to transistor.
The work done by Bell Labs are Research
theoretical underpinnings for communications it includes math, physics, material science, behavioral sciences, computer
programming System engineering
concerning itself with conceiving the highly complex systems that make up the telecommunication networks
Development hardware and software for Bell System’s communication networks
Bell Labs: big events
1933, discovered radio waves emitted from center of galaxy
1947, invention of transistor (Nobel Prize in Physics in 1956)
1948, Claude Shannon published “A Mathematical Theory of Communication”
1954, the development of photovoltaic cell
1957, electronic music by Max Mathews
1970s, Unix and C language
1971, computerized switching system for telephone traffic
1980, the realization of the world’s first single chip 32-bit microprocessor, the BELLMAC-32A
1980, C++ language
late 1980s and early 1990s, developed Plan9 as a replacement for Unix
1990s, inferno OS
Variables in Linux
In the machine you are using, it has memory for storing your data. These memory are divided into smaller locations (address) and one can give them a name called memory variable or variable
There are 2 kinds of variables System variables
created and maintained by O.S. itself, all their name are capital. User-defined variable (UDV)
created and maintained by user, all their name are lower-case.
Check variables set: check all variables env: check system variables only
The shell you use now
What is your current shell? grep username /etc/passwd echo $SHELL chsh (you can change the default shell here)
How many shell you can use cat /etc/shells
How to change current shell temporarily? just type the name of new shell
Script Components
designator line Tell the O.S. where is the correct interpreter it begins with #!
comments it begins with #
shell commands correct separator: semicolon (;) or new line (\n)
Tea Time
Take a break!
Review what you have learned
Start Your First Shell Script
Your first Bash shell script: How are you doing?
locate the shell you use, start with #!
comments, start with #
set variables (bash style)
output the results
Discussion:the difference between apostrophes and quotation marks
Your 2nd Bash shell script: some arithmetic computations
locate the shell you use, start with #!
comments, start with #
No variable declaration
Declare as Integers
Discussion: what is the difference?
Declare
Syntax: declare [-afir] variable[=value]
Options: -a: declared as array -f: declared as function -i: declared as integer -r: declared as read-only variable
Interactive shell script
Multiple Arguments:How to access?
Logical operators
operator meaning= -eq equal
!= -ne Not equal
< -lt Less than
> -gl Greater than
-le Less than or equal (<=)
-ge Greater than or equal (>=)
-a AND
-o OR
arithmetic only, not for text Both arithmetic and text
Flow control
Branches If then, else Case
Loops (for, while, until) it is a block of code that iterates a list of
commands as long as the loop control condition is true
Branches
(1) If then, else
Syntax and example: If [condition 1]; then [statement 1] elif [condition 2]; then [statement 2] else [statement 3] fi
cond 2
cond 1
Start
stat 1stat 2stat 3
then
then
else
else
Simple form
yn=y
script is runningSTOP!
thenelse
User enter … (stored as yn)
Complex conditions
yn=y || yn=Y
script is runningSTOP!
thenelse
User enter … (stored as yn)
else if
Check your file
logic tags for file identification
tag stands for …
-e whether it exists or not
-f whether file exists or not
-d whether directory exists or not
-L whether file is link file
-r whether it can be read
-w whether it can be written
-x whether it can be executed
-s whether file is empty (true is not empty)
Check and Create file
check properties while it exists
ask user whether wanna create it while it does not exist
Remark: if then, else statements
You can link several conditions by || or && Each condition must be between [ ]
Caution! the space between condition statement and [ or ] is necessary
Advanced Example
Analyze your host ~
(2) Case
syntax and example case variable in
value_1) [statements_1] ;;value_2) [statements_2] ;;value_3) [statements_3] ;;*) [statements_for_exception]
esac
Fortune Teller
Loops
for loop
syntax: for (( initial value; stop criteria; increment/decrement ))
do [statements] done
simple test The sum from 1 to 100
Do what gauss has doneby shell script
while loop and until loop
syntax while [ condition ]
do [statement] done
syntax until [ condition ]
do [statements] done
Rewritten in while loop
Rewritten in until loop
Compare while and until
while it holds, continuewhile it reaches, stop
><=
for loop, revisit
alternative syntax for variable in variable_list
do [statement] done
it differs significantly from its C counterpart
Solar system
How you login?
HOSTSSH/Telnet
enter username and password
check 1
User
read UID amd GIDread setting of home directory and shell
found
search the username you entered in /etc/passwd
check 2
check the password you entered in /etc/shadow
Login successfully
Login failed
pass
NOT found
NOT pass
inside /etc/passwd
Notes for each field password has been moved to /etc/shadow UID (32bits)
0 (administrator), 1~500 (system UID), rest for others
/etc/passwd and cut command
cut function: select portions of each lines of a file syntax: cut –f list [-d delim] [file] example: cut –f 1 –d : myfile the example above uses “:” to separate each line of myfile into
fields, then select the first field for each line
part of /etc/passwd of Mandrake 9.0
Print all accounts in your host
Summary: for, while and until
For loop: for (( triple condition))
do [statements] done
While while [ condition ]
do [statement] done
Until until [ condition ]
do [statements] done
alternative For loop for variable in variable_list
do [statement] done
select
syntax: select variable [in list]
do [statements] break … it make script stop after selection
done
Note: if in list is not given, it will read list from arguments (shown in ex15.sh) compare to alternative for loop
create Menu using select
Function
syntax function function_name {statements} function function_name () {statements}
Create menu with function
omitted list here, it will be read from arguments
call function here, call by name
File I/O
#----- The file to read myFile="/root/somefile"
#----- The "big" data variable myData=""
#----- Now the read myData=`cat $myFile`
#----- Show that the data is really in the variable...#----- This is in the same format as the original file, new lines preserved echo "$myData"
#----- Show the data in non-quoted format, the space becomes the separator echo $myData
Read line-by-line
#----- The file to read myFile="/root/somefile"
#----- The line data variable myLine=""
#----- Loop to read file data content while [ 1 ] do read myLine || break echo "$myLine"
done < $myFile
Write column-by-column
#----- Set up the path and name of file myFile="/root/temp.txt"
#----- Load data string, the separator here is the colon (:) myData="one:two:three"
#----- Here is the write... echo "$myData" | tr ':' '\n' > $myFile
How to debug?
please man your shell first man bash man sh
syntax check bash --debugger script_name sh –n script_name
References
Advanced Bash Scripting Guide http://www.tldp.org/LDP/abs/html/
Bash Reference Manual http://www.gnu.org/software/bash/manual/bashref.html
Learn from examples!
The End