Unix training by Subhendu

advertisement
Unix Overview
Expectation from this training
This is not an exhaustive training on Unix , covering
all the arenas with full details.
Even the topics covered in this presentation are not
all inclusive.
But, it will definitely help you to be a confident
sailor in the ocean of Unix – no matter what the
circumstance is.
Don’t be nervous,please
This training will teach you about
90
commands!!!
And will make you bore with more than
350 slides!!!!
But don’t be nervous – remember the utilities of the
commands – for this presentation will be with you
for the rest of your life to provide you the syntax
for using them.
Duration
15 Hours ( 3 Days)
Schedule
29th Sept-1st Oct,2003
Timings
11:00 am – 1 pm
2:00 pm – 5 pm
Purpose
Get introduced to Unix Operating System
To get acquainted with the basic Unix commands
To learn a bit of Shell Programming
Operating System
An operating system is a living, breathing software entity. The
soul of the computing machine, it is the nervous system that
turns electrons and silicon into a personality. It brings life to
the computer
- from
Mike Gancarz's "The UNIX Philosophy"
The OS sits between users and hardware providing translation
services. It speaks the language of the hardware to perform
basic tasks such as the definition of memory or the allocation
of disk space using the hardware.
Unix Operating System
Shell
Kernel
Hardware
In UNIX, the operating system is broken into three pieces: the
kernel, the shell, and the built-in utilities. The kernel is responsible
for low level hardware communication, the shell provides human users
with a user-friendly interface, and the built-in utilities provide basic
tools for doing work.
Kernel
•Heart of The Unix OS.
•Collection of C programs directly communicating with
hardware
•Part of Unix system loaded into memory when Unix is booted
Manages:1. System resources
2. Allocates time between user and processes
3. Decides process priorities
Exit
Shell
•Human interface point for Unix
•Program layer – provides an
environment for the user to enter
commands to get desired results.
•Korn Shell, Bourne Shell, C Shell are
various shells used by Unix users
Exit
User login process
Unix booted.
Program Unix(kernel) is booted into main memory,
and remains active till the computer is shut down
Program init runs as a background task and
remains running till shutdown
User attempts to log in.
Kernel calls program ‘init’.
‘init’ scans file /etc/inittab , which lists the ports with
terminals and their characteristics and returns an
active open terminal to ‘init’.
‘init’ calls program ‘getty’, which issues a login
prompt in the monitor
User enters login and password
‘getty’ calls program ‘login’ which scans file
/etc/passwd to match username and password
After validation, control passes to session startup
program /bin/sh , session startup program
Program /bin/sh reads file /etc/profile and .profile
and sets up system wide and user specific
environment.
User gets a shell prompt
Exit
Understanding Commands
Controlling Environment
General Purpose Utilities
Process
Handling Files
System Administration
Filters
Communication
Understanding Unix Commands
By end of this section , you will be able to know
What a command is?
‘Which’ – program related to a command
‘Man’ – get online help of commands
‘Alias’ – Call a Command by another name
‘History’ – previously executed commands
To get work done by Unix, there is no way
but to execute : commands.
Commands can be typed in from keyboard or
taken from a file
Unix offers a variety of commands for each
category of jobs.
Commands execute a program in the
background which performs the desired job
Independent Commands
Do not require any input for execution
$pwd
/home/ems2000
Dependent Commands
Require input for execution
$type ls
ls is a tracked alias for /usr/bin/ls
Mixed Commands:- Can work independently/dependently
$ls queue
$ls
input
sentwebcatalogs
queue
web
queue
General syntax to use commands
<command> [ <option flag> ] [<arguments>]
A statement asking for execution of a command usually consists of
three distinct sections:<command> : Keyword for the command
<option flag> : Starts with ‘-’ sign. Decides the nature of output
from the results of command execution
<arguments> : May be a string or the name of file(s) on which the
command will act upon for desired output.
Example :
$grep -l “ems2000” *.sh
The above command from the OS prompt searches for the string
“ems2000” in all the files with extension : .sh and shows the name
of the files containing it.
More than one commands can be stated from OS
prompt at a time
$pwd;tty
/home/ems2000/queue
/dev/pts/tb
First, pwd command is executed which displays the output : /home/ems2000/queue
Then , tty command shows the terminal no: /dev/pts/tb
Any number of commands can be specified at the OS prompt for execution
separated by a ‘;’
A command can spawn more than one lines
$ echo ‘
Hello’
Hello
General Purpose Utilities
By end of this section , you will be able know
‘banner’ – set up poster
‘uptime’ – System info
‘expr’ – Calculations
‘cal’ – get Calendar
‘login’ – server login
‘factor’ – factor : number
‘date’ – get current date
‘telnet’ – server login
‘primes’-Prime number
‘calendar’ – get schedule
‘exit’- exit current shell
‘units’-Unit conversion
‘who’ – User information
‘lock’ – lock a terminal
‘tput’-Control display
‘tty’ – terminal information ‘script’ – get the whole job
‘uname’- machine info
‘bc’ – Unix Calculator
‘time’-Time taken by
a command
Example
Use
Significance
date +”%A”
Full weekday name(eg., ‘Wednesday’)
date +”%b”
Full month name(‘Jan’)
date +”%c”
Current date & time representation
date +”%C”
Century(year/100, truncated to nearest number)
date +”%d”
Current Day of the month
date +”%e”
Current Day of the month
date +”%H”
Current hour of time(00-23)
date +”%I”
Current hour of time(12 hour clock)
date +”%m”
Current Month as decimal two digit number
date +”%M”
Current minute of time(00-59)
date +”%n”
Newline character
date +”%p”
AM or PM
Use
Significance
date +”%R”
Current time as %H:%M
date +”%S”
Current second of time(00-59)
date +”%t”
Tab character
date +”%u”
Weekday as 1 digit number[1-7 for Monday-Sunday]
date +”%w”
Weekday as 1 digit number [ 0-6 for SundaySaturday]
date +”%V”
Week number of the year
date +”%x”
Current date as dd/mm/yy
date +”%X”
Current time in hh:mm:ss
date +”%y”
Two digit year
date +”%Y”
4 digit year
date +”%Z”
Time zone name
Examples of Date
$ cat calendar
I have a meeting on 07/10/2003 with Subhomoy
I have a meeting on 08/10/2003 with Biswajit
I have a meeting on 06/10/2003 with Sugata
I have a meeting on 09/10/2003 with my delivery manager
I plan for a dinner on Sep 10, 2003 with my team
I have a meeting on 11/10/2003
I have a meeting on 12/10/2003
I will not come to office on 09/11/2003
$ calendar
I have a meeting on 09/10/2003 with my delivery manager
I plan for a dinner on Sep 10, 2003 with my team
I will not come to office on 09/11/2003
$who
sqian
pts/td
Sep 9 18:27
ems2000
pts/te
Sep 10 01:41
NAME
LINE
TIME
sqian
pts/td
Sep 9 18:27 7:32 28935 135.148.207.175
ems2000
pts/te
Sep 10 01:41 0:02 29362 129.42.68.104
pts/te
Sep 10 01:41
$who -Hu
$who am i
ems2000
IDLE
PID
COMMENTS
$uptime -u
2:17am up 122 days, 11:03, 2 users, load average: 0.41, 0.41, 0.41
$uptime -h
sqian
pts/td
ems2000 pts/te
6:27pm 7:39
1:41am
rlogin htstbw00
-ksh
$uptime -l
2:18am up 122 days, 11:04, 2 users, load average: 0.40, 0.41, 0.41
Scale:By default, bc performs truncated division.One have to set scale to
the number of digits of precision before performing any division.
$bc
scale=2
10/4
2.50
^d
$
If answer to division is greater than the value as
dictated by the scale variable, then the value
dictated by the scale is ignored and the real value
is shown.
ibase and obase:By default, the input and output are interpreted as decimal
values.But, if the demand required input and/or output in different
number system(binary, hexadecimal), variables ibase and obase are
set.
To convert binary input to decimal output:-
ibase=2
To convert decimal input(default) into binary output:obase=2
For hexadecimal systems, value ’16’ is used in ibase/obase variable.
Handling Variables:Variables can be used in bc mode and values can be assigned to
them.
$bc
X=12 ; y=19
Z=x+y
Z
31
Conditional logics(if) ,loops(for,while), arrays, functions are supported
by ‘bc’
Square Root of a Number
Syntax : sqrt ( x )
Example :
$bc
Sqrt ( 4 )
2
Length of a Number
Syntax : length ( x )
Example :
$bc
length ( 1234.5678 )
8
Trigonometric Functions
To use trigonometric functions of bc, one have to include math
library. For that , issue the following command from Os prompt:-
$ bc –l
Various trigonometric functions available with ‘bc’ are:s(x)
sine
c(x)
cosine
e(x)
exponential
l(x)
log
String handling
To find length of a string:expr “<string>” : ‘.*’
Example : $ expr “Unix” : ‘.*’
4
To extract a substring from a string:$ expr “Subhendu” : ‘… (\..\)’
he
# Shows 4th to 5th character
To locate first position of a character in a string:$expr “Subhendu” : ‘[^d]*h’
4
# Shows ‘h’ is at 4th position
factor
Finds out factor of the integer provided
Syntax : factor <number>
$factor 15
$factor 18
15
18
2
3
3
3
5
$
$
primes
Shows all prime numbers between integers <lower value> and <upper
value>. If upper value is not provided, it is considered to be
2,147,483,647.
Syntax : primes <lower value> <upper value>
$primes 0 10
2
3
5
7
$
units
Converts quantities expressed in various standard scales to
equivalents in other scales. Acts interactively as follows:System Prompt
their
User Response
You have:
inch
You want:
cm
The system responds with two factors; one used if multiplying
(preceded by *), the other if dividing (preceded by /):
* 2.540000e+00
/ 3.937008e-01
For a complete list of units, examine the file:
/usr/share/lib/unittab
tput
Controls screen display
Options
Significance
tput clear
Clears the screen
tput cup <r> <c>
Moves cursor to row <r> and column <c>
tput bold
Bold display
tput blink
Blink display
tput rev
Reverse display
tput cols
Shows number of columns in the screen
tput bel
Echo bell character
tput lines
Shows number of lines in the screen
tput smso
Starts reverse display
tput rmso
Ends reverse display
Examples
time
Syntax : time <command>
Times a command.
Command <command> is executed and time prints:Elapsed time during the command
Time spent in the system
Time spent executing the command
Example:$ time grep -i "Subhendu" *
ABCDEF:subhendu
bounce_off.ksh:# Developed by
drawbox.ksh:# Developed by
: SUBHENDU MAJUMDAR
: SUBHENDU MAJUMDAR
header:#
Developer
: SUBHENDU MAJUMDAR
heading:#
Developer
: SUBHENDU MAJUMDAR
real
6.6
user
0.8
sys
0.7
Handling Files
This section will introduce you with
Architecture
Cat – Create,View,
append Files
‘file’ – know file type
Types of Files
VI – Visual Editor
‘chmod’ – Change
permissions
Inode
‘more’ – display files
‘chown’ – Change
owner
File System
‘pg’ – View files
‘chgrp’ – Change group
‘pwd’-Current Directory
‘cp’,’mv’ –
Copy and rename files
‘touch’ – Change time
stamp of a file
‘cd’ – Change Directory
‘rm’ – Remove Files
‘ln’ – Link a file to other
‘ls’ – List contents of a dir
‘wc’ – Count word,line
and characters
Handling Files…contd
‘mkdir’ – Create
Directory
‘rmdir’ – Remove
Directory
‘cmp’ – compare
two files
‘dircmp’
Compare Directories
‘lp’
Print a file in a printer
‘lpstat’
View printer status
‘cancel’
Cancel print jobs
‘comm’ – Compare
two files
‘sdiff’ – find differences
between two files
‘pr’
Format file contents
Compressing and
Uncompressing Files
File maintenance architecture
Formatted Disk
Partition
Partition
Partition
File system
Directory
Directory
Directory
File
File
File
Directory
Directory
Directory
Types of Files
Normal files
Can be text/binary files.
Can be a text file, compiled source code , executables
Directory files
Contains no external data, but details of files and sub-directories it
contains.
Device files
Printers, tapes, floppy drives, CD ROMs, hard disks, terminals – all
are considered as files
Inode
•Inode is a fixed format structure containing the
attributes of the files stored in the file system.
•Every file has one inode, and a list of such inodes
is kept in a disk area not directly accessible by
user.
•Each inode is accessed by inode number, specifying
the position of the inode in the list.
Some of the important information that inode contains are:Information
Significance
Mode
Permission mask and type of file
Link count
No. of links associated with the file
User id
ID of the owner
Group Id
ID of the group
Size
No. of bytes in the file
Access time
Time of last access of the file
Mod time
Time of last modification of the file
Inode time
Time at which the inode structure was last
modified
Typical File System
/ (root)
Unix
bin
dev
usr1
usr
usr2
tmp
usr3
etc
bin
/Unix folder contains the kernel
/tmp contains temporary files
/bin contains binary executable files
/usr/bin contains additional
binary unix commands
/dev contains device related files
/usr is the home directory for all
users
/usr/usr1 is the home dir. for user :
usr1
/etc contains binary
executable files for system
administration
pwd
Shows the directory where the user is currently in
Syntax : pwd
Example
$pwd
/home/ems2000
cd
Navigates from the current directory to another directory
Syntax : cd <new directory specification>
Commands
Significance
cd scripts
cd ./scripts
Moves to directory : scripts under
current working directory
cd ../program
Change to directory program
residing in the current directory's
parent directory
cd /usr/fin/subhendu/ manfiles
Change to the directory whose
absolute pathname is :
/usr/fin/subhendu/ manfiles
cd
cd ~
Move to home directory of the user
Commands
Significance
cd ..
Move to the parent directory of the current
working directory
cd ~/subhendu
Move to folder : subhendu under the home
directory for the user
cdpath
This is an environmental variable which specifies the list of
directories to be searched when an user issues a ‘cd’ command.
$CDPATH=.:..:$HOME
This means, when a ‘cd’ command is issued, search for the new
directory first in current working directory(.)
If not found, move to the parent directory of the current directory
and search there.
If, still, not found, search for the directory under user’s home
directory
ls
Shows the contents of a directory/existence of specific files with
their attributes
Syntax : ls [ flag] [string for filename]
Commands
Significance
ls
Shows the name of all the files and directories under the
current directory, excluding those starting with .
ls –a
Lists all files including those starting with ‘.’
ls –x
Multi columnar output
ls –R
Shows all files and recursive listing of all files in subdirectories
ls –l
Long listing showing seven attributes of a file
ls –F
Marks executables with ‘*’ and directories with ‘/’
Commands
Significance
ls –t
Sorts files by modification time – the file modified
most recently comes at the top
ls –ut
Sorts files by access time
ls –r
Sorts file in reverse order
ls –ltr
Shows long listing of files with their attributes, sorted
in reverse order by access time(most recently edited
file comes last in the list)
ls –i
Shows inode number of a file
ls *.ksh
Shows the name of all files with ‘.ksh’ at the end of
their name
ls [aeiou]*
Shows the files with name starting with vowels
ls d*.sh
Lists all files starting with ‘d’ and ending with ‘.sh’ in
their name
ls d?l*
Lists all files with first letter as ‘d’ and third letter as
‘l’
ls [!aeiou]*
Shows the files with names not starting with vowels
cat
Creates , shows, concatenates,copies files
Commands
Significance
cat >file1
Creates file file1 where a user enters text and presses
<Ctrl-D> to end text editing
cat >>file1
Append lines to existing content of file : file1 and is
ended when <Ctrl-D> is pressed
cat file1
Shows the contents of the file: file1
cat
file1>file2
Copies the contents of file : file1 into new or existing file
: file2
cat file1
file2 > file3
Concatenates the content of file1 and file2 and places it
into new or existing file file3
cat file1
>>file2
Appends the contents of file1 after the last line of file2.
If file2 does not exist, new file is created
Commands
Significance
cat –n file1
Displays the contents of file : file1 with line
number
cat –b file1
Displays the contents of file : file1 with line
number for all lines excepting the blank lines
cat –e file1
Prints ‘$’ at the end of each line
cat –r file1
Replaces multiple consecutive empty lines with
one empty line
cat –t file1
Prints tab character as ‘^I’ and form feed
character as ‘^L’
cat –s file1 file2 >file3
Suppresses error and does the job. If file
file2 does not exist, the command will copy
the contents of file1 into file3
Examples
Examples…continued
Examples…continued
VI
First Unix Full screen Editor
First full screen editor, developed by William(Bill)
Joy, a graduate student from University of
California, Berkley.
Divides Unix users into two camps:
•Those who hate vi
•Those who love vi
Haters say that it is the worst thing ever happened in
the Unix world.
Lovers are totally biased towards it and would go any
length supporting its cause.
Modes of Operation
Ex mode
First session with vi
Environmental variables
Append mode
.exrc & EXINIT variable
Command mode
view
Mode of Operation
Command mode : Default mode when a file is opened using
vi. All the keys pressed by the user are interpreted as user
commands
Append Mode : Permits insertion of new text, editing
existing texts.
Ex mode : Permits commands at the command line(last line of
the screen)
Command Mode
R,R,I,I,c,C,o,
O,s,S,a,A
Esc
Append Mode
Enter
:
Ex Mode
First Session with vi
Step 1 : Create a new file by typing the following
command from the OS Prompt : vi newfile
•vi clears the screen and display
a window.
•The ‘_’ on the top line indicates
that the cursor is waiting for
commands
•Every other line starts with ‘~’,
symbol for empty line.
Step 2 : Press ‘i’ to enter into Append mode. Add text
to the file
Step 3 : Press <Esc> key to return to command mode
Step 3 : Press ‘:’. The cursor takes to the ‘ex’ mode at
the command line. Enter ‘wq’ and press enter.
Append Mode
Inserting Texts
Cmd
Significance
i
Appends text from the left of the current cursor position
I
Appends text at the start of the current line.
a
Appends text from the right of the current cursor position
A
Appends text at the end of the current line.
o
Opens a line immediately below the current line in input mode
O
Opens a line immediately before the current line in input mode
Changing Texts
Cmd
Significance
<n>r
Replaces <n> characters from current cursor posn. with inserted text
R
Replaces text from cursor to right
<n>s
Replaces <n> characters from cursor with entered text
<n>S
Replaces <n> lines from the current cursor line with entered text
c0
Changes from cursor to beginning of line with the text entered
c$
Changes from cursor to end of line with the text entered
C
Change from current cursor posn. to end of line with the text entered
<n>cw Changes <n> words from the current cursor position with text entered
<n>cc
Replaces <n> lines from the current cursor line with entered text
cG
Changes from current cursor position to end of the file with entered
text.
Command Mode
Saving work in a file and quit
Cmd
Significance
ZZ
Saves the work done in the file and quits editing by vi editor
Deleting texts/lines
Cmd
Significance
<n>x
Deletes <n> characters from current cursor position
<n>dd or <n>D
Deletes <n> lines counting from current cursor line to below
d$
Deletes from current cursor position to end of line
dG
Deletes from current cursot position to end of file
d<n>G
Deletes from current line to line no <n>
df<char>
Deletes from current cursor position to first occurrence of
character <char>
d/<pattern>
Deletes from cursor upto the first occurrence of string
<pattern> in forward direction
d?<pattern>
Deletes from cursor upto the first occurrence of string
<pattern> in backward direction
Moving/Copying Texts
Cmd
Significance
<n>yy or
<n>Y
Yank <n> lines starting from current line onwards into undo
buffer
<n>yw
Yank <n> words starting from current cursor position onwards
into undo buffer
y$
Yank from current cursor position to end of the line in undo
buffer
yG
Yank from current cursor position to end of the file in undo
buffer
“a<n>yy
Yank <n> lines starting from current line onwards into buffer
named a
p
Paste the contents of undo buffer( as a result of deleting or
yanking) after the cursor position
P
Paste the contents of undo buffer( as a result of deleting or
yanking) before the cursor position
“ap
Paste the contents of buffer a after the cursor position
“bd
Delete text into named buffer b
Navigation in same line
Cmd
Significance
<n>h
Moves cursor left to nth previous character w.r.t. the current cursor
position
<n>l
Moves cursor right to nth next character w.r.t. the current cursor
position
<n>b
Moves cursor left to start of nth previous word w.r.t the current
cursor position. Punctuation marks are taken into account.
<n>w
Moves cursor right to start of nth next word w.r.t the current
cursor position. Punctuation marks are taken into account.
<n>e
Moves cursor right to end of nth next word w.r.t the current cursor
position. Punctuation marks are taken into account.
f<ch>
Move the character to the next character <ch> on same line
F<ch>
Move the character to the prv. character <ch> on same line
t<ch>
Move the character to one column before the next character <ch> on
same line
T<ch>
Move the character to one column after the next character <ch> on
same line
;
Repeats search in the same direction along which the prv. Search was
made using f/t
Cmd
Significance
,
Repeats search in the opposite direction along which the prv. Search
was made using f/t
<n>|
Moves the cursor to specified column <n>
0 or (
Moves to 1st character of the current line
$ or )
Moves to last character of current line
^
Moves to 1st non-space character of the line
<n>B
Moves cursor left to start of nth previous word w.r.t the current
cursor position.Punctuation marks are ignored
<n>W
Moves cursor right to start of nth next word w.r.t the current
cursor position. Punctuation marks are ignored
<n>E
Moves cursor right to end of nth next word w.r.t the current cursor
position. Punctuation marks are ignored
Navigation across lines
Cmd
Significance
<n>j or
<n>^n
Move the cursor down to the <n>th next line in the same column
<n>k or
<n>^p
Move the cursor up to the <n>th prv line in the same column
H
Moves the cursor to the top line of the screen
L
Moves the cursor to the last line of the screen
M
Moves the cursor to the middle line of the screen
<n>G
Moves to line number <n>
+
Moves the cursor to next line’s first non-blank character
-
Moves the cursor to previous line’s first non-blank character
Redraw screen
Cmd
Significance
z-
Makes the current line the last line of the screenand redraws
the screen
z+
Makes the current line the first line of the screenand redraws
the screen
z.
Makes the current line the middle line of the screenand redraws
the screen
Ctrl-l
Redraws the screen
/pattern/z-
Find the next occurrence of <pattern> and make that last line of
the screen
Scrolling across pages
Cmd
Significance
<n>^f
Move forward by <n> screens
<n>^b
Move backward by <n> screens
<n>^d
Move forward by <n> number of half screens
<n>^u
Move backward by <n> number of half screens
<n>^e
Scroll window down by <n> lines
<n>^y
Scroll window up by <n> lines
Pattern searching
Cmd
Significance
/pattern
Searches for specified <pattern> forward. IF end of file is
reached, search wraps around.
?pattern
Searches for specified <pattern> backward.
n
Repeat the last search in the same direction as was
specified in the last search
N
Repeat the last search in the opposite direction as was
specified in the last search
/pattern/+<n>
Positions the cursor <n> number of lines after the line where
the specified <pattern> is found
/pattern/-<n>
Positions the cursor <n> number of lines before the line
where the specified <pattern> is found
%
Find the matching braces or parenthesis
Joining lines
Cmd
Significance
<n>J
Joins current line and <n> lines below it together to form a
single line
Undo changes
Cmd
Significance
u
Undo last change
U
Undo all the changes in the current line
Marking text
Cmd
Significance
m<char>
Marks position of the file with mark <char>
‘<char>
Moves to portion of the file marked with <char>
“
Toggle to most recently marked location
Restoring previously deleted line
Cmd
Significance
“<n>p
Paste the content of <n>th last delete ( n<=9)
“1pu.u.u…
Till the last change is found
Filtering texts
Cmd
Significance
!<n>G sort
Sort from current line to line no. <n>
!<n>G tr ‘[a-z]’ ‘[A-Z]’
Translates all the characters from current line to
line <n> to uppercase
!! tr ‘[a-z]’ ‘[A-Z]’
Translates all the characters of current line to
uppercase
Repeat factor
Cmd
Significance
<n>i<ch>
Inserts <ch> character <n> number of times in input mode at
a stretch
Miscellaneous in command mode
Cmd
Significance
~
Change the character under cursor from lowercase to
uppercase and vice versa
.
Repeat the last change
<n>.
Repeat the last action ‘n’ times
<<
Shift current line to shift width character left
>>
Shift current line to shift width character right
Options available with vi command
Cmd
Significance
vi –r <filename>
Recover the file <filename> as much as possible after
system crash and open it
vi –R <filename>
Open the file <filename> in read-only mode
vi +<n> <filename>
Opens the file <filename> with cursor positioned in
line number <n>
vi + <filename>
Opens the file <filename> with cursor at the last line
vi –w<n> <filename>
Opens file <filename> in vi mode with window size of
<n> number of lines
vi +/<pattern>
<filename>
Opens file <filename> in vi editor and places the
cursor at first occurrence of pattern <pattern>
vi –x <filename>
Opens encrypted file <filename> in vi mode and asks
for the password before opening that
Ex Mode
Saving work in a file
Cmd
Significance
:w
Save the changes made to the file
:w <filename>
Same as “Save As..” in windows. Saves the
contents to the specified file <filename> . If it
does not exist previously, a new file is created
:w! <filename>
Save the changes to file <filename>, if the file
already exists
:w >> <file1>
Append the contents of the opened file after the
last line of the file <file1>. File <file1> should
exist previously
:<n1>,<n2>w <newfile>
Copies the contents of lines <n1> to <n2> into a
new file <newfile>
:<n1>,<n2>w! <newfile>
Moves the contents of lines <n1> to <n2> into an
existing file <newfile> , overwriting its previous
contents
Cmd
Significance
:.,.+<n>w <newfile>
Appends from current line to <n> number of
lines below it into file <newfile>
:.,.+<n>w >> <nextfile>
Appends from current line to <n> number of lines
below it after the last line of the file <nextfile>
:q
Quits the file editing in vi, provided no unsaved
change remains
:q!
Quits vi neglecting all the unsaved changes made to
the file
:wq or :x
Save the unsaved changes in the opened file and quit
vi editor
Temporary exit to shell
Cmd
Significance
:sh
Temporarily allows the user to come out of the vi file and
use the shell. After the job of the user is done and
command : exit is triggered from OS prompt, control
returns to vi editor again
Navigating to desired line
Cmd
Significance
:<n>
Custor moves to line number <n>
Search and replace texts in ex mode
Syntax :- :<line address>s/<old pattern>/<new pattern>/g
Line address
Significance
%
All lines where matching pattern is found
.
Current line
<n1>,<n2>
Refers from line <n1> to <n2>
$
Last line
1,$
.,.+<n>
First to last line
From current cursor line to <n> number of lines downwards
Examples of Search and Replace
Example
Significance
:%s/ex/vi/c
Substitutes 1st occurrence of string ‘ex’ with ‘vi’
by showing them and asking for confirmation.
When each string will be shown with pause in
cursor, press ‘y’ for substitution
:%s /<amaze \ >\/delight/g
Replaces ‘amaze’ , where available as a full word,
with ‘delight’. Note, any word like ‘amazed’ will
not be replaced
:g/subhendu/s/majumdar/
mazumder/g
Replaces every occurrence of string ‘majumdar’
with ‘mazumder’ on all lines containing the
pattern ‘subhendu’
:g/.\ {9\ }9/s/0/*/g
Replaces ‘0’ with ‘*’ at all lines having ‘9’ after 9th
position
:g/^$/d
Delete all blank lines
:g!/complete/s/$/To be
done/
Append the string ‘To be done’ at the end of all
lines not containing the string ‘complete’
Example
Significance
:g/vi/s/^/editor/
Append the string ‘editor’ at the first of all
lines containing the string ‘vi’
:%s/$/ : see my note/g
Appends the string ‘: see my note’ at the end of
all lines
:g/^….$/d
Deletes all lines containing 4 letters
:g/^..o/d
Deletes all lines with ‘o’ as 3rd character
:%s/…$//g
Delete the last three character of every line
Reading below the current line in the vi editor
Command
Significance
:r <nextfile>
Reads the contents of the file <nextfile> below
current line
:r! <command>
Places the output of the command <command>
below the current line
Editing another file
Command
Significance
:e <nextfile>
Stops editing the current file; leaves the current file
and starts editing file <nextfile>; provided there are
no unsaved changes in the current file
:e! <nextfile>
Edits file <nextfile> abandoning all the changes done
to the current file
:e!
Loads last saved version of current file
:n
Edits next file mentioned in the vi queue
:rew
Edits first file in the command line
:e +<n> <nextfile>
Edit starts at line <n> of file <nextfile>
Abbreviating texts
Command
Significance
:ab <short_string>
<long_string>
When the user writes the string <short_string> in
input mode, the <long_string> is written
Mapping
Command
Significance
:map g :w^M
Pressing ‘g’, one wants to save the file(:w is for saving,
and ^M is for pressing Enter key. While writing it in
the command line, write ^V^M)
:map z i^M^[
When you position your cursor to any character in a
line and press ‘z’ , the line will be broken from that
point and two lines will be formed. The control will
remain in command mode
(^[ represents <Escape> key)
:map z :w^M:!%^M
Pressing ‘z’ in command mode saves the file and
executes it in one shot
To unmap a key, write at the command line :unmap <key>
Miscellaneous
Command
Significance
:! <command>
Executes the command <command> remaining in vi
editor
:f
Shows the name of the current file and line
^g
Same as :f
Setting environmental variables for vi
Works in ex mode.
To set an environment variable to customize vi, the
following syntax needs to be followed::set <env.variable> [= <value>]
Environment
variables
Significance
autoindent(ai)
Newly inserted lines of text are indented to the same
distance from left margin as the preceding line. Opposite of
this option is noautoindent(noai)
autowrite(aw)
Automatically saves the unsaved changes in a file before
opening the next file with :n or using a shell command with :!
<command>. The opposite to this option is noautowrite(noaw)
errorbells(eb)
Sounds the bell when error occurs. Opposite is ‘noeb’
exrc(ex)
Allows an .exrc file in the current directory to override the
.exrc file in user’s home directory. Opposite is ‘noex’
list
Displays special characters in the screen: tabs are shown as
^I, end of line are marked with ‘$’. Opposite is ‘nolist’
mesg
System messages allowed when vi is running. Opposite is
‘nomesg’
number( nu )
Displays line numbers. Opposite is ‘nonu’
Environment variables
Significance
report=<val>
When any operation affects more lines than this
settings, message is displayed
scroll=<val>
Number of screen lines to scroll
shiftwidth(sw)=<val>
Number of spaces to be used for backtabs/<</>>
showmatch(sm)
Shows match for ) or } . Opposite is ‘nosm’
showmode
Indicates type of mode
tabstop=<val>
No. of spaces the tab character moves over
ignorecase(ic)
Ignores case when searches patterns. Opposite is
‘noic’
wrapmargin(wrm)=<val>
When set to a value >0 , carriage returns are
inserted automatically when the cursor gets to
within that number of spaces from the right edge
of the screen
.exrc file and EXINIT system variable
One can store all the values for environment variables, all the key
mappings and all the abbreviations in a file ‘.exrc’ under the home
directory for the user.VI looks for this file on startup and
executes the instructions as ex mode commands.
Besides, there is also a system variable , ‘EXINIT’ which can also
be used to save the settings.
EXINIT=“set report=5 ignorecase ai”; export EXINIT
view
Syntax : view <filename>
Description :Shows the file <filename> in vi mode. File remains
read-only. No changes done to the file cannot be saved.
more
Syntax : more [ -n <number> ] [ -<number>] [ -d] [-i] [-e] [ -c] [-f]
[-s] [ +/pattern] [filename]
Filter for examining continuous text, one screenful at a time. It
pauses after each screenful,printing the filename at the bottom of
the screen.
•To display one or more next lines, press <Return>
•To display another screenful, press <Space>
Command
line option
Significance
-n <number>
Sets the no of lines in the display window to that <number>.
-<n>
Same as above
-d
Prompts user with message :- ‘Press space to continue, q to
quit, h for help’ at the end of each screenful of display
-i
Performs case independent pattern matching
-c
Draw each page by starting at the top of screen, and erase
each line before drawing on it
-s
Squeeze multiple blank lines from the file , showing only one
blank line
+/pattern
Start listing such that the current position isset to two
lines above the line matching the regular expression
pattern.
Internal commands in ‘more’ mode
Options
Significance
f
Scrolls forward one screen
b
Scrolls backward one screen
q
Quit
/pattern
Searches pattern <pattern> forward
?pattern
Searches pattern <pattern> backward
v
Opens vi mode for the file viewed
n or N
Repeats last search
<n>j
Scrolls forward by <n> number of lines
<n>G
Moves to line number <n>
G
Goes to last line of the file
.
Repeats prv. command
:n
Moves to next file specified in the command line
Options
Significance
:p
Moves to previous file specified in the command line
i<space>
Scrolls forward by i number of screens
i<return>
Scrolls forward by i number of lines
<i>^d/ <I>
Scrolls forward i lines, with a default of ½ of the screen size
<i>^u
/<i>u
Scrolls backward i lines, with a default of ½ of the screen size
<n>k/
<n>^y
Scrolls backward by <n> number of lines
<n>z
Displays <n> more lines and sets the window size to <n>
<n>f /
<n>^f
Moves forward by <n> lines
<n>b /
<n>^b
Moves backward by <n> lines
^g
Writes the name of the file currently being examined, the no.
relative to the total number of files to be viewed, the current
line no,current byte no, total no of bytes to write and what % of
the file precedes the current position
Options
Significance
h
Display a descriptive list of all the more commands
!<command>
Invoke a shell with a command <command>
:e <newfile>
Leaves the current file and starts viewing a new file
<newfile>
<I>:n
Examines the <I>th next file specified in the command
line
r / ^l
Refreshes the screen
.
Repeats the prv command
m<char>
Marks the current position with letter <char>
‘<char>
Returns to the position previously marked by the
specified letter <ch>
pg
Displays the content of a file one page at a time
Syntax :pg < flag and string> <filename(s)
Flag
Significance
-c
Clear the screen at the end of each page of display and
start the display at the top of the screen
-e
Continues to the next file after the end of one file, if more
than one files are specified at the command line
-f
Truncate lines longer than the width of the screen display
-p <string>
Display the <string> at the pg command prompt.Default is ‘:’ .
If string is %d the pageno is displayed atr the prompt
-s
Highlights all messages and prompts issued by the pg
command
+<n>
Start the display from line no <n> of the file specified
Flag
Significance
-<n>
Sets the size of the display screen to <n> number of lines
+/pattern/
Search for pattern <pattern> in the file and start the
display at that line
Keystrokes in pg mode
Option
Significance
-<n>
Go backward by <n> number of pages
+<n>
Go forward by <n> number of pages
l
Go forward by one line
<n>l
Start the display in the file at line specified by <n>
+<n>l
Go forward by <n> lines
-<n>l
Go backward by <n> lines
d
Go forward by ½ screen
-d
Go backward by ½ screen
^l
Redraws the screen
Option
Significance
$
Move to last page of the file
<n>/<pattern>
Searches forward for the pattern <pattern> in the file
from beginning of the next page. If a number <n> is
specified, pg searches for the specified occurrence
number <n> of the <pattern>
<n>p
Starts showing the <n>th previous file.
n
Start showing the next file
q
Quits the pg command
cp
Copies one file to another file/one directory to another
directory/files into directories
Syntax :cp [-flag] [ old files/directories] [ new files/directories]
Flag
Significance
-i
Interactive copying : prompt appears for user accent
before copying
-f
Force copying
-p
Preserve permissions. Preserves modification
time,access time,file mode, user id, user group etc
-r
Recursive copying
Examples
Example
Significance
cp file1 file2
Copies the contents of file1 into new or existing file
file2
cp file1 file2 file3
dir1
Copies files: file1, file2 and file3 into directory dir1
cp –R dir1 dir2
Copies directory dir1 into a new directory dir2(if dir2
does not exist before) / copies the directory dir1 as a
sub-directory under dir2(if directory dir2 exists
before)
cp –R dir1 dir2
dir3
If dir3 exists, two sub-directories under it are
created : dir1 and dir2.
IF dir2 directory does not exist, then a new directory
dir2 is created with the contents same as dir1 and one
additional sub-directory dir2
mv
Syntax :mv [-flag] [ old files/directories] [ new files/directories]
Moves/renames:A file to new or existing file
One/more files to existing directory
One or more directories to a new or existing directory.
If the access permission of the destination directory or existing
destination file forbids writing, mv command asks for overwriting
the file
Flag
Significance
-f
Performs move operation without prompting for permission
-i
Interactive moving
rm
Syntax :rm [-f|-i] [ -r|-R] [files|directories]
Removes the entries for one/more files from a directory.
Destroys the file whose last link is deleted
Removal of a file requires write permission for that file
Removal of a file from a directory required write and execute
permission in the directory
Flag
Significance
-f
Forceful deletion
-i
Interactive deletion
-r or –R
Recursively delete the entire contents of the cirectory
before removing the directory itself
Examples
Example
Significance
mv *.txt
../testdir
Moves all the files with .txt extension under the
directory testdir residing under the parent
directory of the current directory
rm *.temp
Remove all files with extension : .tmp under the
current directory
rm –r backupdir
Remove the directory backupdir with all its
contents
wc
Syntax :wc [-c|-l|-w] <filename(s)>
Counts the number of words/bytes/characters/lines in a file
Flag
Significance
-w
Counts the total no. of words
-l
Counts the total no. of lines
-c
Counts the total no. of characters
Examples
$ wc –c file1
$ wc –l file1
$ wc –w file1
32 file1
2 file1
8 file1
file
Syntax : file [-f ffile] [-h] file ...
Determines the file type of a file or list of files.
Performs a series of tests on each file in an attempt to classify it.
If file appears to be an ASCII file, file examines the first
512bytes and tries to guess its language.
File /etc/magic is ued to identify files that have some sort of
magic number, that is, any file containing a numeric or string
constant that indicates its type. Commentary at the beginning of
/etc/magic explains the format.
chmod
Syntax : chmod [file permission] <files|directories>
A file can have three type of permissions:Read : Authorized user can read the contents of the file.
Write : Along with read permission, it allows the allowed user to
modify its contents.
Execute : If the file is an executable, any allowed user can execute
it
A file can be accessed by:User : Person creating the file. He grants all the authorizations to
the file
Group : Group user for the file
Others: All other users not belonging to the group or are not the
creator.
Numeric representation of permissions
Value
Significance
4
Read permission
2
Write permission
1
Execute permission
6(=4+2)
Read and write permission
7(=4+2+1)
Read,write and execute permission
5(=4+1)
Read and execute permission
Example of granting numeric authorization
Syntax: chmod <val1><val2><val3> <filename(s)|directory name(s)>
val1 is for users
val2 is for group
val3 is for others
Any permission on a directory percolate down to the files and subdirectories under it.
Example
Significance
chmod 744 file1
Grant all permissions to : User, and read permission
to group and others
chmod 776
Grant all permission to user and group, read and
write permission to others
chmod 777 file1
Grant all permission to all
Alphabetic representation of permissions
Value
Significance
r
Read permission
w
Write permission
x
Execute permission
Value
Significance
u
User creating the file
g
Other users in the same group of the creator
o
Any other users
a
All(creator, other users in the same group, and other users)
Example of granting alphabetic authorization
Example
Significance
chmod u=rwx,go=r file1
Assign read,write and execute permission to
user, but only read permission to group and
others
chmod o-x file1
Revoke execute permission from others
chmod a+x file
Assign execute permission to everybody
chmod –R ug+r,o-r,a+x
/home/ems2000
Traverse the directory subtree under
directory /home/ems2000 making all regular
files readable by user and group only, revoke
read permission from others and grant
execute permission to all
Chown chgrp
and
Syntax : chown [-h] [-R] [owner] [file…]
chgrp [-h] [-R] [group] [file…]
chown changes owner of the file and chgrp changes group of each
file specified.
To change user or groyp, one must own the file and have the
CHOWN privilege granted to him by the system administrator
Options
Significance
-h
Change owner/group of a symbolic link
-R
Recursively change the owner and group of all the files and
sub-directories under the directory named
Example
Significance
chown ems2000
auto.profile
User ‘ems2000’ becomes the owner of the
file auto.profile
chgrp ems2000 auto.login
User ‘ems2000’ becomes the group user to
access the file auto.login
chown –R ems2000: users
shell_scripts
The command searches the directory :
shell_scripts and changes each file in that
directory to owner : ems2000 and group :
users
touch
Updates access time/modification time of file(s)
Syntax : touch [-a|m|c] [ -r <ref-file> | -t <time> ] <filename(s)>
Flag
Significance
-a
Change the access time of the file to the time specified/ if
no time is specified, use the current time
-m
Change the modification time of the file to the time
specified/ if no time is specified, use the current time.
-r ref-file
Use the corresponding time of file ref-file to change the
modification/access time of the file
-t <time>
Use the specified time <time> instead of current time. The
time format is : <YYYY><MM><DD><hh><mm>.<ss>
Example
Significance
touch –a wot.ksh
Changes the access time of wot.ksh with the
current date and time
(Changes can be perceived if the command : ls –ut is
fired in the directory containing the file : the file
wot.ksh will come at the top of the list)
touch –m wot.ksh
Changes the modification time of wot.ksh with
the current date and time
(Changes can be perceived if the command : ls –lt is
fired in the directory containing the file : the file
wot.ksh will come at the top of the list)
touch -m -t
201012122300 new.del
Changes the modification time of file : new.del
to Dec 12,2010 time : 23:00
Seeing the attributes of the file new.del will
reveal the information:-rw-rw-r-- 1 ems2000
touch -m -r new.del new1
dba
10 Dec 12 2010 new.del
Change the modification time of file : new1 and
make it same as the modification time of the file
: new.del
ln
Description Link files and directories
Command
Significance
ln [-f|-i] file1 newfile
Links file : file1 to a new or existing file : file1
ln [-f|-i] file1 file2
testdir
Creates link for files new1 and new2 under the
directory : testdir with two new files/existing files
new1 and new2
ln [-f|-i] dir1 dir2 testdir
Creates link for directories dir1 and dir2 under the
directory : testdir with two new /existing
directories : dir1 and dir2
Flag Significance
-f
Force esisting files or directories to be removed to allow the link
-i
Interactive linking
mkdir
Creates directories
Syntax : mkdir [-p] [-m <mode>] <directory name(s)>
Flag
Significance
-p
Intermediate directories are created as
necessary.Otherwise, the full path prefix of dirname
must already exist. mkdir requires write permission
in the parent directory.
-m <mode>
Mode of permission for the directory and all the
files under it
Example
Significance
Mkdir –m755 testdir
Directory : testdir is created with
permission = 755
mkdir –p
testdir/subhendu
If testdir is not created, it is first
created. Then, a directory : subhendu is
created under the directory testdir
rmdir
Removes the directory entry for each empty directory referred
Syntax : rmdir [-f|-I|-p] <directory>
Flag
Significance
-f
Forcefully remove a directory, even though it is not empty
-i
Interactive removal of empty directory
-p
Path removal.If, after, removing a directory with more than one
pathname component, the parent directory of that directory is
empty, rmdir removes the parent directory also. This continues till
rmdir encounters non-empty parent directory
cmp
Syntax : cmp [-l|-s] <file1> <file2>
Description Compares two files
Flag
Significance
-l
Print the byte number(decimal) and differing
byte(octal) for each difference
-s
Prints nothing; return exit codes only
Return codes
Significance
0
Files identical
1
Files not identical
2
Inaccessible/missing arguments
comm
Syntax : comm [-[123]] <file1> <file2>
Description Select or reject lines common to both files.
Case
Significance
comm filenew fileold
Produces a three columnar output:1st column displays lines only in file: filenew
2nd column displays lines only in file:fileold
3rd column displays lines common to both files
comm –1 filenew fileold
Suppress display of 1st column
comm –2 filenew fileold
Suppress display of 2nd column
comm –3 filenew fileold
Suppress display of 3rd column
comm –12 filenew fileold
Shows only lines common to both files
sdiff
Syntax : sdiff [-l|-s] <file1> <file2>
Description Side by side file difference program.
$cat file1
$cat file2
$sdiff file1 file2
Suvendu
Subhendu
Suvendu ! Subhendu
Subhasish
Subhasish
Subhasish Subhasish
Dibyendu
Arka
Diptoman
Dibyendu
Dibyendu
Akash
diptoman
Diptoman Diptoman
> Arka
Akash
Dibyendu
<
Flag
Significance
-l
Only print on the left hand side where columns are identical
-s
Do not print identical lines
dircmp
Syntax : dircmp [ -d|-s|-wn] <directory1> <directory2>
Description Examines two directories and generates various
tabulated info about the contents of the directories.
Flag
Significance
-d
Also compares the contents of the files with same name in both
directories and output a list telling what must be done to bring
them into agreement
-s
Suppresses messages about identical files
$ >ls -ltr dir1 dir2
dir1:
total 10
-rw-rw-r--rw-rw-r--rw-rw-r--rw-rw-r--rw-rw-r--
1 ems2000
1 ems2000
1 ems2000
1 ems2000
1 ems2000
dba
dba
dba
dba
dba
13 Jul 20 07:23 abc
26 Jul 20 07:23 def
15 Jul 20 07:30 subhendu
28 Aug 13 00:30 subha
5 Aug 13 00:39 samefile1
dir2:
total 8
-rw-rw-r--rw-rw-r--rw-rw-r--rw-rw-r--
1 ems2000
1 ems2000
1 ems2000
1 ems2000
dba
dba
dba
dba
26 Jul 20 07:24 def
12 Aug 13 00:32 nsf
30 Aug 13 00:32 abc
5 Aug 13 00:39 samefile1
$ dircmp
dir1 dir2
Aug 13 00:42 2003 dir1 only and dir2 only Page 1
./subha
./subhendu
./nsf
Aug 13 00:42 2003 Comparison of dir1 dir2 Page 1
directory
different
same
same
.
./abc
./def
./samefile1
lp
Syntax : lp -d<printer> [-m] [-n<copies>] [-t<title>] <file(s)
Description Prints one/more files to a specified printer
Flag
Significance
-d<printer>
Specify the printer <printer> where the print request is to
be directed
-m
Notify the requesting user at successful completion of the
print request by mail
-n<copies>
Specifies number of copies to print
-t<title>
Print the specified title <title> on the banner page
lpstat
Syntax : lpstat [ -p<printer>] [-t] [-u<username>] [-v
<printername>]
Description Shows current status of the print request
Flag
Significance
-p<printer>
Shows all printing jobs queued at printer <printer>
-t
Displays detailed status information about the print
from all users
-u<username>
Displays the status of print requests triggered by
user <username>
-v<printername>
Displays a list for the specified printername
cancel
Description
Used to cancel a specific print request or cancel all queued requests
to a specific printer queue. Any ordinary user can cancel only those
jobs triggered by his own userid
Example:$ cancel 734
# cancels print job with id 734
$ cancel lipi
# cancels all queued jobs in printer lipi
pr
Description Prepares a file for printing by adding suitable headers,
footers and formatted texts.
Example
Significance
pr file1
Adds 5 lines of margin at the top and 5 lines at the
bottom of file : file1. Header shows date and time of last
modification of the file along with filename and pageno
pr –l 72 file1
Changes default page size from 66 to 72
pr +10 file
Show file file1 from 10th page
pr –3 file1
Prints a file in three columns
pr –t file1
Suppresses page headers and footers for file : file1
pr –f file1
Form feed is used for a new page instead of a sequence
of line feed characters
pr –w 80 file1
Set the width of each page to 80 instead of a default of
72
Example
Significance
pr –P file1
Pauses after each page is displayed in the
terminal
pr –o5 file1
Indent each line by 5 columns
pr –d file1
Generate output with double specing
pr –h “List of files” file1
Print “List of files” instead of the filename as
header on each page.
Compressing files
Compress
Compress <filename(s)>
Reduces the size of the named files using adaptive Lempel-zev coding. If
reduction is possible, each file is replaced by a new file with same name
suffixed sith ‘.Z’. Original ownership, modes, access and modification times
are preserved.To uncompress a file, issue the command : uncompress
<filename>.Z . To view a compressed file, issue : zcat <filename>.Z
Gzip
gzip <filename(s)>
Reduces the size of the named files . If reduction is possible, each file is
replaced by a new file with same name suffixed sith ‘.gz’. Original
ownership, modes, access and modification times are preserved. To
uncompress a file, issue the command : gunzip <filename>.gz . To view a
compressed file, issue : gzcat <filename>.Z
Filters
Filters
By end of this section , you will be able know
‘head’
First few lines of a file
‘Sort’
Sorts file contents
‘tail’
Last few lines of a file
‘tr’
Translates file contents
‘cut’
View columns/fields
‘nl’
Shows line numbers
‘paste’
join lines of files
‘Spell’
Catch spelling mistakes
‘split’
Break long lines
‘find’
Find files
‘fmt’
Formats texts
‘grep’
Search Pattern in a file
‘fold’
Folds long lines
‘Sed’
Display specific lines
‘awk’
Reporting Tool
head
Gives first few lines of a file
Syntax :head [-<n>] [-c] [-l] [ -n <I>] [file(s)]
Example
Significance
head –5 newfile
Shows first 5 lines of file : newfile
head –n 5 newfile
Same as above
head -l -n 5 newfile
Same as above
head -c –n 14 newfile
Shows first 14 characters of newfile
tail
Gives last few lines/characters of a file
tail [-f] [-c number] [file]
tail [-f] [-n number] [file]
Syntax :
Flag
Significance
-n <no>
Shows last <no> lines of the file if <no> is specified with no sign or
–ve sign.
If specified with a ‘+’ sign, it shows from <no>th line onwards till
end of the file
-c <no>
Shows last <no> bytes of the file if <no> is specified with no sign or
–ve sign.
If specified with a ‘+’ sign, it shows from <no>th byte onwards till
end of the file
-f
Works in constant pilot mode . Used for variable sized files those
are growing constantly.
Example
Significance
tail –5 newfile
Shows last 5 lines of newfile
tail –n 5 newfile
Same as above
tail +5 newfile
Shows from 5th line to end of the file
tail –n +5 newfile
Same as above
tail -c 5 newfile
Shows last 5 bytes of a file
tail –c +5 newfile
Shows from 5th byte till end of the file
tail –fn 3 newfile
Constantly displays the last three lines of file : newfile
and leave the tail in “follow” mode. The ‘$’ prompt does
not return even after the work is over. One have to
abort the process to exit to the shell.
cut
Syntax : cut [-c list] [file]
cut [-f list] [-d <char>] [file]
Extracts selected fields/characters on each line of a file
Example
Significance
cut –c 6-22,24-32 file1
Extracts texts from column 6 to 22 and 24 to 32
and displays in the terminal in two columns
cut –c –22 newfile
Extracts text from column 1 to 22 from the file :
newfile and displays it in the terminal
cut –c –6, 22,24- file1
Extracts texts from column 1 to 6, column 22 and
from column 24 to end of the line and display it in
the terminal
cut –d”|” –f 2,3 newfile
Extracts field contents of 2nd and 3rd fields and
display in the terminal. Use “|” as a field separator
while extracting fields
cut –d”|” –f 1-5 newfile
Using ‘|’ as field separator, it extracts field
contents of 1st to 5th fields and display in the
terminal.
paste
Syntax :
paste file1 file2 ...
paste -d list file1 file2 ...
paste -s [-d list] file1 file2 ...
Merges same lines of several files or subsequent lines of same file
Example
Significance
paste file1 file2
Display in the screen the join of line 1 of file1 with
line 1 of file 2 with a space between them, line 2
of file1 with line 2 of file2 with a space delimiter
and so on.
paste –d”|” file1 file2
Same as above with ‘|’ as delimiter between the
fields of both files on each line.
Paste –s file1
Joins all the lines of file1 into a single line and show
it in the terminal
Example
Significance
paste -s file1 file2
Displays in the screen a single line which is :Join of all the lines in file1 + Join of all the lines in
file2
paste –s -d” t\n\” file1 Combines 1st and 2nd lines into a single line, 3rd and
4th into another line and so on.
split
Syntax : split [-<no. of lines to be put in each file>] [<initials>]
Splits up a file into equiline smaller lines.
Large files are sometime difficult to edit with an editor. The split
command breaks up a larger file into several equi line smaller files,
each containing a default of 100 lines.
It creates a group of files xaa,xab…till xaz and then again from
xba,xbb.. till xbz. Total 26x 26 = 676 files can be created in this
way.
Example:
File: newfile consists of 100 lines.
$ split –20 newfile
5 files nfa,nfb,nfc,nfd and nfe will be prepared each containing 20 lines
from newfile
fmt
Syntax : fmt [-s] [-w <width>] [file…]
Simple text formatter that fills and join lines /split lines to produce
output lines upto the number of characters specified in the –w
option(default is 72). It also counts the spaces between words in a
lineand also considers a space between joining of two lines.
The –s option split lines only. It does not join short lines to form
longer ones.
$ >cat file1
Today, we have a meeting.
It will start at 6 pm.
Bye
$ >fmt -w10 file1
Today, we
have a
meeting.
It will
start at 6
pm. Bye
fold
Syntax :
fold [-b|-s] [-w <width>] <file….>
Folds long lines
Flag Significance
-b
Width in bytes for counting
-s
Break the line on the last blank character found before the specified
number of column position specified in the –w<width> option(default : 80)
$ cat file1
Today, we have a meeting. It will start at 6 pm. Bye
$ fmt -s -w15 file1
Today, we have
a meeting. It
will start at 6
pm. Bye
sort
Sorts the contents of a file.
Starts with 1st character on each line and proceeds to the next character
only when the prv. Character in the two lines are identical.
Can also work on fields. Default field separator is the space.This can also
be changed.
Example
Significance
sort file1
Shows the sorted contents of file1 as per
character sorting
Sort –t “|” +2 file1
Sort the contents of file1 based on 3rd field
Sort –t “|” –r +1 file1
Reverse sort on 2nd field
Sort –c file1
Checks whether the file : file1 is already sorted or
not. Value of system variable $? Is 0 if it is sorted
sort –t “|” +2 –c file1
Checks whether the file is already sorted on 3rd
field or not
Example
Significance
Sort –o sort.lst +3 file1
Sort the contents of file : file1 based on 4th field
and store the output in a file : sort.lst
Sort –t “|” +3 –4 file1
Start sorting of file1 after 3rd field(+3) and stop
sorting after 4th field(-4). Basically sort file : file1
on 4th field
Sort –u file1
Sorts the contents of the file : file1 and removes
duplicate entries
Sort –t “|” +7.5 – 11.6
file1
Start sort after 5th(+7.5) column of 8th field
(+7.5) and stop sort on 6th column(11.6) of 12th
field(11.6)
Sort –n file1
Sort numerically file : file1. Used when the file
contains numeric entries.
tr
Syntax :
tr [-c] [-d] <expr1> <expr2> < <file>
By default, it translates each character in <expr1> found in the file to its
mapped character in <expr2>
Example
Significance
tr ‘ABC’ ‘abc’ < filenew
Translates the uppercase letters A,B and C in
file : filenew to lowercase
tr ‘[a-z]’ ‘[A-Z]’ <filenew
Translates all the lowercase letters in file :
filenew to uppercase
tr –d ‘|’ < fileold
tr –s ‘A’ <fileold
tr –cd ‘|/’ < fileold
Deletes all the ‘|’ characters from file : fileold
Compress multiple consecutive presence of
character ‘A’ to one ‘A’
Delete all characters except ‘|’ and ‘/’.
nl
Syntax :
nl [-w < number>] [ -s <delimiter_char>] <filename….>
Shows line number at the left of each line in the file. Reserves six
characters for the number
Example
Significance
-w <number>
Specifies the width option for line number
display to <number> characters
-s <delimiter_char>
Used to specify the character used for
delimiting between line no and line content
spell
Syntax :
spell [-a|-b] <filename(s)>
Lists all spellings in the file (s) the program recognizes as mistakes.
Example
Significance
-a
Use American spelling system
-b
Use British spelling system
find
Syntax :
find <path_list> <mode> <sel-criteria> <action>
Recursively examines all files in the <path_list>
Matches each file for one/more occurrence of <sel-criteria>
depending on <mode>
Takes some action on the files selected
Mode and Selection
criteria
Significance
-name <filename>
Selects file with name <filename> . Pattern matching is
allowed
-user <username>
Selects file owned by user specified by <username>
-type <f>
Selects type of files specified by <f>
-group <grpname>
Selects file if owned by group <grpname>
-size +<x>[<c>]
Selects file if the size exceeds <x> blocks(characters
if <c> is also specified)
-atime +<x>
Selects file if accessed before <x> days
-amin +<x>
Selects file if accesses before <x> minutes
-atime -<x>
Selects file if accessed within <x> days
-amin -<x>
Selects file if accesses within <x> minutes
-mtime -<x>
Selects files if modified within <x> days
-mmin -<x>
Selects files if modified within <x> minutes
-newer <flname>
Selects file if modified after file <flname>
Action
Significance
-perm
<permission_mode>
Finds the files with permission mode specified
-exec <command> {} \;
Executes command <command> after finding every
file on the search
-ok <command> {} ;
Executes command <command> after user
confirmation
-print
Shows selected files in display
grep
Syntax :
grep [-c|-n|-v|-l|-I|-e|-h|-x ] <pattern…> <filename(s)>
Searches a file for a pattern
Flag
Significance
-c
Counts number of occurrences. Output shows only the file name and
number of times the searched pattern found within it
-n
Displays the line number containing the pattern, along with the lines
-v
Displays all lines excepting those containing the pattern
-l
Displays only file names containing the pattern
-i
Ignores case while searching for the pattern
-e
Extended search. More than one pattern is to be searched
-h
Suppresses printing filename when printing multiple files where the
pattern is found
-x
Matches are recognized only when the entire line of the file searched
matches the fixed string
Example
Significance
grep while wot.ksh
Searches for the string ‘while’ in the file :
wot.ksh and if found, displays the lines
containing the pattern
grep while *.ksh
Searches for the string ‘while’ in all files
with extension ‘.ksh’ and shows the file name
and the line containing the pattern
grep “List of names” *.txt
Searches for the string ‘List of names’ in all
.txt files.
grep –li while *.ksh
Case-independent searching of the string
‘while’ takes place in all the .ksh files and
the the name of the files where matched is
displayed only
grep –e “Subhendu” –e
“suvendu” name.lst
Searches for pattern ‘Subhendu’ and
‘Suvendu’ in the file : name.lst
grep 'M[ao]noroma' name.lst
Searches for the string ‘Manoroma’ or
‘Monoroma’ in the file : name.lst
grep “^A” name.lst
Searches all lines starting with A
grep "Sinha$" name.lst
Searches all lines ending with ‘Sinha’
egrep
Description Extended grep
Expression
Significance
<ch>+
Matches one/more presence of character <ch>
<ch>?
Matches zero / presence of character <ch>
<expr1>|<expr2>
Matches <expr1> or <expr2>
(<exp1>|<exp2>|<exp3>
Matches expression <exp1><exp3> or
<exp2><exp3>
Expression
Significance
egrep '(Mano|Mono)roma'
name.lst
Matches string ‘Monoroma’ or ‘Manoroma’
egrep 'Aka+sh' name.lst
Matches ‘Akash’ , ‘Akaash’,’Akaash’
egrep –f srchlist name.lst
File : srchlist contains all the strings to be
searched in file : name.lst
sed
Syntax :
sed <options> <address,action> <filename(s)>
Stream text editor, used for:•Displaying specific lines from a file by line no/pattern matching
•Inserting or changing texts in a file
•Deleting lines from a file
Can be addressed in two ways:By line number
By specifying a pattern which occurs in a line
Addressing by lines
Done by specifying line number , or a pair of them separated by comma to
specify the lower and upper boundaries of selection.
Single word specifying action are:p
Print
q
Quit
$p Last line
Negative indicator ‘!’ can also be used to signify negation
Examples
Significance
sed ‘3q’ name.lst
Show first three lines of file : name.lst and
quit
sed –n ‘3,5p’ name.lst
Show 3rd to 5th line of file : name.lst
sed –n ’10,$p’ name.lst
Show from line no. 10 to end of file
sed –n –e ‘1,2p’ –e ‘7,9p’ –e ‘$p’ Show 1st to 2nd line, 7th to 9th line and last line
name.lst
of the file : name.lst
Examples
Significance
$ sed 'a\
> subhendu
> ' del>del1
Inserts the line ‘subhendu’ after every line in
the file : del and save the display in file : del1
$ sed ‘i\
> subhendu
> ' del>del1
Inserts the line ‘subhendu’ before every line in
the file : del and save the display in file : del1
$ sed ‘$a\
> subhendu
> ' del>del1
Inserts the line ‘subhendu’ at the end of file :
del and saves under file : del1
Context addressing
Example
Significance
sed –n ‘/getopts/p’ emp.ksh
Searches the string ‘getopts’ in file : emp.ksh
and displays it
sed –n ‘/getopts/,
/charstring/p’ emp.ksh
Searches for the string ‘getopts’ and
‘charstring’ in file : emp.ksh
sed –n ‘/[cC]hatterjee/p’
emp.lst
Searches for the string ‘Chatterjee’ or
‘chatterjee’ in file : emp.lst
sed -n '/Aka*sh/p' name.lst
Searches for any string with the pattern
specified
sed –n ‘/^A.a.s/p’ emp.lst
Searches for any line containing ‘A’ as 1st
character, ‘a’ as 3rd character and ‘s’ as 5th
character
sed –n ‘/^$/!p’ emp.lst
sed ‘/^$’/d’ emp.lst
Shows all but the blank lines from file emp.lst
sed –n ‘/^….$/p’ emp.lst
Shows all lines with 4 characters only
sed -n '/. {101, }/p' del
Shows lines longer than 100 characters
sed -n '/. {9 }9/p' del
Shows lines containing ‘9’ after 9 characters in
a line
Examples
Significance
sed –n ‘/if/w iflist
/while/w wlist’
emp.ksh
Searches file emp.ksh for pattern : if and
writes matching lines into file : iflist
Searches file emp.ksh for pattern : while
and writes matching lines to file : wlist
sed –n –f instr.lst emp.ksh
Searches file : emp.ksh for the strings
specified in the file instr.lst
Substitution
Examples
Significance
sed ‘s/exhausted/tired/’ list1
sed ‘s/exhausted/tired/p’ list1
Shows the content of the file : list1
with the string ‘exhausted’ replaced
by ‘tired’ at all occurences
sed ‘1,5s/basic/prelim/’ list1
Shows from 1st to 5th line of file :
list1 with the string ‘basic’ replaced
by ‘prelim’ at all occurences
sed –n ‘/marketing/s/staff/member/p’
list1
sed ‘s/student/ex &/’ name.lst
Replaces ‘staff’ with ‘member’ in all
the lines containing ‘marketing’
Replaces ‘student’ with ‘ex student’
awk
•Reporting tool for Unix.
•Developed by Alfred V Aho, Peter J
Weinberger, Brian W Kernighan
•Emerging as programming language.
•Produces facilities similar to SQL
language.
Syntax :
awk <options> ‘ <address> { <actions> }’ <input|file(s)>
‘AWK’ is a pattern matching and processing language .
It can search file(s) searching for a pattern, and when
found, performs specified action.
Works best with ascii files, preferably not to use with
binary files.
Using awk from command line
$ awk ‘ { print $0 }’
$ awk ‘ { print $1,$3 }’
Good morning
Happy Birth day
Good morning
Happy day
Hello
How are you?
Hello
How you?
^d
^d
$
$
Read data from a file
name.lst
$ cat name.lst
0001 | Subhendu Majumdar | Team Lead | Avaya | 25000.00
0005 | Raghab Das
| Programmer| Avaya | 12000.00
|
|
0006 | Sumit kumar Basu
0011 | Tamal Sen Sharma
0010 | Ratna Sengupta
0015 | Raghab Dasgupta
| Programmer| Avaya | 12000.00
| Programmer| Avaya | 12000.00
| Accountant | Avaya | 12000.00
| Programmer| Avaya | 12000.00
|
|
|
|
0025 | Rajib Banerjee
0012 | Damini Sen
0007| Akash Nag
0009| Anindya Das
| Programmer| Avaya | 12000.00
| Operator | Nestle| 10000.00
| Salesman | Nestle| 7800.00
| Manager | Nestle| 30000.00
|
|
|
|
0019| Sougata Das
| Manager
|
| Avaya | 50000.00
$ awk –F”|” { print $1,$2 }’ name.lst
0001 Subhendu Majumdar
0005 Raghab Das
0006 Sumit kumar Basu
0011 Tamal Sen Sharma
0010 Ratna Sengupta
0015 Raghab Dasgupta
0025 Rajib Banerjee
0012 Damini Sen
0007 Akash Nag
0009 Anindya Das
0019 Sougata Das
Taking awk instructions from a file
$ cat name.awk
{ print "-->" , $2 }
$ awk -F"|" -f name.awk name.lst
--> Subhendu Majumdar
--> Raghab Das
--> Sumit kumar Basu
--> Tamal Sen Sharma
--> Ratna Sengupta
--> Raghab Dasgupta
--> Rajib Banerjee
--> Damini Sen
--> Akash Nag
--> Anindya Das
--> Sougata Das
Pre-defined variables in awk
Variables
Significance
ARGC
Number of command line arguments
CONVFMT
Conversion format for numbers
FIELDWIDTHS
Whitespace separated string for the width of input fields.
Provides a facility for fixed-length fields instead of using
field separators.
FILENAME
Name of current input file
NR
Current record number
FS
Input field separator
IGNORECASE
0(Case sensitive)
1 ( Case insensitive)
NF
Number of fields in the current record
FNR
Current record number
Pre-defined variables in awk…contd
Variables
Significance
OFS
Output field separator
ORS
Output record separator(default is newline)
RS
Input record separator( default is new line)
FILENAME
Name of current input file
NR
Current record number
FS
Input field separator
IGNORECASE
0(Case sensitive)
1 ( Case insensitive)
ENVIRON
Unix environment variables
ERRNO
Unix system error message number
Example of using pre-defined variables
$ cat name1.lst
0001 | Sourav Ghar
| Team Lead | Avaya | 25000.00|
$ cat name2.lst
0001 | Sourav Dutta
0002 | Ratna Sengupta
| Project M
| Avaya | 25000.00|
| Programmer| GFS
$ cat name.awk
{
FS = "|" ;
OFS = " ** " ;
ORS = "\n-------------------------------------------\n";
print ARGC , ENVIRON["TERM"], CONVFMT , FILENAME ;
print NR , $2 , $3 , "Total fields" , NF ;
}
Example of using pre-defined variables…contd
$ awk -f name.awk name1.lst name2.lst
3 ** vt100 ** %.6g ** name1.lst
------------------------------------------1 ** Sourav Ghar
** Team Lead ** Total fields ** 6
------------------------------------------3 ** vt100 ** %.6g ** name2.lst
------------------------------------------2 ** Sourav Dutta
** Project M ** Total fields ** 6
------------------------------------------3 ** vt100 ** %.6g ** name2.lst
-------------------------------------------
3 ** Ratna Sengupta
** Programmer ** Total fields ** 4
-------------------------------------------
Regular Expression Metacharacters in Awk:Expression
Significance
\n
Newline
\t
Tab
^
Starts match at the beginning
$
Matches at the end of the string
.
Matches any single character
[ABC]
Matches any of A,B or C
[A-Ca-c]
Matches any of A,B,C,a,b or c
[^ABC]
Matches any character other than A,B or C
Desk|Chair
Matches any of ‘Desk’ or ‘Chair’
[ABC][DEF]
Matches any of A,B or C followed by D,E or F
Regular Expression Metacharacters in Awk…contd
Expression
Significance
[ABC]*
Matches zero/more occurences of A,B or C
[ABC]+
Matches one/more occurences of A,B or C
[ABC]?
Matches to an empty string or more of A,B or C
( )
(Blue|Black)berry matches to Blueberry or Blackberry
Comparison Operators in awk
Operators
Significance
==
Is equal to
<
Less than
<=
Less than or equal to
>
Greater than
>=
Greater than or equal to
!=
Not equal to
~
Matched by regular expression
!~
Not matched by regular expression
Compound pattern Operators
Operators
Significance
&&
Logical AND
||
Logical OR
!
Logical NOT
( )
Used to group compound statements
Range pattern Operators
Operators
Significance
awk -F"|" 'NR==3,NR==5 { print NR,$2 } '
name.lst
Shows 3rd,4th and 5th record
BEGIN and END blocks
BEGIN {
<declare variables>
< write headings>
}
.........................
.........................
END {
< show subtotals>
}
$ awk ‘/Programmer/ { print }’ name.lst
0005 | Raghab Das
# Details of all programmers
| Programmer| Avaya | 12000.00|
0006 | Sumit kumar Basu | Programmer| Avaya | 12000.00|
0011 | Tamal Sen Sharma | Programmer| Avaya | 12000.00|
0015 | Raghab Dasgupta | Programmer| Avaya | 12000.00|
0025 | Rajib Banerjee
| Programmer| Avaya | 12000.00|
$ awk ‘/Prog*/ { print }’ name.lst
0005 | Raghab Das
# Details of all programmers
| Programmer| Avaya | 12000.00|
0006 | Sumit kumar Basu | Programmer| Avaya | 12000.00|
0011 | Tamal Sen Sharma | Programmer| Avaya | 12000.00|
0015 | Raghab Dasgupta | Programmer| Avaya | 12000.00|
0025 | Rajib Banerjee
| Programmer| Avaya | 12000.00|
$ awk '/Operator/ ' name.lst
0012 | Damini Sen
# Details of all Operators
| Operator | Nestle| 10000.00|
$ awk -F "|" '/Operator/ { print $2,$5 }' name.lst #Field 2 and 5
Damini Sen
10000.00
$ awk -F"|" 'NR==3,NR==5 { print NR,$2 } ' name.lst
3 Sumit kumar Basu
4 Tamal Sen Sharma
5 Ratna Sengupta
(Shows line number and second field of 3rd-5th records)
$ awk -F"|" '/(Sen|Das)gupta/ { printf "%3d % -20s n" , NR , $2 }'
name.lst
5 Ratna Sengupta
6 Raghab Dasgupta
(Shows the record number and names of all Sengupta-s and Dasgupta-s)
$ awk -F"|" '$3==" Programmer" { print $2,$4,$5 }' name.lst
Raghab Das
Avaya 12000.00
Sumit kumar Basu Avaya 12000.00
Tamal Sen Sharma Avaya 12000.00
Raghab Dasgupta
Avaya 12000.00
Rajib Banerjee
Avaya 12000.00
(Shows 2nd,4th and 5th field of all records where 3rd field contains the
word ‘ Programmer’)
$ awk -F"|" '$3~ /Manager/ && $4~ /Nestle/ ' name.lst
0009 | Anindya Das
| Manager | Nestle| 30000.00|
(Shows the records where 3rd field contains the string ‘Manager’ and 4th
field contains the string ‘Nestle’.
$ awk -F"|" '$3!~ /Programmer|Accountant/' name.lst
0001 | Subhendu Majumdar | Team Lead | Avaya | 25000.00|
0012 | Damini Sen
| Operator | Nestle | 10000.00|
0007 | Akash Nag
0009 | Anindya Das
0019 | Sougata Das
| Salesman | Nestle| 7800.00 |
| Manager
| Nestle| 30000.00|
| Manager
| Avaya | 50000.00|
(Shows all records where 3rd fiels contains strings other than
Programmer and Accountant)
$ awk -F"|" '$5>=30000 { printf "%20s t t %d n" , $2, $5 }' name.lst
Anindya Das
30000
Sougata Das
50000
(Shows the name and salary of persons with salary >=30,000)
$ awk -F"|" '$3~ /Manager/ {
> kount = kount + 1
> print kount,$2 } ' name.lst
1 Anindya Das
2 Sougata Das
$ awk -F"|" '$5>=30000 { printf "%20s t t %d n" , $2, $5 }' name.lst
Anindya Das
30000
Sougata Das
50000
(Shows the name and salary of persons with salary >=30,000)
$ cat salavg.awk
BEGIN {
printf "\n\t\t Salary Report of Managers \n\n"
}
$3~ /Manager/ { kount++
tot = tot + $5
print kount,$2,$5
}
END {
print "\n\nTotal managers found is :",kount
print "Average salary is :",tot/kount
}
$ awk -F"|" -f salavg.awk name.lst
Salary Report of Managers
1 Anindya Das
2 Sougata Das
30000.00
50000.00
Total managers found is : 2
Average salary is : 40000
String Operators
(A) Concatenating Strings
x = “abc””def”
# x = abcdef
y = “ghi”
z=xy
# z = abcdefghi
Built-in String Functions
Functions
Significance
gsub( <reg>,<string>,<target>)
Substitutes string <string> in string
<target> every time the regular
expression <reg> is matched
index( <search>,<string> )
Returns the position of the string
<search> in string <string>
length(<string>)
Returns the length of the string
<string>
match( <string> , <reg>)
Returns the position in string <string>
that matches the expression <reg>
split(<string>,<store>,<delim>)
Splits string <string> into array
elements of <store> based on
delimiter <delim>
sub(<reg>,<string>,<target>)
Substitutes string <string> in <target>
the first time the regular expression
<reg> is matched.
Built-in String Functions
Functions
Significance
substr(<string>,<pos>,<len>)
Extracts the portion of the string
<string> starting from position <pos>
of length <len>
tolower(<string>)
Translates the string <string> rto
lower case
toupper(<string>)
Translates the string <string> rto
upper case
Use of Character Functions in awk
$ cat awkf.awk
$5 >= 30000 { print "Length of the string is : " , length ( $2 )
print "First three characters are : " , substr( $2,1,3 )
print "String in lowercase is : " , tolower( $2 )
print "String in uppercase is : " , toupper( $2 )
nm = substr( $2,2,4 )
print " 2nd to 5th characters are :", nm
}
Use of Character Functions in awk…Contd
$ awk -F"|" -f awkf.awk name.lst
Length of the string is : 19
First three characters are : An
String in lowercase is : anindya das
String in uppercase is : ANINDYA DAS
2nd to 5th characters are : Anin
Length of the string is : 19
First three characters are : So
String in lowercase is : sougata das
String in uppercase is : SOUGATA DAS
2nd to 5th characters are : Soug
Use of Character Functions in awk…Use of Split function
$ cat split.awk
BEGIN {
FS="|"
printf "\n Details of name of the Employees : "
print "\n\t Name \t\t\t\t First name \t\t Last name"
print "\n\t............................................................"
}
$5 > 15000 { split( $2 , a , " " )
print "\n\t", $2, "\t\t", a[1] , "\t\t" , a[2]
}
Use of Character Functions in awk…Use of Split function
$ awk -f split.awk name.lst
Details of name of the Employees :
Name
First name
Last name
………………………...........................................................
Subhendu Majumdar
Subhendu
Majumdar
Anindya Das
Anindya
Das
Sougata Das
Sougata
Das
Special String Constants
Expression
Significance
\\
Backslash
\a
Alert or bell character
\b
Backspace
\f
Formfeed
\n
Newline
\r
Carriage return
\t
Tab character
\v
Vertical tab
\”
Double quote
Built-in Numerical Functions
Expression
Significance
cos(x)
Cosine of x in radians
int(x)
Integer value of x
exp(x)
Returns e raised to power of x
log(x)
Natural log of x
rand( )
Returns random number between 0 and 1
sin(x)
Returns the sine of x in radians
sqrt(x)
Returns square root of x
systime()
Current time in seconds since midnight, Jan 1,1970
Arithmetic Functions
Expression
Significance
x^y
Raises x to the power of y
x**y
Raises x to the power of y
x%y
Calculates the reminder of division of x by y
x+y
Adds y to x
x-y
Subtracts y from x
x*y
Multiplies y with x
x/y
Divides ‘x’ by ‘y’
x++
Increments x by 1 and then uses it
++x
Uses x and then increments it by 1
y--
Decrements y by 1 and then uses it
--y
Uses y and then decrements it
Arithmetic Functions
Expression
Significance
x+=y
x = x+y
x-=y
x = x-y
x*=y
x = x*y
x/=y
x = x/y
x++=y
x=x+1+y
Arrays
Arrays are normally used to handle more than one related
piece of data.
One accesses the individual elements within an array by
enclosing the subscript within double brackets.
In AWK, one does not have to declare a variable to be an
array, and does not have to define the maximum no. of
elements. When one uses an element for the first time, it is
created.
In awk arrays, subscript is a string ; viz.,
tot_sales[“Cal”] = 10.15
One can use this in conditional flow:-
If “Cal” in tot_sales
Delete tot_sales[“Cal”]
Multidimensional Arrays
One can use two subscripts to form a multi-dimensional
array.
Example : tot_sales[“India”,”Calcutta”] = 100
And can use this in conditional statements also:-
If (“India”,”Calcutta”) in tot_sales
Examples of Arrays
BEGIN {
FS = "|"
print "\n\t Name \t\t Basic \t\t da \t\t hra \n"
print "---------------------------------------------------------------"
}
$3~ /Manager/ {
da = $5 * 0.25; hra = $5 * 0.3;
print $2 ,"\t" , $5 , "\t" , da , "\t\t" , hra ;
tot[1] += $5; tot[2] += da ; tot[3] += hra ; tot[4] += $5 + da + hra ;
}
END {
print "\n-------------------------------------------------------------"
print "Total" , "\t\t\t" , tot[1] , "\t\t" , tot[2] , "\t\t" , tot[3] ;
print "---------------------------------------------------------------"
print "\n\n Grand Total : ", tot[4] ;
}
Examples of Arrays…contd
$ awk –f salcalc.awk name.lst
Name
Basic
da
hra
--------------------------------------------------------------Anindya Das
30000.00
7500
9000
Sougata Das
50000.00
12500
15000
------------------------------------------------------------Total
80000
20000
24000
---------------------------------------------------------------
Multidimensional Arrays-Examples
$ cat pop.lst
India|Chennai|West|150000
India|Calcutta|North|234500
India|Calcutta|East|134500
India|Chennai|East|100000
India|Calcutta|South|234508
India|Calcutta|Wast|100500
Multidimensional Arrays-Examples…contd
$ cat pop.awk
BEGIN {
system(" tput clear " );
print "\n\nPopulation in different parts of the cities in
India\n\n"
FS = "|"
}
{ print $2 , "\t" , "\t" , $3 , "\t" , $4 ;
tot_pop[$1,$2]+=$4;
}
END {
print "--------------------------------------------------------"
print "Population for Calcutta : " ,tot_pop["India","Calcutta"];
print "Population for Chennai" , tot_pop["India","Chennai"];
}
Multidimensional Arrays-Examples…contd
$ awk –f pop.awk pop.lst
Population in different parts of the cities in India
Chennai
West 150000
Calcutta
North 234500
Calcutta
East 134500
Chennai
East 100000
Calcutta
South 234508
Calcutta
West 100500
-------------------------------------------------------Population for Calcutta : 704008
Population for Chennai 250000
Conditional Flow
{
if ………..
else if ……..
else if ……..
else ………
}
$ cat sal.awk
4 ~/Nestle/ {
if ( $5 > 10000 )
print $2 , $5 , "Taxable";
else print $2 , $5 , "Non taxable";
}
$ awk -F"|" -f sal.awk name.lst
Damini Sen
10000.00 Non taxable
Akash Nag
7800.00 Non taxable
Anindya Das
30000.00 Taxable
Conditional Flow
To substitute ‘if’ test anywhere in the code:condition ? True : false
$ cat sal.awk
$4 ~/Nestle/ {
$5 > 10000 ? taxyn = "Taxable" : taxyn = "Non taxable" ;
print $2 , $5 , taxyn ;
}
$ awk -F"|" -f sal.awk name.lst
Damini Sen
10000.00 Non taxable
Akash Nag
7800.00 Non taxable
Anindya Das
30000.00 Taxable
Loops
Loops can be of three types :
• Do
• While
• For
Used to perform some repeatitive jobs.
Do Loop
do
<statement>
While ( <conditions> )
statement in any of the above constructs may be either a simple
statement or a series of statements enclosed in { }
Example of Do Loop
$ cat doloop.awk
BEGIN {
linesep = "-"; linedraw = "-"; FS = "|";
}
{
res = $5 / 1000 ;
do
{ linedraw = linedraw"-" ; res--; }
while ( res >= 1 );
print $2 , linedraw ;
linedraw = linesep ;
}
Example of Do Loop…contd
$ awk –f doloop.awk name.lst
Subhendu Majumdar -------------------------Raghab Das
-------------
Sumit kumar Basu -------------
Tamal Sen Sharma ------------Ratna Sengupta
-------------
Raghab Dasgupta
Rajib Banerjee
-------------
-------------
Damini Sen
-----------
Akash Nag
--------
Anindya Das
-------------------------------
Sougata Das
---------------------------------------------------
While Loop
While ( <condition> )
statement
statement in any of the above constructs may be either a simple
statement or a series of statements enclosed in { }
Example of While Loop
$ cat while.loop
BEGIN {
linesep = "-"; linedraw = "-"; FS = "|";
}
{
res = $5 / 1000 ;
while ( res >= 1 )
{
linedraw = linedraw linesep ; res--;
}
print $2 , linedraw ;
linedraw = linesep ;
}
Example of While Loop…contd
$ awk –f while.loop name.lst
Subhendu Majumdar -------------------------Raghab Das
-------------
Sumit kumar Basu -------------
Tamal Sen Sharma ------------Ratna Sengupta
-------------
Raghab Dasgupta
Rajib Banerjee
-------------
-------------
Damini Sen
-----------
Akash Nag
--------
Anindya Das
-------------------------------
Sougata Das
---------------------------------------------------
For Loop
For ( <var> = <value> , var <operator> <value_last> , <var> [++|--]
<statements>
For ( <subscript> in <array> )
<statement>
statement in any of the above constructs may be either a simple
statement or a series of statements enclosed in { }
Example of For Loop
$ cat for.loop
BEGIN {
linesep = "-"; linedraw = "-"; FS = "|";
}
{
res = $5 / 1000 ;
for ( res = res ; res >= 1 ; res -- )
{
linedraw = linedraw linesep ; res--;
}
print $2 , linedraw ;
linedraw = linesep ;
}
Example of For Loop…contd
$ awk –f for.loop name.lst
Subhendu Majumdar -------------------------Raghab Das
-------------
Sumit kumar Basu -------------
Tamal Sen Sharma ------------Ratna Sengupta
-------------
Raghab Dasgupta
Rajib Banerjee
-------------
-------------
Damini Sen
-----------
Akash Nag
--------
Anindya Das
-------------------------------
Sougata Das
---------------------------------------------------
Loop Breaking Statements
Statement
Break
Continue
Significance
Exits the loop
Leaves the current record and continues with the next
record in the loop from beginning of the loop processing
statements.
Pretty formatting - printf
Syntax : printf( format_specifier, var1, var2,…..varn)
Format
Meaning
%c
Ascii character
%d
Integer
%i
Integer
%e
Floating point number using scientific notation
%f
Floating point number(eg., 10.43)
%s
String of characters
%g
Awk chooses %e or %f display format(whichever is
shorter) suppressing non-significant zeroes.
Output to another file
Statement
Significance
Printf( “Hello world\n”) > “datafile”
Creates a file called datafile
with the output
Printf( “Hello world\n”) >> “datafile”
Appends the output at the
end of existing file “datafile”
or creates a new file.
A file should be closed after it receives output from an awk
program.
Syntax : close(“filename”)
Functions
Block of code, accesses usually in multiple places in the code.
When awk reaches the end of the function, it implicitly
returns the control to the calling routine.
To make an explicit return to the main program, one can
explicitly use the return statement.
Syntax :
function fname(parameter list) {
< function_code>
}
Example of Functions
$ cat subcalc.awk
BEGIN {
FS = "|"
show_heading( "\n\t Name \t\t Basic \t\t da \t\t hra \n" ) ;
show_heading( "-------------------------------------------------");
}
$3~ /Manager/
{
da = calc_comp(0.25,$5) ; hra = calc_comp(0.3,$5) ;
print $2 ,"\t" , $5 , "\t" , da , "\t\t" , hra ;
}
function show_heading(heading) {
print heading ;
}
function calc_comp(rate,val) {
val = val * rate ;
return val ;
}
Example of Functions…contd
$ awk –f salcalc.awk name.lst
Name
Basic
da
hra
--------------------------------------------------------------Anindya Das
30000.00
7500
9000
Sougata Das
50000.00
12500
15000
Use of inputs from user in awk program
BEGIN {
FS="|"
printf "%20s%3d\n\n", "Cut-off basic pay : ",cobp
}
$5 > cobp {
kount++
print $2 , $3 , $5 , "\n"
}
END {
print "\n\n The End\n\n"
}
Use of inputs from user in awk program…Contd
$ awk -v cobp=15000 -f tkinp.awk name.lst
Cut-off basic pay : 15000
Subhendu Majumdar Team Lead 25000.00
Anindya Das
Manager
Sougata Das
Manager
The End
30000.00
50000.00
Controlling Environment
The Unix environment is controlled by a
number of pre-defined environment
variables.
They are usually defined in the file ‘.profile’
for the user or are defined by user as and
when required.
Pre-defined
variable
Significance
ERRNO
Non-zero exit code of last command that failed.
Value changes only when a command fails
LINENO
Meaningful only within a shell script. Its value is the
line no. of the line in the script currently being
executed
OLDPWD
Value is always the full pathname of the directory
where the control resided before coming into
current working directory
PWD
Current working directory
SECONDS
Integer number of seconds since one invoked the
Korn shell
PPID
Value of the process id of the parent process of $$
PATH
Absolute directory path under which the programs
for the commands reside.
Pre-defined
variable
Significance
EDITOR
Vi or emacs
CDPATH
List of colon separated directory name, which is
followed by the system when the user issues a ‘cd’
command
ENV
Pathname of the shell script containing commands
to be executed when the korn shell is invoked
HISTFILE
Filename of the korn shell history file
HISTSIZE
Integer number containing maximum number of
commands to be retained in history files
HOME
Pathname of home directory for an user
Pre-defined
variable
Significance
IFS
Zero/more characters to be treated by the shell as
de-limiters when parsing a command line into words
or using the read command
COLUMNS
Display width used by Korn shell edit mode- vi or
emacs
LINES
Integer number representing the number of lines
displayed by the terminal.
MAIL
Pathname of a file to be monitored by the shell for
a change in its date of last modification. If change
is noted, the shell issues the message : You have
mail at the next oppurtunity
MAILCHECK
No. of seconds after which the shell should check
for a change in the MAIL file
PS1
Primary shell prompt string.Prompt where commands
are issued by the user
Pre-defined
variable
Significance
PS2
Secondary prompt screen. Shown when a command
pawns more than one line.
PS4
Debug prompt screen , shown when a shell program
is executed using –v option.
SHELL
Pathname of the shell the user is using
TERM
Symbolic alpha numeric string that identifies the
type of your terminal
TMOUT
Seconds after which automatic logout occurs.
stty
Controls terminal output and sets terminal characteristics
Options
Significance
stty –a
Displays all current settings
stty –echoe
Enables backspacing remove character from the
display
stty –echo
Keyboard entry is not echoed
stty echo
Keyboard entry is echoed
stty intr ^Z
Sets <Ctrl-Z> as the interrupt key
stty eof \ ^a
Sets <Ctrl-a> to terminate output and declare end-offile, for eg., while creating file using cat command
stty erase ‘^H’
Typing <Ctrl-H> helps to remove the last character
typed
stty quit ‘^d’
Typing <Ctrl-d> enables aborting the current shell
Options
Significance
stty susp ‘^Z’
Enables suspending a foreground process when <ctrl-Z> is
pressed
stty stop ‘^S’
Enables halting the current session by pressing ‘^S’
stty start ‘^Q’
Enables starting the current halted session by pressing
‘^Q’
stty rows 20
Set 20 rows in display
stty rows 20
column 80
Sets 20 rows and 80 columns in display
stty iuclc
Maps uppercase alphabets to lowercase
stty olcuc
Maps lowercase alphabets to uppercase
stty size
Gives the current screen size in terms of rows and columns
stty eol ‘^J’
Pressing <Ctrl-J> does the job of ending a line
stty sane
Set the terminal characteristics to values that will work
for most terminals
Process
This section will give you a brief idea on
Process
Running Jobs
Scheduling Jobs
What is a process?
Process is a program that has its own address
space. Every command fired in Unix has a process
associated with it.
Is born when a program starts execution, and
remains alive as long as the program is active.After
execution is complete, it dies.
Has a name, usually the name of the program
being executed.
Kernel controls the process
Kernel is finally responsible for managing the
process.
Determines time and priorities allocated to
processed, enabling multiple processes to share CPU
resources.
Each one is uniquely identified by PID, Process
Identifier, allocated by the Kernel when it is born.
Sh Process
A process is immediately set up by the Kernel
when a user logs into Unix system.This os usually a
Unix command(sh/ksh/bash etc).
Any command executed is actually input to the
shell process.
Can be known from the value of shell variable ‘$$’.
This process for the shell remains alive till the user
logs out.
Parent and Child process
Every process has a parent process(except the
root process).
When a command is executed from the shell
prompt, that becomes a child process to the parent
shell process.
A parent process can ave more than one child
process
Cat name.lst| grep ‘student’
Both the process : cat and grep have same parent (shell)
process
ps – process status
Displays the attributes of a process
Command
Significance
ps
Selects the process associated with the current
terminal.Shows output in four columns: PID,
TTY(terminal info), TIME(total cpu time used by the
process), CMD(command gererating the process)
ps –f
Displays process ancestry.Produces 8 column
output:- UID(userid),PID,PPID(Parent PID), C( amt
of CPU time consumed by a process),STIME(time
the process started),TIME,CMD
Command
Significance
ps –u ems2000
Displays processed of user : ems2000
ps –a
Displays all processes of all users; excepting
the system processes
ps –x
ps –e
Shows command line in extended format
Displays system processes
How a process is created in Unix?
Forking : A copy of the the process that invokes a
new process is created.Child gets a new PID.
Exec : The parent then overwrites its image with a
copy of the program to be executed. Done with
exec system call. No additional process is created
at this stage.
Wait: Parent then executes the wait system call
to keep waiting for the child process to complete.
After the child process is completely executed, a
terminal signal is sent to the parent.
Internal and External Commands
External program : Commands like : cat, ls,
grep, sed etc are external programs.Shell creates a
process for each of these commands.
Shell Scripts : Shell executes shell scripts by
spawning to another shell, which then becomes the
parent of the commands featured in the script.
Internal Commands : These are commands
which are executed directly by the current shell.
No additional processes are generated.
Example : cd , echo etc
Running jobs in background
Unix is a multi-tasking system , allowing to
perform more than one job at a time.
One job can be executed in foreground at a time,
but many can be executed at background.
‘&’ operator at the end of the command line
interprets the job to be done at background. Shell
returns the PID of the background job for tracking.
Job control in Korn and Bash Shells
Korn or bash shell users can use the job control
facility of the shell to manipulate jobs.One can put
a job in the background, bring it back to
foreground, suspend it, run it later, or even kill it.
bg
You are running a job in the foreground.
It is taking a lot of time. You want to do some other jobs.
Press ^Z. The job running in the foreground will be
suspended.
Enter the command : bg at the OS prompt and push it to be
executed in the background.
Unix will return you a PID for the process pushed to
background.
jobs
Shows the jobs running in background.
Command : jobs –l prints PID of each job besides job
number.
This command is used by the user to push a job from
background to foreground.
fg
Used to bring a background job to foreground and execute
it.
fg [%<job_no>] brings the job from background to
foreground and executes it. For example , issuing of the
command : fg %2 executes job number 2 (viewed by jobs
command) from background to foreground and executes it.
Execution of fg command alone from the OS prompt
resumes latest created background process to be executed
inforeground.
stop
Syntax : stop [%<job_no>]
Pauses a job which is being executed in background.
One can use the command : bg to resume execution of
the stopped job in background or can issue command :
fg to bring it to foreground and execute it.
kill
Syntax : kill [options] <PID>
System often requires to control execution of a
process. This is done by sending signals to the process.
The process, after receiving the signal, may ignore it,
terminate itself, or do something else.
The command : kill is used to terminate or suspend a
process running in background, taking unusual long time.
Example
Significance
kill 2905
Kills the process with Pid : 2905
kill –9 2905
kill –s SIGKILL 2905
Surely kills a process with PID 2905
kill –15 2906
kill –s SIGTERM 2906
Terminates the process with PID
2906
kill –24 2900
kill –25 2900
Pause the process with PID 2900
kill –26 2900
kill –s SIGCONT 2900
Start the paused process with PID
2900
kill &!
Kill the latest background job
nice
Processes in the Unix are usually executed with equal priority.
But, high priority jobs must be executed at the earliest. Unix
offers : nice command to change the priority of execution of jobs.
Ordinary users can only reduce priority; super user can do both.
Nice value ranges from 0 to 39 ; commands run with a value of 20 in
both.
Example : nice –n 15 prog1.sh &
The above command reduces the pririty value to 35
The nice and priority values of the processes can be displayed with
ps –l command.
batch
Schedules job for later execution, when the system load
permits it.
Prevents too many high load jobs to run at the same
time.
Syntax for running a program : batch < prog1.sh
Any job scheduled in this way also goes to the at queue
and can be removed using : at –r , provided it is fired
before the job has been executed.
at
Schedules a program for execution at a specified time.
Displays a list of scheduled jobs.
Removes jobs from the scheduled list.
Flag
Significance
-l
Displays the list of jobs scheduled by the user
-m
Mail a report of successful execution of the job
-r <joblist>
Remove the jobs specified in the joblist from queue
Examples
Significance
at 2300 my_job.sh
at 11:00 pm my_job.sh
at 11:00 P my_job.sh
Executes program my_job.sh at
11:00 pm tonight
at 2300 today my-job.sh
at now + 6 hours njb.sh
Schedules execution of njb.sh after
6 hours from now
at 6:30 pm next week njb.sh Schedules execution of program :
njb.sh at 6:30 pm next week
at now + 1 year njb.sh
Schedules execution of program :
njb.sh after 1 year from now
at 3:08 pm + 1 day njb.sh
Schedules execution of program :
njb.sh at 3:08 pm tomorrow.
Examples
Significance
at 9 am Mon njb.sh
Schedules execution of njb.sh at 9 am
coming Monday.
at 9 am tomorrow
Schedules execution of njb.sh at 9 am
tomorrow.
at now + 5 minutes <
njb.sh
at –f njb.sh now + 5
minutes
at 08:15 Jan 12 < njb.sh
Schedules execution of njb.sh after 5
minutes from now.
Schedule execution of njb.sh at 08:15
am on January 24.
cron
Runs jobs periodically.
Mostly dormant, but wakes every minute and checks for
a file in /usr/spool/cron/crontabs directory for programs
to be executed at that instant.
A user may be permitted to place a crontab file after his
login name in this directory. This file contains a list of
commands, along with a schedule for execution.
Sample format for a crontab file
First field indicates number of minutes after the hour
when the command is to be executed. The range 00-10
schedules every minute in the first 10 minutes of the hour.
Second fields indicates the hour in the 24 hour format
for scheduling.
3rd field(1 to 31) controls the day of the month. ‘*’ means
all.
4th field(1-12) indicates the month
5th field(0-6) indicates the day of the week(Sunday with
0)
6th field contains the command
User can modify the file containing his cron commands as
follows:Create a file : cron.txt in the format described earlier.
Issue the following command from the Os prompt:
crontab cron.txt.
There will be now a file ‘ems2000’( for eg., the name of
the user) in /usr/spool/cron/crontabs with the contents of
cron.txt.
One can see the contents of crontab file issuing the
command : crontab -l
System Administration
System Administration
shutdown
Shutdown Unix server
su
Go as you like
wall
Send message to everybody
umask
Set Default Permission
ulimit
Set maxm. Space for user
du
Show disk usage
df
Free bytes available
finger
Show User information
crypt
Password protect a file
shutdown
Executed from the root user to shut down the system.
Commands
Significance
shutdown –g2
Powers down system after 2 minutes
shutdown –y –g0
Immediate shutdown
shutdown –y –g0 –i6
Shutdown and reboot
shutdown 17:30
Shutdown at 5:30 pm
shutdown –r now
Shutdown and reboot
shutdown –m
Bring the system down to
maintenance(single user mode)
su
Takes to super user mode.
Commands
Significance
su
Takes to super user mode. One can have all the
accesses same as the root user. Root password is
required after executing the command
su mat
One logs in as the user : mat. Asks for the
password.
wall
Addresses all the users simultaneously.
$ wall
………….
…………
^D
All the text written will be reflected in the terminals of all
the users.
$ wall < mesg.txt
Contents of the file mesg.txt are sent as the wall message.
umask
Used by System Administrator to set the default
permissions to assign to each file to be created by the
user.
User can modify this default settings.
To give permission 751 as a default to newly created
files, umask value will be (777 – 751) = 026.
This value is assigned as a command : umask 026
ulimit
Faulty programs or processes can eat up disk space.So, a
restriction is to be imposed on the mazimum size of a file that
an user is permitted to create.
Ordinary user can reduce the default value . Super user can
increase / decrease it.
Examples
Significance
ulimit –a
Shows soft limits
ulimit –Ha
Shows the hard limits
ulimit –t <size>
Set the CPU time in seconds
ulimit –f <size>
Set the maxm. Size in blocks
ulimit –d <size> Sets the maxm. size of data blocks in KB
ulimit –m <size> Sets the maxm. Size of memory in KB.
du
Shows disk usage – amount of space taken by a group of files in
units of 512 bytes or KB.
Descends all sub-directories from the directory in which the
command is fired.
Flag Significance
-a
Print entries for each file encountered in the directory
hierarchies in additional to the normal output
-k
Give the block count in terms of 1024 bytes
-s
Give the grand total of disk usage for each of the directories
-r
Print messages about directories that cannot be read, files
cannot be accessed etc.
df
Displays the number of free 512 byte blocks and free inodes
available for file systems by examining the count kept in the
superblocks.
Flag Significance
-b
Reports only the number of KB free
-e
Report the number of files free
-f
Reports only the actual count of the blocks in the free list
-i
Reports the total number of inodes, number of free inodes,
number of used inodes,% of inodes in use
-k
Reports the allocation in KB
finger
By default, the command finger lists for each user in the
system: Login name
 Full given name
 Terminal write status( if write permission is denied)
 Idle time
 Login time
 User’s home directory and login shell
 Project on which the user is working
 Any plan put by user in the file .plan under home directory
 Office location and telephone number
 Last time the user received the mail, the last time user
read the mail.
Flag Significance
-b
Suppresses information on home directory and shell
-f
Suppresses the header info
-h
Suppresses the project information
-i
Suppresses the info on idle time
-l
Suppresses long output
-p
Suppresses plan
-R
Print user’s hostname
-s
Forces short output format
Files accessed while showing output
File
Significance
/etc/utmp
Who file
/var/admin/utmp
Last login file
/etc/passwd
User’s name, office etc
/etc/.plan
User’s plan
/etc/.project
User’s project info
/var/mail
Mail directory
crypt
Used to encode/decode files using personal password
Options
Significance
crypt < uncrypted_file >
crypted_file
Crypts file ‘uncryped_file’ to
crypted_file. Asks for a password.
crypt passwd < file1 > file2
Crypts file : file1 to : file2 based on
the password : passwd
crypt passwd < file2 > file1
Decrypts file : file2 to : file1 using
the password : passwd
vi –x file2
Helps to view an encrypted file : file2.
Asks for a password
Communication
Communication
mailx
Send and receive mails
write
Send message to all users
ftp
Send and receive files
rlogin
Remote login
rcp
Copy files to remote server
mailx
Used to send/receive mails
Syntax for sending mails:echo <body> | mailx –s <subject> <remote_address>
cat <message file> | mailx –s <subject> <remote_address>
Syntax for receiving mails:mailx -e
mailx [-HL] [-u user]
mailx -f [-HL] [filename]
Sending mail
Case : 1
$ mailx –s “Test heading” smajum@avaya.com
this is a test mail for communication
~.
The job performed above will send a mail to : smajum@avaya.com
with subject of the mail as : Test heading and body of the mail as :
this is a test mail for communication.
Case : 2
$ mailx smajum@avaya.com
Subject : Test mail number 2
this is a test mail for communication
~.
The job performed above will send a mail to : smajum@avaya.com
with subject of the mail as : Test mail number 2 and body of the
mail as : this is a test mail for communication.
If no subject is entered at the command line, a prompt asks for the
subject.
Case : 3
$ echo “Hello mike”|mailx –s “Heading1” smajum@avaya.com
The job performed above will send a mail to : smajum@avaya.com
with subject of the mail as : “Heading1” and body of the mail as :
“Hello mike”.
Case : 4
$ cat msgfile| mailx –s “Heading1” smajum@avaya.com
The job performed above will send a mail to : smajum@avaya.com
with subject of the mail as : “Heading1” and body of the mail with
the texts written in the file : msgfile.
Case 5- You want to send a mail to some user and cc
it to some other users.
$ mailx smajum@avaya.com
Subject : Test mail number 2
this is a test mail for communication
~h
To: smajum@avaya.com
Subject: testing
Cc: ddatta@avaya.com
Bcc: shampac@avaya.com
(continue)
testing mail--please ignore
~.
EOT
.
Viewing received mails
mailx -e
mailx [-HL] [-u user]
mailx -f [-HL] [filename]
Flag
Significance
-e
Test for presence of mail. mailx prints nothing and exits with
a successful return code if there is mail to read.
0 Mail present
1 No mail
2 Other error
-f
Read messages from filename instead of the user's system
mailbox. If filename is not specified, the
secondary mbox is
used.
-H/-L
Prints header summary only
-u user
Read user's mailbox.Can be used only if read access to user's
mailbox is not read protected.
Options available in viewing received mail
When one executes mailx command for viewing received
mails:-
$ mailx
mailx Revision: 1.179.214.2
date: 98/12/01 01:29:55
Type ? for help.
"/var/mail/ems2000": 2 messages 2 unread
>U 1 smajum@avaya.com Mon Aug 18 04:50 33/1199 RE: 3rd mail
U 2 ems2000
schedule
Mon Aug 18 03:55 16/561 Program to be re-
?_
It shows a list of unread mails with a ‘?’ prompt below, waiting for
commands from the user.
Commands available at ‘?’ command prompt
Flag
Significance
<n>
Shows message number <n> , the number typed at the
first column for every message.
type
Shows all the messages in one shot, one by one
quit(q)
Quit mail utility
next
Shows next message
reply <n>
Reply to message number <n>
mail <user>
Opens mail utility to write mail to user <user>
write
Type text into other user’s terminal for information
Case : 1
$ write ems2000
Hello, how are you
^d
The command flashes the message : Hello, how are you to all
person’s terminal who have logged in as user : ems2000.
Case : 2
$ write ems2000 pts/tc
Hello, how are you
^d
The command flashes the message : Hello, how are you to that
person’s terminal who is working in terminal pts/tc and logged in as
user : ems2000.
Case : 3
$ write ems2000 < fileshow.txt
The command flashes the message written in the file : fileshow.txt
to all person’s terminal who have logged in as user : ems2000.
User must be logged in and mesg should be set to y( mesg=y) for
successful write communication.
ftp
Syntax : ftp [-i] [-v] [-n] <remote_host>
Copies file over a network connection between local host to remote
host. ftp runs on client server.
Flag Significance
-i
Disable interactive prompting by multiple file commands.
-n
Disable auto-login. If auto-login is enabled and user issues an ‘open’
command to establish connection to a remote server, he gets login
and passwd prompt. If it is disabled by ‘n’, user does not get such
prompts. He then writes: user <username> <passwd> in the ftp mode
to specify the user and password.
-v
-v Enables verbose output. IT shows the actions when files are
passed from one server to another.
Commands fired from ftp mode
Command
Significance
! <command>
Executes command <command> in the local server
append <lf> <rf>
Copy file <lf> in the local server to the end of file : <rf>
in the remote server. If no such file exists in remote
server, a new file is created.
ascii
Sets the file transfer type to ASCII
binary
Sets the file transfer type to binary
bye
Close the connection to remote host, if it is open, and
exit
case
Remote file names with name containing all letters in
uppercase are translated to lowercase when the file is
transported from remote server to local.
cd <remdir>
Set the working directory in the remote server to
<remdir>
cdup
Set the current directory of the remote server to the
parent of current working directory.
Command
Significance
chmod <mode> <file>
Changes the mode of the file : <file> to mode
<mode>
close
Terminate the connection to the remote server
mdelete <remote_files>
Deletes the files in the remote server
mdir <rem_files> <lcl_file>
Writes a list of remote files to local file
<lcl_file>
mget <rem_files>
Copy remote files to local system
get <rem_file> [<lcl_file>]
Copt the remote file to local file.
mkdir <dirname>
Creates a directory <dirname> in remote server.
mls <remfiles> <lclfile>
Writes an abbreviated listing of remote files to
local file <lclfile>
modtime <rem_file>
Shows the last modification time of remote file
<rem_file>
mput <local files>
Copy files from local server to remote server
delete <rem_file>
Delete file <rem_file> from the remote server.
The file can be an empty directory.
Command
Significance
dir <rem_dir> [<lcl_file>]
Shows a listing of remote directory <rem_dir>
to terminal/ into local file <lcl_file> .
disconnect
Close the connection to remote host
beep
Beeps when command is executed
lcd [local_dir]
Specifies the current working directory of the
local server to directory : <local_dir> . If
unspecified, user’s home directory is considered
for navigation.
newer <file_name>
get file if remote file <file_name> is newer
than local file <file_name>
prompt
Toggle forcing interactive prompting on multiple
commands
runique
Toggle store unique for local files. IF turned on,
then while receiving files from remote host, if a
remote file already exists with a name equal to
a local file, a ‘.1’ is appended to the name. For
another repeatition, a ‘.2’ is appended till 99
such cases are found.
Command
Significance
size <remote_file>
Shows the size of the remote file
quit
bye
reget <remfile>
[<lclfile>]
Acts like get. If local file <lclfile> exists and is
smaller than the remote file <remfile>, local file is
assumed to be partially transferred from remote
server.Then, the transfer is continued from the
apparent point of failure. This command is very
useful to transfer very large files over the
netwoprk that tend to drop connections.
status
Shows the current status of ftp- informations are
shown on remote server name and all the
settings(prompt,type,bell,case etc)
sunique
Toggle store unique for remote files. If turned on,
then while transferring files to remote host, if a
remote file already exists with a name equal to a
local file, a ‘.1’ is appended to the name of the file
transferred from local to remote server.. For
another repeatition, a ‘.2’ is appended till 99 such
cases are found.
Command
Significance
system
Shows the type of operating system running in
remote server
umask [new mask]
Set the default umask on the remote server to new
value. IF nothing is specified, the current umask
value of the remote server is displayed.
help [<command>]
If only help is typed from ftp prompt, it shows a list
of all commands that can be used from ftp prompt.
If a command is mentioned for help, it shows one
line help explaining its significance.
glob
toggle metacharacter expansion of local file names.
If put on, one can use ‘*’ , ‘?’ etc characters to
specify portion / all of the file name.
rlogin
Syntax : rlogin <rhost> [-l <username>]
Logs into remote host <rhost> as user <username> with/without any
password.
If the users are same on both remote and local server, then option
<username> is not required.
Prompting for password depends on the entries in file :
/etc/hosts.equiv or .rhosts under remote user’s home directory of
the remote server
rcp
Copies file(s)/directory(ies) from one server to another
Copy Single File
rcp [-p] <srcfile1> <rem_user> @<remserver>:<pathname>/<dest_file>
rcp [-p] <srcfile1> <remuser>@<remserver>:<dest_dir>
Copy Multiple Files
rcp [-p] <srcfile1> [<file2>]... <remuser>@<remserver>:<dest_dir>
Copy One or More Directory Subtrees
rcp [-p] -r <srcdir1> [<dir2>]... <remuser>@<remserver>:<dest_dir>
Copy Files and Directory Subtrees
rcp [-p] -r file_or_dir1 [file_or_dir2]... <remuser>@<remserver>:<dest_dir>
Copy files from server1 to server2 by server3
rcp <user1>@<server1>:<pathname>/<file>
<user2>@<server2>:<pathname>[/<file>]
Shell Programming
List of instructions written within a file.
Programming logics can be built in.
Executes a set of related instructions, saving
time,resource and imparts better control.
The file has to be executable to make the
thing work.
Invoking Sub-Shell manually
When a script file with execute permission starts running, it
runs in a sub-shell under the current shell.
One can invoke a sub-shell manually to execute the scripts :$ sh prog1.sh
Or
$ sh < prog1.sh
where prog1.sh is the name of the program. It may not have
execute permission at this point of time.
Execute a script in the current shell
Syntax :
. <progname>
Whenever a shell script is executed, it runs in a sub-shell under
the current shell. To make the script run in the current shell, one
have to trigger the program as : . <progname>. The program
need not have execute permission before executing in this
fashion.
Specifying the type of shell
There are different kind of shells with different utilities and
syntaxes. A shell script running fine in Korn shell, may not run ok in
Bourne shell.
To specify the interpreter shell, one can execute the program
from OS prompt as :$ ksh < prog1.ksh
This will execute program prog1.ksh using Korn shell as the
interpretor.
It is always a better approach to specify the shell at the first line of
the program:-
#!/bin/ksh
Reading from Keyboard
The most common practice of any programming is to
take input from user at runtime and act on that.
‘Echo’ and ‘read’ statement in shell scripts help us to
achieve that.
$ cat prog1.sh
$ prog1.sh
Echo “Enter name:\c”
Enter name: Suman
read p_name
Hello Suman
Echo Hello $p_name
Defining own variables
Defining global and local variables for programming is an
indispensable practice.
One can declare it at the top of the program /anywhere at the
time of usage.
Example
Significance
g_val=20
Declares a variable : g_val and assigns
a value 20 to it.
g_name=‘two words’
Declares a variable : g_name and
assigns a value ‘two words’ to it.Place
the value to be assigned within quotes
if contains more than one words
Example
Significance
g_val=“”
g_val=‘’
g_val=
Assigns null value to the variable g_val
let g_cnt=20
Declares a variable : g_cnt and assigns a value
20 to it.
g_cnt=20
readonly g_val
Makes the value in the variable : g_cnt
readonly. Further change in the value is not
allowed.
unset g_cnt
Wipes off the value from variable : g_val.
Special parameters used by Shell
Shell uses some special parameters which imparts us
different information on a program/command ,
various arguments passed to it, success/failure of the
program etc.
Parameters
Significance
$0
Name of executed program/command
$1,$2….
First, second etc arguments passed to a program
$*
Complete set of positional parameters as a single
string
$#
Number of arguments passed in command line
$?
Exit status of last command
Parameters
Significance
$!
PID of last background job
$$
PID of the current shell
$_
Argument passed to the last command
Set – Manipulating Positional Parameters
The command : set can be used to manipulate
different positional parameters($1,$2…) from a string
/ output of a command
$ set Happy birthday to you
$ set `date`
$
$
$echo $1 $2
$echo $1 $3 $2 $6
$ Happy birthday
$ Fri 19 Aug 2003
Shift- Shifting Positional Parameters
At a time, one can have values for 9 positional
parameters( $1 to $9). To shift their values one place
to the left, this command is used.
$ set I know this is not a valid issue to discuss at the
meeting before the board of directors
$echo $1 $2 $3 $4 $5 $6 $7 $8 $9
$ I know this is not a valid issue to
$ shift; echo $1 $2 $3 $4 $5 $6 $7 $8 $9
$ know this is not a valid issue to discuss
Performing Calculations
Expr, echo let and (( )) comes handy
cnt_val=`expr $cnt_val + 1`
cnt_val=`echo $cnt_val + 1|bc`
let cnt_val=cnt_val + max_limit
((z=x+y+2))
cnt=`expr $a \* 2`
a=`expr $rt / 2`
per=`expr \( $m1 + $m2 \) / 5`
echo
Displays strings , values in terminal or stores them in
files.
Examples
Significance
echo Hello dear
String : Hello dear shown in terminal
echo hello `hostname` String : Hello sb1dtl02 shown in terminal
a=256; echo $a
The value of variable a is displayed in
terminal
string=happy; echo
“$string”>del
Creates a file called : del or overwrites an
existing file , the content of the file
being : happy
Echo “$string”>>del
Appends the contents o the variable
$string at the end of the file : del
Escape sequences used with echo to format output in
terminal
Sequence Significance
\033[0m Normal display
\033[1m
Bold display
\033[4m Underlined display
\033[5m Blinking display
\033[7m Display in reverse video
\07
Beep
\b
Backspace
\t
Tab
\r
Carriage return
\c
Positioning the cursor after the statement
tput
Syntax : tput [<options>]
Formats display
Options
Significance
clear
Clears the screen
cup r c
Moves cursor to row r and column c
bold
Bold display
blink
Blinking display
rev
Reverse display
smul
Starts mode underline
rmul
Ends mode underline
bel
Bells the terminal
lines
Echoes no. of lines in the screen
ed
Clear to end of display
el
Clear to end of line
Decision making – If
Making decisions based on conditions is the most
popular practice in every programming language.
Shell provides decision building using “If” statements.
If <conditions>
If <conditions>
If <conditions>
then
then
then
<actions>
<actions>
<actions>
else
elif <conditions>
fi
<actions>
fi
then
<actions>
else
<actions>
fi
echo "Enter a value:\c"
read val
if test $val -gt 100
then
echo Value $val greater than 100
elif test $val -ge 50 -a $val -lt 100
then
echo Between 50 and 100
elif test $val -gt 0 -a $val -lt 50
then
echo Between 50 and 100
else
echo No comments
fi
Test
Used to compare numerical values,strings,find
properties of different files etc.
Numericl test operators Significance
-gt
Greater than
-lt
Lesser than
-eq(=)
Equal to
-ne(!=)
Not equal to
-ge
Greater than or equal to
-le
Lesser than or equal to
String test operators
Significance
string1 = string2
True if string1 is same as string2
string1 != string2
True if string1 is not equal to string2
-n string
True if string length >0
-z string
True if string length = 0
while [ -z "$userid" ]
do
tput cup 5 5
echo "Enter userid:\c"
read userid
done
if test $userid = super
then
tput cup 11 5
echo No such userid allowed
exit
fi
while [ -z "$pswd" ]
do
tput cup 7 5
echo "Enter password:\c"
stty -echo
read pswd
stty echo
done
while [ -z "$npswd" ]
do
tput cup 9 5
echo "Confirm password:\c"
stty -echo
read npswd
stty echo
done
if test $pswd = $npswd
then
tput cup 11 5
echo o.k
else
echo wrong entry....
fi
And,Or
Operators
Significance
-a
and
-o
or
echo "Enter city and state:\c"
E
x
a
m
p
l
e
read city state
if test $city = cal -a $state = wb
then
echo You stay in Calcutta and in West Bengal
elif test $city != cal -a $state = wb
then
echo You stay in West Bengal, not in Calcutta
elif test $state != wb -a \( $city = bom -o $city = del \)
then
echo you stay in other metros
fi
Case
Used to build logic depending on different values of
same object.
Syntax
case <variable> in
<value1>) <actions> ;;
<value2>) <actions> ;;
*) <actions>
esac
echo "Enter an animal:\c"
read animal
case "$animal" in
[Tt]iger|[Ll]ion) echo He is the king;;
Crow|Sparrow|parrot) echo They are birds;;
[0-9]*) echo Name cannot start with numbers;;
?) echo You entered a single alphabet only;;
??) echo You entered two alphabets only;;
[hH]ip*m*) echo Is it hippo?;;
*) echo Correct entry , but could not be identified
esac
Loop processing
Three common loops used in shell scripts are :1. While
2. Until
3. For
While
Syntax
while <condition is true>
do
<actions>
done
while [ -z "$userid" ]
do
tput cup 5 5
echo "Enter userid:\c"
read userid
done
Until
Syntax
until <control does not return true>
do
<actions>
done
echo "Enter number:\c"
read no
until [ $no -gt 10 ]
do
echo $no
((no=no+1))
done
# till $no is not greater than 10
For
Syntax
for <variable> in <value1> <value2> <value3> ….
do
<actions>
done
for city in bombay delhi calcutta
do
echo $city is a metro city
done
Loop breaking statements
Statement
Significance
break
Control comes out of the loop completely
continue
Does not proceed with current record further and starts
processing the next record from the start of the loop
n=20
while [ $n -le 100 ]
do
echo $n
((n=n+1))
if test $n -eq 30
then
break
fi
done
n=0
while test $n -le 10
do
((n=n+1))
if test $n -eq 5
then
continue
fi
echo $n>>del
done
Sleep
Syntax: sleep < number of seconds>
Idly waits for number of seconds specified. Mainly
used to display an event clearly to user.
Basename
Extracts the base filename from an absolute
pathname
Example:$ basename /home/ems2000/shell_scripts/ppc1.sh
ppc1.sh
When used with second argument, it strips off the
second argument from the first
Example:-
$ basename ppc1.sh .sh
ppc1
The here document (<<)
Shell offers a mechanism of data to be read by a shell script
to be read from itself rather than from another file. The here
operator(<<) comes handy.
E
x
a
m
p
l
e
echo "Enter city code:\c"
read city_code
grep "^$city_code" << stcity
01 Calcutta
02 Bombay
stcity
if [ $? -ne 0 ] ; then
echo invalid code
fi
Putting all the inputs at a time
A program may ask for different inputs several times and at
several points of execution.Instead of putting the inputs when
they are asked for by the program, one can put all of them at a
time while calling the program for execution.
echo “First name:\c"
read fname
echo “Middle name:\c"
read mname
echo “Last name:\c"
read lname
echo your full name is
$fname $mname $lname
$ prog8.sh<<end
> soma
> sen
> gupta
> end
First name:Middle name:Last
name:your full name is soma sen
gupta
Set -- : Help Command Substitution
Command ‘set’ is often required with command substitution.
If the output of the command executed begins with ‘-’( as with ls –l),
‘set’ interprets it as one of its options ,thus giving error messages.
By default, set displays all environment variables. This creates
problem when the argument in its command line evaluates to null
string ( for eg., in set `grep <srchstring> <filename(s)> ` statements.
IF the pattern cannot be located, set will operate with no arguments
and will display all the environment variables on the terminal.
To avoid this, use : set -- `command line` option.
echo "Enter city code:\c"
read city
set --`grep "^$city" <<tillend
01 Calcutta India WestBengal
02 Mumbai India Maharashtra
tillend`
if [ $? -eq 0 ] ; then
echo "\n\tCity code : $1"
echo "\n\tCity name : $2"
echo "\n\tCountry : $3"
echo "\n\tState
else
echo Invalid code
fi
: $4"
Command grouping
Group Significance
()
Executes the commands placed inside ‘(‘ and ‘)’ separated by ‘;’
in a sub-shell under the current shell. They have the same
PID
{
}
Same as above; but uses current shell only. The closing curly
brace must be on a separate line. To have both the braces on
the same line, terminate the last command with a ‘;’
$pwd
/home/ems2000
$ ( cd scripts;pwd )
/home/ems2000/scripts
$pwd
/home/ems2000
$pwd
/home/ems2000
$ { cd scripts;pwd; }
/home/ems2000/scripts
$pwd
/home/ems2000/scripts
Conditional Execution
Group
Significance
cmd1 && cmd2
Command cmd2 is executed only when
command cmd1 succeeds
cmd1 || cmd2
Command cmd2 is executed only when
command cmd1 fails
cmd1 || cmd2 && cmd3
Metacharacter coming first gets higher
priority
$grep ems2000 prog.sh && echo “String found”
String found
$ grep ems99876 prog.sh || echo “String not found”
String not found
String Handling
Syntax
Significance
$ expr “<string>” : ‘.*’
Finds the length of the string :
<string>
$ expr “<string>” : ‘…\(..\)’
Extracts the fourth and fifth
character from the string
$expr “<string>” : ‘[^d]*<char>’
Locates position of character <char>
in the string <string>
Example
Significance
$ expr “Training” : ‘.*’
8
Finds the length of the string :
Training
$ expr “Subhendu” : ‘…\(..\)’
he
Extracts the fourth and fifth
character from the string
$expr “Anamoly” : ‘[^d]*l’
6
Locates position of character ‘l’
within string : Anamoly
Conditional Parameter Substitution
Syntax : {<variable> : <option> <stg>}
Option Significance
s
+
Variable <var> evaluates to <stg> if <var> is defined and a nonnull string is assigned to it.
dir1=`ls`
echo ${dir1:+”This directory is not empty”}
-
Variable <var> is evaluated to <stg> if it is undefined or
assigned a null string
Echo “Enter directory to be copied:\c”
read dirto
dir_child=${dirto:-/home/ems2000/scripts}
IF dirto is null or not set, dir_child=/home/ems2000/scripts.
The value of dirto is still null
Options Significance
=
If the variable <var> is null, it is assigned the string <stg>.
echo “Enter filename:\c”
read flname
grep $pattern ${flname:=emp.lst}
IF flname is null, flname=emp.lst
?
Evaluates the parameter if the variable is assigned and nonnull, otherwise it echoes the string following it. The shell is
also terminated.
This option is useful in terminating a script if the user fails
to respond properly to shell directives.
echo “Enter pattern:\c”
read pattern
${pattern:? “No pattern”}
Shell variables($1,$2 etc) can also be used instead of <var>
Merging Streams
Usually, the inputs required for a program are typed in by user
in terminal, all the outputs in terms of messages and all the error
messages ( shell genarated) are shown in the terminal .
But, one can make a program take inputs from a file, store
outputs(messages) and / or error messages in a file, instead of
displaying them in a terminal.
Symbol Significance
0
Standard input
1
Standard output
2
Standard error
Example
Significance
$ prog2.sh > sclist
All the output messages and prompts will be
taken into file : sclist. However, the inputs to
the program will be received from terminal.
$ cat prog2.sh
echo "Enter pattern:\c"
read pattern
echo “\nPattern is $pattern"
$ prog2.sh > outlist
Patternfromterminal
$
$ cat outlist
Enter pattern:
Pattern is Patternfromterminal
$
# Enter pressed
# written from terminal
Example
Significance
$ prog1.sh <
namelist
All the inputs prompted by program prog1.sh are
taken from file : namelist
$ cat prog1.sh
echo "Enter first name:\c"
read fname
echo “\nEnter last name:\c"
read lname
echo “\nWelcome $fname $lname"
$ cat namelist
Suman
Das
$ prog1.sh <namelist
Enter first name:
Enter last name:
Welcome Suman Das
Example
Significance
$ prog1.sh < namelist > sclist
All the inputs prompted by
program prog1.sh are taken from
file : namelist and all the output
messages are stored in file : sclist
$ cat prog1.sh
echo "Enter first name:\c"
read fname
echo “\nEnter last name:\c"
read lname
echo “\nWelcome $fname $lname"
$ cat namelist
Suman
Das
$ prog1.sh <namelist >sclist
$ cat sclist
Enter first name:
Enter last name:
Welcome Suman Das
Example
Significance
$ 1>&2
Send the standard output to the destination of standard
error
$ cat prog2.sh
ans=y
while [ "$ans" = "y" -o "$ans" = "Y" ]
do
echo "\n Enter city:\c" 1>&2
read city
echo "$city"
echo "\n More(y/n):\c" 1>&2
read ans
done
$prog2.sh > out.1
Enter city:calcutta
More(y/n):y
Enter city:bombay
More(y/n):n
$cat outlist
calcutta
bombay
Example
Significance
$ 2>&1
Send the errors to the destination of standard output
$ cat prog3.sh
echo "Searching all the .kkl
files"
ls -ltr *.kkl
$ prog3.sh
Searching all the .kkl files
*.kkl not found
$prog3.sh > out.2
*.kkl not found
$cat out.2
Searching all the .kkl files
*.kkl not found
$ prog3.sh>out.2 2>&1
$
$cat out.2
Searching all the .kkl files
Using subroutines
Using subroutines is one of the most popular practice in any
programming language.
Codes in a subroutine does a piece of job. It can take inputs from
an user, do some jobs and can return some value to the calling
program.
Subroutines are used to:• Modularize program sections.
•Perform repeatitive jobs.
•Do Calculations.
Syntax:<subroutine_name> {
<actions>
}
function <function_name> {
<actions>
}
Inputs to a subroutine are identified within the subroutine as :
$1,$2,$3 …etc.
A subroutine is called from a program as :<subroutine_name> [ <value1>] [ <value2> …]
Subroutines are always declared at the top of a program
Passing values to subroutines
$ cat prog0.sh
show_name() {
case "$1" in
[bB]) tput bold
echo "$2";;
[lL]) tput rev
echo "$2";;
*) tput rmso
echo "$2"
esac
}
show_name b `whoami`
show_name l `hostname`
show_name n `uname -r`
show_name n “The End”
Subroutine returning values
$ incr_val() {
sum=`expr $1 + 1`
echo $sum
}
no=12
no=`incr_val $no`
echo value is $no
$ prog2.sh
value is 13
$ function show_name {
grep "$1" *.ksh
if [ $? -eq 0 ] ; then
return 1
else
return 2
Fi
}
echo "Enter pattern:\c"
read pattern
show_name "$pattern"
if [ $? -eq 1 ] ; then
echo "Pattern found..."
else
echo "Not found"
fi
Download