Math
bc -l
expr
: there must be spaces between expression parts\*
: *
has a special meaning to Bash so it needs to be escapedlet
- calculation:
$((b++))
includes assignment (assignment first then evaluation), ((b++))
no assignment only evaluation
Commands
- command substitution:
$(command)
`command`
()
: runs commands in a subshell{}
: runs commands in the current shell
Variables
- assignments: no space on either side of the equal sign
- global by default
$@
: list of arguments; $1
, $2
, etc: first, second, etc. argument; $#
: number of arguments
Logic and If-else
$?
: last exit status. &&
continues only after $?
== 0, ||
continues only after $?
!= 0- conditional expression:
[ ]
POSIX compliant, [[ ]]
extension to the standard, supporting extra operations - logical flags:
[[ 4 -gt 3 ]] && echo t || echo f
: prints t;[[ -e math.sh ]]
: checks if a file exists;-d
: a dir exists;-z
, -n
: string length is zero, non-zero
- logical operators:
- regex:
[[ "sean" =~ ^s.+n$ ]] && echo t || echo f
: prints t; - NOT:
[[ ! 7 -gt 2 ]] && echo t || echo f
: prints f; =
, !=
: string equal, not equal
Arrays
- indexed and associative
- init:
a=(1 2 3)
, declare -a a=(1 2 3)
(indexed), declare -A
(associative), declare
: local by default - get:
${a[0]}
, ${a[*]}
expanding to one single argument, ${a[@]}
expanding to distinct arguments, a part: ${a[*]:1:2}
: 2 3, length: ${#a[*]}
: 3 - set:
a[0]=0
- concat:
a+=(3 4 5)
Braces
- sequence:
{ .. }
, a{0..4}c
, {1..3}{a..c}
; with variables: start=4; end=9; eval echo {$start..$end}
: 4 5 6 7 8 9 - combine:
{{1..3},{a..c}}
Loops
for i in 1 2 3
do
...
done
while [[ ]]
do
...
done
Functions
#f () {
function f {
local result=0
...
echo $result
}