Previous Section  < Day Day Up >  Next Section

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


$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


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



    Previous Section  < Day Day Up >  Next Section