94 cards across 6 sections
[[ ]]
RUN
#!/bin/bash
set -e
sh
man bash
grep
find
jq
curl
set -euo pipefail
trap
${ cmd; }
REPLY
GLOBSORT
$
$var
IFS
rm $file
*
?
[abc]
[a-z]
nullglob
shopt -s nullglob
shopt -s failglob
IFS=$'\n'
$(cmd)
{a,b,c}
{1..5}
*.txt
${var}
${var}_suffix
${var:-default}
default
var
${var:=default}
${#var}
${var:offset:length}
offset
${var#pattern}
${var##pattern}
${var%pattern}
${var%%pattern}
${var/pat/repl}
pat
${var//pat/repl}
#
%
${var^^}
${var,,}
${var^}
${var,}
tr
local var=value
export
[ ]
(( ))
-f
-d
-e
-z
-n
-r
-w
-x
=
!=
-eq
-ne
-lt
-gt
<
>
if cmd; then ...; elif cmd2; then ...; else ...; fi
case $var in pattern1) ...;; pattern2) ...;; esac
;;&
cmd1 && cmd2
cmd2
cmd1
cmd1 || cmd2
if
cmd || exit 1
cmd || { echo fail; exit 1; }
&&
||
arr=(a b c)
${arr[0]}
${arr[@]}
${#arr[@]}
declare -A map
map[key]=value
${map[key]}
${!map[@]}
"${arr[@]}"
"${arr[*]}"
for x in list; do ...; done
for ((i=0; i<n; i++)); do ...; done
while read -r line; do ...; done < file
myfunc() { ...; return 0; }
return
echo
printf
local
local var
>>
2>
&>
>file 2>&1
cmd <<EOF ... EOF
<<'EOF'
cmd <<< "text"
cmd1 | cmd2
while read
lastpipe
<(cmd)
>(cmd)
diff <(cmd1) <(cmd2)
exec 3< file
exec 1>log
set -o pipefail
${PIPESTATUS[@]}
( cmds )
{ cmds; }
$?
set -u
set -o nounset
pipefail
trap 'rm -f "$tmpfile"' EXIT
exit
trap 'echo failed at line $LINENO' ERR
set -x
PS4
set +x
find . -name '*.log' -exec rm {} +
rm
{} \;
find . -name '*.txt' -print0 | xargs -0 rm
-print0
xargs -0
shellcheck script.sh
#!/usr/bin/env bash
bash
PATH
/bin/bash
declare -A
#!/bin/sh
while getopts "f:v" opt; do case $opt in f) file=$OPTARG;; v) verbose=1;; esac; done
$1
set -euo pipefailIFS=$'\n\t'
=~
if [[ $name =~ ^[A-Z] ]]; then echo "capitalized"fi
"$var"
"$(cmd)"
for f in "$@"; do process "$f"done
mapfile -t arr < file
mapfile -t lines < input.txtecho "${#lines[@]}"
EXIT
tmp=$(mktemp)trap 'rm -f "$tmp"' EXIT
while read -r line; do count=$((count+1))done < <(grep foo file)
printf '%s\n' "$var"
-
(( a = b + c ))
result=$((b + c))
expr
count=$((count + 1))(( count > 10 )) && echo big
name="${1:-world}"echo "hello $name"
getopts
-vf file
case $1 in
while getopts "o:" opt; do case $opt in o) out=$OPTARG ;; esacdone
elif
declare -A colors=([red]=1 [blue]=2)echo "${colors[red]}"
shellcheck
shellcheck deploy.sh
cmd1 | cmd2 | cmd3
set -o pipefailcurl -sf url | jq .field
cat <<'EOF'Usage: $0 [-v] fileEOF
$(cmd1 $(cmd2))
files=$(find . -name '*.sh')
-u
-o pipefail
test
cmd
/dev/fd
diff <(sort a) <(sort b)
trap 'command' SIGNAL
command
SIGNAL
ERR
trap 'rm -f "$tmp"' EXIT
cd
;
dash
emulate sh
$file
"$file"
while
ls
for f in *
find ... -print0 | xargs -0
cmd | while read -r line; do var=$line; done
while read -r line; do ...; done < <(cmd)
echo "$var"
$@
"$@"
shellcheck --shell=sh
[[ "10" = "9" ]]
[[ "010" = "10" ]]
(( a == b ))
if ! cmd; then ...
for f in *.log; do process "$f"; done
process
*.log
[[ -e $f ]]
find -print0 | xargs -0
< <(cmd)