1 / 44

The Korn Shell (ksh)

CS465 – Unix. The Korn Shell (ksh). 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

duke
Download Presentation

The Korn Shell (ksh)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

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: $ unalias name • To show all aliases: $ alias • If you put the alias commands in your .profileor.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 10-30 times faster thanexpr • 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. letOperators • Integer operators: • +, -, *, /, % • Integer comparisons: • <, <=, ==, !=, >=, > • Compounds && (and), || (or), ! (not) NOTE: No backslashes needed inside (( ))

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

  11. let example i=1 total=0while (( i <= 100 ))do (( total = total + i )) (( i = i + 1 ))doneecho $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) ralone 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 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 $ pwd /etc $ cd $OLDPWD $ pwd /home/smith123/cprogs

  26. New Pattern Matching ~ home directory (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 $ pwd /home/smith123 $ cd ~- $ pwd /home/smith123/progs/cprogs $ cd ~jones456 $ pwd /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 [ 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 statement

  31. 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 $ until Example

  32. 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 $ until Example

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

  34. 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 statement

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

  36. $ 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;; select example

  37. "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 $ select example NOTE: The break command is used to exit the loop.

  38. #? 3 Enter files to junk: p2.c #? $ pwd /export/home/jmsmith $ junkdir 1) List junk 2) Delete junk 3) Junk files 4) Exit #? select execution 1 total 0 #? #? 1 total 2 -rw------- 1 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 • 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:29 2003 • $

More Related