← Back To Main Page

BASH QUICK LOOKUP GUIDE

The following provides a useful summary of certain scripting concepts. The foregoing text treats these matters in more depth, as well as giving usage examples.

Table 1. Special Shell Variables

Variable Meaning
$0Filename 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 positional parameters
${#@}Number of positional parameters
$?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

* Note: "$*" must be quoted, otherwise it defaults to $@.


Table 2. TEST Operators: Binary Comparison

Operator (Arithmetic) Meaning Operator (String) Meaning
Standard Comparisons
-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 Comparison within double parentheses (( ... ))
>Greater than  
>=Greater than or equal to  
<Less than  
<=Less than or equal to  

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


Table 3. TEST Operators: Files

Operator Tests Whether Operator Tests 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 readF1 -nt F2File F1 is newer than F2 *
-OYou own the fileF1 -ot F2File F1 is older than F2 *
-GGroup id of file same as yoursF1 -ef F2Files F1 and F2 are hard links to the same file *
 
!NOT (inverts sense of above tests)  

* Note: Binary operator (requires two operands).


Table 4. Parameter Substitution and Expansion

Expression Meaning
${var}Value of var (same as $var)
 
${var-DEFAULT}If var not set, evaluate expression as $DEFAULT *
${var:-DEFAULT}If var not set or is empty, evaluate expression as $DEFAULT *
 
${var=DEFAULT}If var not set, evaluate expression as $DEFAULT *
${var:=DEFAULT}If var not set or is empty, 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 and abort script with an exit status of 1. *
${var:?ERR_MSG}If var not set or is empty, print $ERR_MSG and abort script with an exit status of 1. *
 
${!varprefix*}Matches all previously declared variables beginning with varprefix
${!varprefix@}Matches all previously declared variables beginning with varprefix

* Note: If var is set, evaluate the expression as $var with no side-effects.


Table 5. String Operations

Expression Meaning
${#string}Length of $string
 
${string:position}Extract substring from $string at $position
${string:position:length}Extract $length characters substring from $string at $position [zero-indexed, first character is at position 0]
 
${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

Table 6. Miscellaneous Constructs

Expression Interpretation
Brackets
if [ CONDITION ]Test construct
if [[ CONDITION ]]Extended test construct
Array[1]=element1Array initialization
[a-z]Range of characters within a Regular Expression
Curly Brackets
${variable}Parameter substitution
${!variable}Indirect variable reference
{ command1; command2; ... commandN; }Block of code
{string1,string2,string3,...}Brace expansion
{a..z}Extended brace expansion
{}Text replacement, after find and xargs
Parentheses
( command1; command2 )Command group executed within a subshell
Array=(element1 element2 element3)Array initialization
result=$(COMMAND)Command substitution, new style
>(COMMAND)Process substitution
<(COMMAND)Process substitution
Double Parentheses
(( var = 78 ))Integer arithmetic
var=$(( 20 + 5 ))Integer arithmetic, with variable assignment
(( var++ ))C-style variable increment
(( var-- ))C-style variable decrement
(( var0 = var1<98?9:21 ))C-style ternary operation
Quoting
"variable""Weak" quoting
'string''Strong' quoting
Back Quotes
result=`COMMAND`Command substitution, classic style
← Back To Main Page