Appendix B. Comparison of the Shells

CONTENTS
  •  B.1 The Shells Compared
  •  B.2 tcsh versuscsh
  •  B.3 bash versussh

B.1 The Shells Compared

Feature Bourne C TC Korn Bash
Aliases no yes yes yes yes
Advanced Pattern Matching no no no yes yes
Command Line Editing no no yes yes[a] yes
Directory Stacks (pushd, popd) no yes yes no yes
Filename Completion no yes[a] yes yes yes
Functions yes no no yes yes
History no yes yes yes yes
Job Control no yes yes yes yes
Key Binding no no yes no yes
Prompt Formatting no no yes no yes
Spelling Correction no no yes[a] no yes[b]

[a] not a default setting; must be set by the user.

[b] cdspel is a shopt option set to correct minor spelling errors in directory names when cd is used.

B.2 tcsh versus csh

The TC shell (tcsh) is an enhanced version of the Berkeley C shell (csh). Listed here are some of the new features.

  • An enhanced history mechanism

  • A built-in command line editor (emacs or vi) for editing the command line

  • Formatting the prompts

  • A spelling correction facility and special prompts for spelling correction and looping

  • Enhanced and programmed word completion for completing commands, filenames, variables, usernames, etc.

  • Ability to create and modify key bindings

  • Automatic, periodic, and timed events (scheduled events, special aliases, automatic logout, terminal locking, etc.)

  • New built-in commands (hup, ls F, newgrp, printenv, which, where, etc.)

  • New built-in variables (gid, loginsh, oid, shlvl, tty, uid, version, HOST, REMOTEHOST, VENDOR, OSTYPE, MACHTYPE)

  • Read-only variables

  • Better bug reporting facility

B.3 bash versus sh

The Bourne Again (bash) shell has the following features not found in the traditional Bourne shell (sh).

  • Formatting the prompts

  • History (csh style)

  • Aliases

  • A built-in command line editor (emacs or vi) for editing the command line

  • Directory manipulation with pushd and popd

  • Csh-type job control to stop or run jobs in the background, bring them to the foreground, etc. with command such as bg, fg, Ctrl-Z, etc.

  • Tilde, brace, and parameter expansion

  • Key bindings to customize key sequences

  • Advanced pattern matching

  • Arrays

  • The select loop (from Korn shell)

  • Many new built-in commands

Feature csh/tcsh Bourne Bash Korn
Variables:
Assigning values to local variables set x = 5 x=5 x=5 x=5
Assigning variable attributes     declare or typeset typeset
Assigning values to environment variables setenv NAME Bob NAME='Bob'; export NAME export NAME='Bob' export NAME='Bob'
Read-Only Variables:
Accessing variables
echo $NAME set var = net echo ${var}work network 
echo $NAME var=net echo ${var}work network 
echo $NAME var=net echo ${var}work network 
echo $NAME or print $NAME var=net print ${var}work network 
Number of characters echo $%var (tcsh only) N/A ${#var} ${#var}
Special Variables:
PID of the process $$ $$ $$ $$
Exit status $status, $? $? $? $?
Last background job $! (tcsh only) $! $! $!
Arrays:
Assigning arrays set x = ( a b c ) N/A
y[0]='a'; y[2]='b';    y[2]='c' fruit=(apples pears    peaches plums) 
y[0]='a'; y[1]='b';    y[2]='c' set  A fruit apples    pears plums 
Accessing array elements echo $x[1] $x[2] N/A echo ${y[0]} ${y[1]} print ${y[0]} ${y[1]}
All elements echo $x or $x[*] N/A echo ${y[*]}, ${fruit[0]} print ${y[*]}, ${fruit[0]}
No. of elements echo $#x N/A echo $y{#[*]} print ${#y[*]}
Command Substitution:
Assigning output of command to variable set d = `date` d=`date` d=$(date) or d=`date` d=$(date) or d=`date`
Accessing values
echo $d echo $d[1], $d[2],    ... echo $#d 
echo $d echo $d print $d
Command Line Arguments (Positional Parameters):
Accessing
$argv[1], $argv[2] or $1, $2 ... 
$1, $2 ... $9 $1, $2, ... ${10} $1, $2, ... ${10}
Setting positional parameters N/A
set a  b c set `date` echo $1 $2 ... 
set a  b c set `date` or set $(date) echo $1 $2 ... 
set a  b  c set `date` or set $(date) print $1 $2 ... 
No. of command line arguments
$#argv $# (tcsh) 
$# $# $#
No. of characters in $arg[number] $%1, $%2, (tcsh) N/A N/A N/A
Metacharacters for Filename Expansion:
Matches for:        
Single character ? ? ? ?
Zero or more characters * * * *
One character from a set [abc] [abc] [abc] [abc]
One character from a range of characters in a set [a c] [a c] [a-c] [a c]
One character not in the set
N/A  (csh) [^abc]  (tcsh) 
[!abc] [!abc] [!abc]
? matches zero or one occurrences of any pattern in the parentheses. The vertical bar represents an or condition; e.g., either 2 or 9. Matches abc21, abc91, or abc1.     abc?(2|9)1 abc?(2|9)1
Filenames not matching a pattern ^pattern (tcsh)      
I/O Redirection and Pipes:
Command output redirected to a file cmd > file cmd > file cmd > file cmd > file
Command output redirected and appended to a file cmd >> file cmd >> file cmd >> file cmd >> file
Command input redirected from a file cmd < file cmd < file cmd < file cmd < file
Command errors redirected to a file (cmd > /dev/tty)>&errors cmd 2>errors cmd 2> file cmd 2> errors
Output and errors redirected to a file cmd >& file cmd > file 2>&1
cmd >& file or cmd &> file or cmd > file 2>&1 
cmd > file 2>&1
Assign output and ignore noclobber cmd >| file N/A cmd >| file cmd >| file
here document
cmd << EOF input EOF 
cmd << EOF input EOF 
cmd << EOF input EOF 
cmd << EOF input EOF 
Pipe output of one command to input of another command cmd | cmd cmd | cmd cmd | cmd cmd | cmd
Pipe output and error to a command cmd |& cmd N/A N/A (See coprocesses)
Coprocess N/A N/A N/A command |&
Conditional statement
cmd && cmd cmd || cmd 
cmd && cmd cmd || cmd 
cmd && cmd cmd || cmd 
cmd && cmd cmd || cmd 
Reading from the Keyboard:
Read a line of input and store into variable(s)
set var = $< set var = 'line' 
read var read var1 var2... 
read var read var1 var2... read read -p prompt read -a arrayname 
read var read var1 var2... read read var?"Enter value" 
Arithmetic:
Perform calculation @ var = 5 + 1 var=`expr 5 + 1`
(( var = 5 + 1 )) let var=5+1 
(( var = 5 + 1 )) let var=5+1 
Tilde Expansion:
Represent home directory of user ~username N/A ~username ~username
Represent home directory ~ N/A ~ ~
Represent present working directory N/A N/A ~+ ~+
Represent previous working directory N/A N/A ~- ~
Aliases:
Create an alias alias m more N/A alias m=more alias m=more
List aliases alias   alias, alias -p alias, alias t
Remove an alias unalias m N/A unalias m unalias m
History:
Set history set history = 25 N/A automatic or HISTSIZE=25 automatic or HISTSIZE=25
Display numbered history list history   history, fc -l history, fc l
Display portion of list selected by number history 5   history 5
history 5 10 history  5 
Reexecute a command
!! (last command) !5 (5th command) !v (last command starting with v) 
 
!! (last command) !5 (5th command) !v (last command starting    with v) 
r (last command) r5 (5th command) r v (last command starting     with v) 
Set interactive editor N/A (csh)
bindkey -v or bindkey -e (tcsh) 
N/A
set -o vi set -o emacs 
set -o vi set -o emacs 
Signals:
Command onintr trap trap trap
Initialization Files:
Executed at login .login profile bash_profile profile
Executed every time the shell is invoked .cshrc N/A
BASH_ENV=.bashrc (or other filename) (bash 2.x) ENV=.bashrc 
ENV=.kshrc (or other filename)
Functions:
Define a function N/A fun() { commands; } function fun { commands; } function fun { commands; }
Call a function N/A
fun fun param1 param2 ... 
fun fun param1 param2 ... 
fun fun param1 param2 ... 
Programming Constructs:
if conditional
if ( expression ) then      commands endif if { ( command ) } then      commands endif 
if [ expression ] then      commands fi if command then      commands fi 
if [[ string expression ]] then      commands fi if (( numeric expression )) then      commands fi 
if [[ string expression ]] then      commands fi if (( numeric expression )) then      commands fi 
if/else conditional
if ( expression ) then      commands else      commands endif 
if command then      commands else       fi 
if command then      commands else       fi 
if command then      commands else       fi 
if/else/elseif conditional
if (expression) then      commands else if (expression) then      commands else      commands endif 
if command then      commands elif command then      commands else      commands fi 
if command then      commands elif command then      commands else      commands fi 
if command then      commands elif command then      commands else      commands fi 
goto
goto label ... label: 
N/A N/A N/A
switch and case
switch ("$value") case pattern1:      commands      breaksw case pattern2:      commands      breaksw default:      commands      breaksw endsw 
case "$value" in pattern1) commands      ;; pattern2) commands      ;; *) commands      ;; esac 
case "$value" in pattern1) commands      ;; pattern2) commands      ;; *) commands      ;; esac 
case "$value" in pattern1) commands      ;; pattern2) commands      ;; *) commands      ;; esac 
Loops:
while loops
while (expression)      commands end 
while command do      command done 
while command do      command done 
while command do      commands done 
for/foreach
foreach var (wordlist)      commands end 
for var in wordlist do      commands done 
for var in wordlist do      commands done 
for var in wordlist do      commands done 
until  
until command do      commands done 
until command do      commands done 
until command do      commands done 
repeat
repeat 3 "echo hello" hello hello hello 
N/A N/A N/A
select N/A N/A
PS3="Please select a menu item" select var in wordlist do      commands done 
PS3="Please select a menu item" select var in wordlist do      commands done 

 

CONTENTS


UNIX Shells by Example
UNIX Shells by Example, 3rd Edition
ISBN: 013066538X
EAN: 2147483647
Year: 2001
Pages: 18
Authors: Ellie Quigley

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net