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
|