Presentation is loading. Please wait.

Presentation is loading. Please wait.

CS465 – Unix The Korn Shell (ksh).

Similar presentations


Presentation on theme: "CS465 – Unix The Korn Shell (ksh)."— Presentation transcript:

1 CS465 – Unix The Korn Shell (ksh)

2 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

3 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.

4 Command Aliases To remove aliases: To show all 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.

5 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 $

6 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 $

7 The let command let provides built-in integer handling that easier to use and 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 *

8 The let command Can use (( instead of let )): x=3 y=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

9 let Operators Integer operators: +, -, *, /, % Integer comparisons:
<, <=, ==, !=, >=, > Compounds && (and), || (or), ! (not) NOTE: No backslashes needed inside (( ))

10 Bourne vs Korn Comparison
Bourne Shell result=`expr calculation` (( result = calculation )) [ $num -ge 0 ] (( num >= 0 )) [ $num1 -gt 0 -a $num2 -lt 100 ] (( num1 > 0 && num2 < 100 )) Korn Shell

11 let example i=1 total=0 while (( i <= 100 )) do (( total = total + i )) (( i = i + 1 )) done echo $total

12 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 ]]

13 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

14 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 $

15 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"

16 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.

17 History Variables HISTFILE=$HOME/.myhist $HOME/.sh_history HISTSIZE=50
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

18 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

19 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.

20 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.

21 Some vi for Command Line Editing
<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

22 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: $ ls file1 file2 fileofstuff notes subdir whynot $ vi n<ESC>\ Uses vi to edit the file notes Note: Only works when file completion is unique

23 Filename Completion Choices
If the filename is NOT unique, you can get a list of choices by using: <ESC>= Example: $ cat f<ESC>= 1) file1 2) file2 3) fileofstuff $ cat f_ Now when you press a number (1-3), that file is chosen and used to complete the command.

24 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

25 OLDPWD example $ pwd /home/smith123/cprogs $ cd /etc /etc $ cd $OLDPWD

26 New Pattern Matching ~ home directory ~username username’s home
(equivalent to $HOME) ~username username’s home ~+ current working directory (equivalent to $PWD) ~- previous working directory (equivalent to $OLDPWD)

27 Using Tilde Substitution
$ pwd /home/smith123/progs/cprogs $ cd /home/smith123 $ cd ~- $ cd ~jones456 /home/jones456

28 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? '

29 read Example $ cat mul read 'num1?Enter a number: '
read 'num2?Enter another number: ' (( prod = num1 * num2 )) echo $num1 times $num2 is $prod $ $ mul Enter a number: 5 Enter another number: 8 5 times 8 is 40 $

30 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 until [ condition ] do command(s) done

31 until Example Read in a number from a user, and verify the number is positive. $ cat posnum #! /bin/sh # Read positive number from user num=0 until [ num -gt 0 ] do echo Enter a positive non-zero number: read num done echo You entered $num exit 0 $

32 until Example Read in a number from a user, and verify the number is positive. $ cat posnum #! /bin/sh # Read positive number from user num=0 until (( num > 0 )) do echo Enter a positive non-zero number: read num done echo You entered $num exit 0 $

33 until Example Execution
$ posnum Enter a positive non-zero number: -50 12 You entered 12 $

34 select statement select var in list do 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 select var in list do command(s) done

35 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.

36 select example $ cat junkit #!/bin/ksh # Menu-driven junkit script
junk=$HOME/junkdir # # If junkdir directory doesn't exist, create it if [[ ! (-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;;

37 select example NOTE: The break command is used to exit the loop.
"Delete junk") rm $junk/*;; "Junk files") read 'filelist?Enter files to junk: ' mv $filelist $junk;; "Exit") break;; *) echo Invalid choice; please try again;; esac done exit 0 $ NOTE: The break command is used to exit the loop.

38 select execution $ pwd /export/home/jmsmith $ junkdir 1) List junk
2) Delete junk 3) Junk files 4) Exit #? 1 total 0 #? #? 3 Enter files to junk: p2.c #? #? 1 total 2 -rw jwsmith 122 May 7 13:19 p2.c #? #? 2 #? 1 total 0 #? 4 $

39 Other Korn Additions: String Length
Length of string: ${#varname} Returns length of string stored in variable Example: $ cat namelen name="Pam Smallwood" echo ${#name} $ namelen 13 $

40 Other Korn Additions Example: Forcing Command Execution
In addition to the back quotes (graves) `command` In Korn you can use: $(command) Example: $ name=$(whoami) $ echo $name small000 $

41 Sample .kshrc file # Set command aliases alias rm='rm -i '
alias rename='mv ' alias c clear # Set environment variables PATH=$PATH:. PS1="$PWD[!] $ " EDITOR=vi # Export global variables export PATH EDITOR PS1 # Set history variables HISTSIZE=40

42 Default .profile Review handout

43 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>

44 Terminal Session Example
$ script session1 Script started, file is session1 $ pwd /export/home/small000 $ date Thu May 22 19:34:25 MDT 2003 $ <CTRL-d> Script done, file is session1 $ $ cat session1 $ pwd /export/home/small000 $ date Thu May 22 19:34:25 MDT 2003 script done on Thu May 22 19:34: $


Download ppt "CS465 – Unix The Korn Shell (ksh)."

Similar presentations


Ads by Google