Appendix B. Reference Cards

Table B-1. Special Shell Variables

VariableMeaning
$0Name of script
$1Positional parameter #1
$2 - $9Positional parameters #2 - #9
${10}Positional parameter #10
$#Number of positional parameters
$*All the positional parameters (as a single word)
$@All the positional parameters (as separate strings)
${#*}Number of command line parameters passed to script
${#@}Number of command line parameters passed to script
$?Return value
$$Process ID (PID) of script
$-Flags passed to script (using set)
$_Last argument of previous command
$!Process ID (PID) of last job run in background

Table B-2. TEST Operators: Binary Comparison

OperatorMeaning-----OperatorMeaning
     
Arithmetic Comparison  String Comparison 
-eqEqual to =Equal to
   ==Equal to
-neNot equal to !Not equal to
-ltLess than \<Less than (ASCII) *
-leLess than or equal to   
-gtGreater than \>Greater than (ASCII) *
-geGreater than or equal to   
   -zString is empty
   -nString is not empty
     
Arithmetic Comparisonwithin double parentheses (( ... ))   
>Greater than   
>=Greater than or equal to   
<Less than   
<=Less than or equal to   

* If within a double-bracket [[ ... ]] test construct, then no escape \ is needed.

Table B-3. TEST Operators: Files

OperatorTests Whether-----OperatorTests Whether
-eFile exists -sFile is not zero size
-fFile is a regular file   
-dFile is a directory -rFile has read permission
-hFile is a symbolic link -wFile has write permission
-LFile is a symbolic link -xFile has execute permission
-bFile is a block device   
-cFile is a character device -gsgid flag set
-pFile is a pipe -usuid flag set
-SFile is a socket -k"sticky bit" set
-tFile is associated with a terminal   
     
-NFile modified since it was last read F1 -nt F2File F1 is newer than F2 *
-OYou own the file F1 -ot F2File F1 is older than F2 *
-GGroup id of file same as yours F1 -ef F2Files F1 and F2 are hard links to the same file *
     
!"NOT" (reverses sense of above tests)   

* Binary operator (requires two operands).

Table B-4. Parameter Substitution and Expansion

ExpressionMeaning
${var}Value of var, same as $var
${var-DEFAULT}If var not set, evaluate expression as $DEFAULT *
${var:-DEFAULT}If var not set, evaluate expression as $DEFAULT *
${var=DEFAULT}If var not set, evaluate expression as $DEFAULT *
${var:=DEFAULT}If var not set, evaluate expression as $DEFAULT *
${var+OTHER}If var set, evaluate expression as $OTHER, otherwise as null string
${var:+OTHER}If var set, evaluate expression as $OTHER, otherwise as null string
${var?ERR_MSG}If var not set, print $ERR_MSG *
${var:?ERR_MSG}If var not set, print $ERR_MSG *

* Of course if var is set, evaluate the expression as $var.

Table B-5. String Operations

ExpressionMeaning
${#string}Length of $string
  
{$string:position}Extract substring from $string at $position
{$string:position:length}Extract $length characters substring from $string at $position
  
${string#substring}Strip shortest match of $substring from front of $string
${string##substring}Strip longest match of $substring from front of $string
${string%substring}Strip shortest match of $substring from back of $string
${string%%substring}Strip longest match of $substring from back of $string
  
${string/substring/replacement}Replace first match of $substring with $replacement
${string//substring/replacement}Replace all matches of $substring with $replacement
${string/#substring/replacement}If $substring matches front end of $string, substitute $replacement for $substring
${string/%substring/replacement}If $substring matches back end of $string, substitute $replacement for $substring
  
  
expr match "$string" '$substring'Length of matching $substring* at beginning of $string
expr "$string" : '$substring'Length of matching $substring* at beginning of $string
expr index "$string" $substringNumerical position in $string of first character in $substring that matches
expr substr $string $position $lengthExtract $length characters from $string starting at $position
expr match "$string" '\($substring\)'Extract $substring* at beginning of $string
expr "$string" : '\($substring\)'Extract $substring* at beginning of $string
expr match "$string" '.*\($substring\)'Extract $substring* at end of $string
expr "$string" : '.*\($substring\)'Extract $substring* at end of $string

* Where $substring is a regular expression.