230 likes | 548 Views
Unix Shells: C, Bourne, Bourne Again, Korn, and Tenex Shells. Presentation by: Katie Harris Andrew Murray. Introduction. Numerous types of shells offered Why so many shells? Some are original shells and others combine features of the original shells
E N D
Unix Shells: C, Bourne, Bourne Again, Korn, and Tenex Shells Presentation by: Katie Harris Andrew Murray
Introduction • Numerous types of shells offered • Why so many shells? • Some are original shells and others combine features of the original shells • 5 shells: Bourne Shell, Bourne Again Shell, C Shell, Korn Shell, and Tenex Shell
Bourne Shell • Default Unix Shell created in 1977 by Stephen Bourne • The UNIX Programming Environment • Foundation for future shells • Very strong and powerful syntactical language • Controlling input and output – File Descriptor 2 • Larger argument list size and the idea of having environment variables
C Shell • Developed by Bill Joy at the University of California at Berkeley • Extensive command language with syntax similar to the C programming language • Job control features of the BSD kernel • Never very popular • Aliases • Command History • Bourne = Programming, C-Shell = Command Interpretation
Bash Shell • Bourne-again shell developed as a part of the GNU project by Brian Fox in 1987 • Default shell on most GNU/Linux and Mac OS X Panther systems • Freely distributed and combines C-Shell and Bourne Shell • File completion • Easier History Use
Korn Shell • Created by David Korn in AT&T Labs in 1983 • Compatible with Bourne Shell • Utilizes both features from the Bourne Shell and the C Shell • Some features include: coprocesses and one-dimensional arrays • The Korn shell is an interactive command interpreter and command programming language. The shell carries out commands specified at the terminal or from a file.
Tenex Shell • Created by Ken Greer • Tcsh is an enhanced, but completely compatible version of the Berkeley UNIX C shell (csh). • It is a command language interpreter usable both as an interactive login shell and a shell script command processor. • It includes a command-line editor, programmable word completion, spelling correction, a history mechanism, job control and a C-like syntax.
Shell Features shcshkshbashtcsh Job control N Y Y Y Y Aliases N Y Y Y Y Shell functions Y(1) N Y Y N "Sensible" Input/Output redirectionY N Y Y N Directory stack N Y Y Y Y Command history N Y Y Y Y Command line editing N N Y Y Y Vi Command line editing N N Y Y Y(3) Emacs Command line editing N N Y Y Y Rebindable Command line editing N N N Y Y User name look up N Y Y Y Y
Shell Features(2) sh csh ksh bash tcsh Login/Logout watching N N N N Y Filename completion N Y(1) Y Y Y Username completion N Y(2) Y Y Y Hostname completion N Y(2) Y Y Y History completion N N N Y Y Fully programmable Completion N N N N Y Mh Mailbox completion N N N N(4) N(6) Co Processes N N Y N N Builtin artithmetic evaluation N Y Y Y Y Can follow symbolic links invisibly N Y Y Y Y Periodic command execution N N N N Y Custom Prompt (easily) N N Y Y Y Sun Keyboard Hack N N N N N Spelling Correction N N N N Y
Shell Features(3) sh csh ksh bash tcsh Process Substitution N N N Y(2) N Underlying Syntax sh csh sh sh csh Freely Available N N N(5) Y Y Checks Mailbox N Y Y Y Y Tty Sanity Checking N N N N Y Can cope with large argument lists Y N Y Y Y Has non-interactive startup file N Y Y(7) Y(7) Y Has non-login startup file N Y Y(7) Y Y Can avoid user startup files N Y N Y N Can specify startup file N N Y Y N Low level command redefinition N N N N N Has anonymous functions N N N N N List Variables N Y Y N Y Full signal trap handling Y N Y Y N
Shell Features(4) sh csh ksh bash tcsh File no clobber ability N Y Y Y Y Local variables N N Y Y N Lexically scoped variables N N N N N Exceptions N N N N N Y Feature can be done using this shell. N Feature is not present in the shell. F Feature can only be done by using the shells function mechanism. L The readline library must be linked into the shell to enable this Feature. • This feature was not in the orginal version, but has since become almost standard. • This feature is fairly new and so is often not found on many versions of the shell, it is gradually making its way into standard distribution. • The Vi emulation of this shell is thought by many to be incomplete. • This feature is not standard but unoffical patches exist to perform this. • A version called 'pdksh' is freely available, but does not have the full functionality of the AT&T version. • This can be done via the shells programmable completion mechanism. • Only by specifing a file via the ENV environment variable.
Common Features to Bourne, Korn, and C Shells Symbol/Command Meaning/Action > Redirect output >> Append to file < Redirect input << “Here” document (redirect input) | Pipe output |& Start a coprocess (Korn shell only) & Run process in background ; Separate commands on same line * Match any character(s) in filename ? Match single character in filename [ ] Match any characters enclosed ( ) Execute in subshell ` ` Substitute output of enclosed command “ “ Partial quote(allows var. and command expansion ‘ ‘ Full quote(no expansion)
Common Features to Bourne, Korn, and C Shells(2) Symbol/Command Meaning/Action \ Quote following character $ varUse value for variable $$ Process ID $0 Command name $n nth argument (0<=n<=9) $* All arguments as simple words # Begin comment bg Background execution break Break from loop statements cd Change directory continue Resume a program loop echo Display output eval Evaluate arguments exec Execute a new shell fg Foreground execution
Common Features to Bourne, Korn, and C Shells(3) Symbol/Command Meaning/Action jobs Show active jobs kill Terminate running jobs shift Shift positional parameters stop Suspend a background job suspend Suspend a foreground job time Time a command umask Set default file permissions for new files unset Erase variable or function definitions wait Wait for a background job to finish
Differing Features of Bourne, Korn, and C Shells sh ksh csh Meaning/Action $ $ % Prompt >| >! Force redirection >file 2>&1 >file 2>&1 >& file Combine stdout and stderr { } Expand elements in list ` ` ` ` ` ` Substitute output of enclosed command $( ) Substitute output of enclosed command $HOME $HOME $home Home directory ~ ~ Home directory symbol var=value var=value set var=value Variable assignment export var export var=val setenv var val Set environment variable ${nn} More than nine args can be referenced “$@”“ $@” All args as separate words $# $# $#argv Number of arguments
Differing Features of Bourne, Korn, and C Shells(2) sh ksh csh Meaning/Action $? $? $status Exit status $! $! Background exit status $- $- Current options . file . file source file Read commands in file alias x=y alias x y Name x stands for y case case switch/case Choose alternatives cd ~- popd/pushd Switch directories done done end End a loop statement esac esac endsw End case or switch exit [n] exit [n] exit [(expr)] Exit with a status for/do for/do foreach Loop through variables print –r glob Ignore echo escapes hash alias –t hashstat Display hashed comments hash cmds alias –t cmds rehash Remember command locations hash –r PATH=$PATH unhash Forget command locations history history List previous commands
Differing Features of Bourne, Korn, and C Shells(3) sh ksh csh Meaning/Action r !! Redo previous command r str !str Redo command that starts with str\ r x=cmd !cmd:s/x/y Edit command, then execute if [ $i –eq 5] if ((i==5)) if ($i==5) Sample if statement fi fi endif End if statement ulimit ulimit limit Set resource limits pwd pwd dirs Print working directory read read $< Read from standard input trap 2 trap 2 onintr Ignore interrupts unalias unalias Remove aliases until/do until/do Begin until loop while/do while/do while Begin while loop
Shell control structures Structure Bourne Korn C Shell IF if[…] if[…] if(…) then THEN then then ELSE-IF elif elif Else if ELSE else else else ENDIF fi fi endif CASE case case switch value) value) case value: ;; ;; breaksw * ) * ) default: esac esac endsw FOR for for foreach Do do done done end REPEAT xargs -1 xargs -1 xargs -1 repeat UNTIL until until Do do done done WHILE while while while Do do done done end
Conclusion • Numerous shells but all essential to the evolution of the Unix system and the shell • Build off of each other • Main building block for all shells in one form or another is the Bourne Shell