Top Banner
The Korn Shell (ksh) CS465 – Unix
44

The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

Dec 20, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

The Korn Shell (ksh)

CS465 – Unix

Page 2: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

ksh Shell

• The Korn (ksh) shell– Scripting syntax is compatible with the

standard Bourne (sh) shell

– Included in Unix operating systems from most vendors (Sun Solaris, SGI IRIX, Linux, etc.)

– Provides some extra features:• Command aliasing

• Easier user input and math calculations

• Command history

• Command-line editing

Page 3: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

Command Aliases

Aliases allow you to define your own commands• Format:

$ alias [-x] name=definition

• Examples:$ alias ll="ls -la"

$ alias dir="ls -F"

$ alias –x home="cd;ls"

$ alias –x rm="rm -i"

Using the –x option “exports” the alias.

Page 4: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

Command Aliases

• To remove aliases:$ unalias name

• To show all aliases:$ alias

• If you put the alias commands in your .profile or .kshrc file, you can use them every time you login.

Page 5: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

Displaying Alias Values

• To determine which command a specific alias will run, use either alias OR whence:

$ alias ll="ls -la"

$ alias ll

ll='ls –la'

$ whence ll

ls –la

$

Page 6: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

The Dash (-) Character• Dash (-) represents the previous working directory. When used to

cd, it automatically displays the current directory path.

• Example: Switching between one of your subdirectories and the system bin directory:

$ pwd/home/user1/sub1$ cd /bin$ pwd/bin$ cd -/home/user1/sub1$ cd -/bin$

Page 7: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

The let command

• let provides built-in integer handling that easier to use and 10-30 times faster than expr

• Syntax:$ let math-expression

NOTE: Use = to assign values

• Examples

$ let i=i+1

$ let "prod = 12 * 6" Double quotes allow spaces and no backslash on *

Page 8: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

The let commandCan use (( instead of let )):

x=3y=4((z = x * y)) Result: z = 12

((z = z + 1)) Result: z = 13

Notes: - No dollar sign ($) needed to access variable values

- Double parentheses act as quotes, so you can add spaces and don’t need to backslash metacharacters

Page 9: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

let Operators– Integer operators:

+, -, *, /, %

– Integer comparisons: <, <=, ==, !=, >=, >

– Compounds

&& (and), || (or), ! (not)

NOTE: No backslashes needed inside (( ))

Page 10: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

Bourne vs Korn Comparison

• Korn Shell

• Bourne Shell

[ $num -ge 0 ]

(( num >= 0 ))

[ $num1 -gt 0 -a $num2 -lt 100 ]

(( num1 > 0 && num2 < 100 ))

result=`expr calculation`

(( result = calculation ))

Page 11: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

let example

i=1

total=0while (( i <= 100 ))do

(( total = total + i ))(( i = i + 1 ))

doneecho $total

Page 12: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

Korn Additional test Operators

• The Korn shell also extends the test expression from the Bourne shell.

• By using two sets of square brackets, instead of one set, the system uses the Korn shell (instead of Bourne) to test specific conditions.

[[ test-condition ]]

Page 13: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

Korn Additional test Operators

File Operators:-a file file exists

-L file file exists and is a symbolic link

f1 -ef f2 file1 and file2 are linked

f1 –nt f2 file1 is newer than file2

f1 –ot f2 file1 is older than file2

Logical operators:

&& logical AND

|| logical OR

Page 14: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

Korn test example

$ cat lsdir

#! /bin/ksh

# lists directory contents if yours

if [[ -d $1 && -O $1 ]]

then

ls -l $1

else

echo Error - not a directory or not yours!

fi

exit

$

Page 15: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

Command History• The Korn shells supports a history feature

that lets you recall previous commands, performing a substitution if necessary.

• The history command displays the previous 16 commands:

$ history

• Common Alias:

$ alias h="history"

Page 16: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

r (recall/rerun command)

r alone repeats the last command.

r 11 repeats command number 11

r -2 repeats the command before the last one.

r d repeats the last command that started with a “d”.

r sort one=two repeats previous sort command using two instead one.

Page 17: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

History Variables

• HISTFILE contains name of your history file

HISTFILE=$HOME/.myhist• If you do not provide a name, then the Shell uses:

$HOME/.sh_history

• HISTSIZE contains how many commands to save– Default (to save) is 128 (but show only last 16)

HISTSIZE=50

Page 18: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

In-Line Command Editing

• You can perform vi in-line editing of the command line

• In-line edit mode enables you to edit a previous command on the current command line

• Use vi commands to move and edit the previous command line

Page 19: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

Turning On/Off Editing

$ set [-+]o vi

set -o vi turns command-line editing on

set +o vi turns it off

Once turned on, ESC key activates the in-line editor

To use:

Press the ESC key to activate in-line editing.

Press – (or k) until the desired command appears.

Edit using vi commands, then press ENTER.

Page 20: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

Using Command Line Editing

• Your command line now becomes a single line editor window into the command history file.

• The single line you start viewing is the current Shell command line.

• You can move to other lines by using the editor move commands (- moves backwards, + moves forwards).

• Editor search commands can also be used to select the line being viewed.

Page 21: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

<ESC> Enter command mode

i/a Enter insert mode and add text before/after cursor

l Move cursor right

h Move cursor left

fc Move to character c

x Delete character

dw Delete one word

$ Move to end of line

<Enter> Execute the command

Some vi for Command Line Editing

Page 22: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

Using Filename Completion

• Automated completion of a filename used as an argument to a command.

• To initiate, use the <ESC> key and a backslash

• Example:$ lsfile1 file2 fileofstuffnotes subdir whynot$ vi n<ESC>\

Uses vi to edit the file notes

Note: Only works when file completion is unique

Page 23: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

• If the filename is NOT unique, you can get a list of choices by using: <ESC>=

• Example:$ cat f<ESC>=1) file12) file23) fileofstuff$ cat f_

Now when you press a number (1-3), that file is chosen and used to complete the command.

Filename Completion Choices

Page 24: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

Additional Korn Shell Variables

$PPID the shell's parent process' PID

$_ last parameter of previous command

$RANDOM randomly generated integer (0-Max)

$ENV pathname of Korn shell environment startup file

$OLDPWD working directory set before current one

$EDITOR pathname of editor to use for line editing

$PS3 prompt for select loops (default is #?)

$TMOUT number of seconds to wait before exiting shell if no command is given

Page 25: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

OLDPWD example

$ pwd

/home/smith123/cprogs

$ cd /etc

$ pwd

/etc

$ cd $OLDPWD

$ pwd

/home/smith123/cprogs

Page 26: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

New Pattern Matching

~ home directory(equivalent to $HOME)

~username username’s home

~+ current working directory(equivalent to $PWD)

~- previous working directory(equivalent to

$OLDPWD)

Page 27: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

Using Tilde Substitution$ pwd

/home/smith123/progs/cprogs

$ cd

$ pwd

/home/smith123

$ cd ~-

$ pwd

/home/smith123/progs/cprogs

$ cd ~jones456

$ pwd

/home/jones456

Page 28: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

Reading User Input

• Korn shell provides one command that will BOTH “echo” and “read”:

• Syntax:

$ read 'varname?prompt'

• Examples:

$ read 'name?Enter your name: '

$ read 'year?Current year? '

Page 29: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

read Example

$ mulEnter a number: 5Enter another number: 85 times 8 is 40$

$ cat mulread 'num1?Enter a number: 'read 'num2?Enter another number: '(( prod = num1 * num2 ))echo $num1 times $num2 is $prod$

Page 30: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

until statement

until [ condition ]do

command(s)

done

• Same condition syntax as if statement

• Begin and end of command block defined by keywords do…done

• Loops UNTIL condition is TRUE

Page 31: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

until Example

Read in a number from a user, and verify the number is positive.

$ cat posnum#! /bin/sh# Read positive number from usernum=0until [ num -gt 0 ]doecho Enter a positive non-zero number:read num

doneecho You entered $numexit 0$

Page 32: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

until Example

Read in a number from a user, and verify the number is positive.

$ cat posnum#! /bin/sh# Read positive number from usernum=0until (( num > 0 ))doecho Enter a positive non-zero number:read num

doneecho You entered $numexit 0$

Page 33: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

until Example Execution

$ posnumEnter a positive non-zero number:-50Enter a positive non-zero number:0Enter a positive non-zero number:12You entered 12$

Page 34: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

select statement

select var in listdo

command(s)

done

• Implements a menu from within a loop. Automatically displays a numbered list of choices, and interpret the number that the user enters.

• Begin and end of command block defined by keywords do…done

Page 35: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

select statement

• You must still use the case control structure to evaluate the choice chosen, but the structure will loop automatically unless you have chosen to exit.

• If your menu options consist of multiple words, they must be enclosed in double quotes.

Page 36: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

select example$ cat junkit#!/bin/ksh# Menu-driven junkit scriptjunk=$HOME/junkdir## If junkdir directory doesn't exist, create itif [[ ! (-d $junk) ]]then 'mkdir' $junk

fi#select choice in "List junk" "Delete junk" "Junk files" "Exit"

do case $choice in "List junk")

ls -lgF $junk;;

Page 37: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

select example

"Delete junk") rm $junk/*;;

"Junk files") read 'filelist?Enter files to junk: ' mv $filelist $junk;;

"Exit") break;;

*) echo Invalid choice; please try again;; esacdoneexit 0$

NOTE: The break command is used to exit the loop.

Page 38: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

select execution

#? 3Enter files to junk: p2.c#?

$ pwd/export/home/jmsmith$ junkdir1) List junk2) Delete junk3) Junk files4) Exit#? 1total 0#?

#? 1total 2-rw------- 1 jwsmith 122 May 7 13:19 p2.c#? #? 2#? 1total 0#? 4$

Page 39: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

Other Korn Additions:String Length

• Length of string: ${#varname}– Returns length of string stored in variable

• Example:$ cat namelenname="Pam Smallwood"echo ${#name}$ namelen13$

Page 40: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

Other Korn Additions

• Forcing Command Execution– In addition to the back quotes (graves)`command`

– In Korn you can use: $(command)

• Example:$ name=$(whoami)

$ echo $name

small000

$

Page 41: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

Sample .kshrc file

# Set command aliasesalias rm='rm -i 'alias rename='mv 'alias c clear# Set environment variablesPATH=$PATH:.PS1="$PWD[!] $ " EDITOR=vi# Export global variablesexport PATH EDITOR PS1# Set history variablesHISTSIZE=40

Page 42: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

Default .profile

• Review handout

Page 43: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

Capturing a Terminal Session

• You can capture what your terminal display to a file using the command script

• Syntax: $ script filename

• Everything that appears on your screen will be captured in the file, until you enter <ctrl-d>

Page 44: The Korn Shell (ksh) CS465 – Unix. ksh Shell The Korn (ksh) shell –Scripting syntax is compatible with the standard Bourne (sh) shell –Included in Unix.

Terminal Session Example

$ script session1Script started, file is session1$

$ cat session1$ pwd/export/home/small000$ dateThu May 22 19:34:25 MDT 2003script done on Thu May 22 19:34:29 2003$

pwd/export/home/small000$ dateThu May 22 19:34:25 MDT 2003$ <CTRL-d>Script done, file is session1$