- Descriptores de archivos + stdin/stdout/stderr (0/1/2) - /proc/self/fd + Redirecciones: >, >>, <, <& + Redirecciones por número de FD: 2>, 2>&1, >algo 2>otro + set -o noclobber + Pipes nombradas: mkfifo - Control de procesos + ^Z, & + fg, bg (por número, por %comando) + jobs + disown - Variables + Asignacion y uso - var=algo - $var / ${var} + Interpolación + Arreglos - Asignación: arr=(1 2 3 4 5), arr[0]=1 - Consulta: ${arr[0]}, ${arr[*]}, ${#arr[*]} + Variables especiales - $1, $2, $3, ...: Parámetros - $* (lista completa de parámetros) - $# (número de parámetros) - $$ (PID) - $_ (Último argumento del último comando ejecutado) - $! (Último PID mandado al fondo) - Estructuras de control de flujo + if / then / elif / else / fi + case in / opc1) ... ;; / opc2 | opc3) ... ;; / *) ;; / esac + while / do / done + until / do / done + test / [ + Conjuntando operaciones: Operadores &&, ||, ! + for / do / done - (( i=0; i<10; i++ )) - {1..10} - 1 2 3 4 5 6 7 8 9 10 - $(seq 1 10) - Substitución de procesos + <(comando): Substituyendo por el nombre del FD + $(comando): Substituyendo por la salida del comando - Listas de procesos + Agrupando procesos: (cmd ; cmd ; cmd & cmd) - Expansiones y citas + Comodines: ?, *, ~ + Archivos con nombres mágicos - Uso de -- + Enumeración: {} + Substituciones en vivo: ${var/regex/r3g3x}, ${var#algo}, ${var##algo}, ${var%algo}, ${var%%algo} + Manejo de indefinición: - ${var:-algo} - 'algo' si var no está definido - ${var:?algo} - Error 'algo' si var no está definido - ${var:=algo} - Substituyo por y entrego 'algo' si no está definido - ${var:+algo} - Substituyo y entrego 'algo' si _está_ definido - Evaluación aritmética + $(( 1 + 1 )) + Operadores: +, -, *, /, **, ++ (pre, post), -- (pre, post) - Funciones y aliases + Prioridad superior + [function] función() { ... ; ... ; } - Parámetros posicionales: $1, $2, ... + alias algo=[otracosa] - Truquitos varios + grep -ri --color=auto --context=2 -nHb gwolf /etc + Manejo del prompt - Coloreado