B.3. bash versus sh

 <  Day Day Up  >  

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

C/TC

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 ... $9

$1, $2, ... ${10} ...

$1, $2, ... ${10} ...

Setting positional parameters

N/A

 set a  b c set `date` echo   ... 

 set a  b c set `date` or set $(date) echo   ... 

 set a  b  c set `date` or set $(date) print   ... 

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?(29)1

abc?(29)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 

Re-execute 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

 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

N/A

 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 


 <  Day Day Up  >  


UNIX Shells by Example
UNIX Shells by Example (4th Edition)
ISBN: 013147572X
EAN: 2147483647
Year: 2004
Pages: 454
Authors: Ellie Quigley

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