0% found this document useful (0 votes)
21 views

Advanced Bash Shell Scripting Guide - Reference Cards

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
21 views

Advanced Bash Shell Scripting Guide - Reference Cards

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

Advanced Bash-Scripting Guide:

Prev Next

Appendix B. Reference Cards


The following reference cards provide a useful summary of certain scripting concepts. The foregoing
text treats these matters in more depth and gives usage examples.

Table B-1. Special Shell Variables

Variable Meaning
$0 Name of script
$1 Positional parameter #1
$2 - $9 Positional 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

2:32
Now Playing

How to Write a Bash… Com


Com
How to Write a Bash Script: A Simple Bash Scripting Tutorial | Shell Scripting …

* Must be quoted, otherwise it defaults to "$@".

Table B-2. TEST Operators: Binary Comparison

Operator Meaning ---- Operator Meaning


-

Arithmetic String
Comparison Comparison
-eq Equal to = Equal to
== Equal to
-ne Not equal to != Not equal to
-lt Less than \< Less than (ASCII) *
-le Less than or equal to
-gt Greater than \> Greater than (ASCII)
*
-ge Greater than or equal to
-z String is empty
-n String is not empty

Arithmetic within double parentheses (( ...


Comparison ))
> 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

Operator Tests Whether --- Operator Tests Whether


--
-e File exists -s File is not zero size
-f File is a regular file
-d File is a directory -r File has read permission
-h File is a symbolic link -w File has write permission
-L File is a symbolic link -x File has execute permission
-b File is a block device
-c File is a character device -g sgid flag set
-p File is a pipe -u suid flag set
-S File is a socket -k "sticky bit" set
-t File is associated with
a terminal
Operator Tests Whether --- Operator Tests Whether
--

-N File modified since it was last F1 -nt F2 File F1 is newer than F2 *


read
-O You own the file F1 -ot F2 File F1 is older than F2 *
-G Group id of file same as yours F1 -ef F2 Files 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

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, 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 *

${!varprefix*} Matches all previously declared variables beginning with varprefix


${!varprefix@} Matches all previously declared variables beginning with varprefix

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

Table B-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

${string#substring} Strip shortest match of $substring from front of $string


Expression Meaning
${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" $substring Numerical position in $string of first character in $substring that matches
expr substr $string $position $length Extract $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" '.*\ Extract $substring* at end of $string
($substring\)'
expr "$string" : '.*\($substring\)' Extract $substring* at end of $string

* Where $substring is a regular expression.

Table B-6. Miscellaneous Constructs

Expression Interpretation

Brackets
if [ CONDITION ] Test construct
if [[ CONDITION ]] Extended test construct
Array[1]=element1 Array initialization
[a-z] Range of characters within a Regular Expression

Curly Brackets
${variable} Parameter substitution
${!variable} Indirect variable reference
{ command1; command2 } Block of code
{string1,string2,string3,...} Brace expansion

Parentheses
( command1; command2 ) Command group executed within a subshell
Expression Interpretation
Array=(element1 element2 element3) Array initialization
result=$(COMMAND) Execute command in subshell and assign result to variable
>(COMMAND) Process substitution
<(COMMAND) Process substitution

Double Parentheses
(( var = 78 )) Integer arithmetic
var=$(( 20 + 5 )) Integer arithmetic, with variable assignment

Quoting
"$variable" "Weak" quoting
'string' "Strong" quoting

Back Quotes
result=`COMMAND` Execute command in subshell and assign result to variable

You might also like