Operador |
Acción |
< |
Redirecciona hacia la entrada estándar (STDIN) |
> |
Redirecciona hacia la salida estándar (STDOUT) |
2> |
Redirecciona hacia la salida de errores (STDERR) |
>> |
Redirecciona hacia la entrada estándar, anexando |
2>> |
Redirecciona hacia la salida de errores, anexando |
| |
Conecta salida estándar a la entrada estándar de otro comando |
2>&1 |
Conecta salida de errores a la salida estándar |
>&2 |
Conecta salida estándar a la salida de errores |
>&- |
Cierra la salida estándar |
2>&- |
Cierra la salida de errores |
3<>arch |
Conecta descriptor de archivos 3 al archivo 'arch' |
<<FIN |
Alimenta entrada estándar (Here Document) |
<<-FIN |
Alimenta entrada estándar, cortando TABs |
<(cmd) |
Salida de comando 'cmd' es un archivo: diff <(cmd1) <(cmd2) |
>(cmd) |
Entrada de comando 'cmd' es un archivo: tar cf >(bzip2 -c >file.tbz) $dir |
Variable |
Parámetros Posicionales |
$0 |
Parámetro número 0 (nombre del comando o función) |
$1 |
Parámetro número 1 (de la línea de comandos o función) |
... |
Parámetro número N ... |
$9 |
Parámetro número 9 (de la línea de comandos o función) |
${10} |
Parámetro número 10 (de la línea de comandos o función) |
... |
Parámetro número NN ... |
$# |
Número total de parámetros en línea de comando o función |
$* |
Todos los parámetros, como una string única |
$@ |
Todos los parámetros, como varias strings protegidas |
Variable |
Misceláneos |
$$ |
PID del proceso actual (del propio script) |
$! |
PID del último job en segundo plano |
$_ |
Último argumento del último comando ejecutado |
$? |
Código de retorno del último comando ejecutado |
Sintaxis |
Expanción Condicional |
${var:-texto} |
Si var no está definida, devuelve 'texto' |
${var:=texto} |
Si var no está definida, definir como 'texto' |
${var:?texto} |
Si var no está definida, devuelve el error 'texto' |
${var:+texto} |
Si var está definida, devuelve 'texto', sino devuelve vacío |
Sintaxis |
Expanción de Strings |
${var} |
Igual que $var, pero no ambiguo |
${#var} |
Devuelve tamaño de la string |
${!var} |
Ejecuta el contenido de $var (igual a 'eval \$$var') |
${!texto*} |
Devuelve nombres de variables que comienzan con 'texto' |
${var:N} |
Devuelve texto a partir de la posición 'N' |
${var:N:tam} |
Devuelve 'tam' caracteres a partir de la posición 'N' |
${var#texto} |
Corta 'texto' del inicio de la string |
${var##texto} |
Corta 'texto' del inicio de la string (* goloso) |
${var%texto} |
Corta 'texto' del final de la string |
${var%%texto} |
Corta 'texto' del final de la string (* goloso) |
${var/texto/nuevo} |
Substituye 'texto' por 'nuevo', una vez |
${var//texto/nuevo} |
Substituye 'texto' por 'nuevo', siempre |
${var/#texto/nuevo} |
Si string empieza con 'texto', substituye 'texto' por 'nuevo' |
${var/%texto/nuevo} |
Si string termina con 'texto', substituye 'texto' por 'nuevo' |
Sintaxis |
Descripción |
Ejemplo |
"..." |
Protege una string, pero reconoce a $, \ y ` como especiales |
"abc" |
'...' |
Protege una string por completo (ningún carácter es especial) |
'abc' |
$'...' |
Protege una string completamente, pero interpreta \n, \t, \a, etc |
$'abc\n' |
`...` |
Ejecuta comandos en un subshell |
`ls` |
{...} |
Agrupa comandos en un bloque |
{ ls ; } |
(...) |
Ejecuta comandos en un subshell |
( ls ) |
$(...) |
Ejecuta comandos en un subshell, devolviendo el resultado |
$( ls ) |
((...)) |
Testea una operación aritmética, devolviendo 0 ó 1 |
((5 > 3)) |
$((...)) |
Devuelve el resultado de una operación aritmética |
$((5+3)) |
[...] |
Testea una expreción, devolviendo 0 ó 1 (alias del comando 'test')| [ 5 -gt 3 ] |
[[...]] |
Testea una expreción, devolviendo 0 ó 1 (puede usar && y ||) |
[[ 5 > 3 ]] |
Comparando Números |
-lt |
Menor que (LessThan) |
-gt |
Mayor que (GreaterThan) |
-le |
Menor o igual a (LessEqual) |
-ge |
Mayor o igual a (GreaterEqual) |
-eq |
Igual a (EQual) |
-ne |
No igual a (NotEqual) |
Comparando Strings |
= |
Es igual |
!= |
No es igual |
-n |
No es nula |
-z |
Es nula |
Operadores Lógicos |
! |
NO lógico (NOT) |
-a |
Y lógico (AND) |
-o |
O lógico (OR) |
Tests sobre archivos |
-b |
es un dispositivo de bloque |
-c |
es un dispositivo de carácter |
-d |
es un directorio |
-e |
es un archivo existente |
-f |
es un archivo normal |
-g |
el bit SGID está activado |
-G |
el grupo del archivo es el del usuario |
-k |
el sticky-bit está activado |
-L |
el archivo es un link simbólico |
-O |
el archivo pertenece al usuario actual |
-p |
el archivo es un named pipe |
-r |
el archivo tiene permisos de lectura |
-s |
el tamaño del archivo es mayor que cero |
-S |
el archivo es un socket |
-t |
el descriptor de archivos N es un tty |
-u |
el bit SUID está activado |
-w |
el archivo tiene permisos de escritura |
-x |
el archivo tiene permisos de ejecución |
-nt |
el archivo es más nuevo (NewerThan) |
-ot |
el archivo es más antiguo (OlderThan) |
-ef |
el archivo es el mismo (EqualFile) |
Escape |
Recordatorio |
Se expande como... |
\a |
Alerta |
Alerta (bip) |
\d |
Date |
Fecha en formato "Día Mes Fecha" (Sat Jan 15) |
\e |
Escape |
Carácter Esc |
\h |
Hostname |
Nombre de la máquina sin el dominio (dhcp11) |
\H |
Hostname |
Nombre completo de la máquina (dhcp11.empresa) |
\j |
Jobs |
Número de jobs activos |
\l |
Tty |
Nombre del terminal corriente (ttyp1) |
\n |
Newline |
Nueva línea |
\r |
Return |
Retorno de carro |
\s |
Shell |
Nombre del shell (basename $0) |
\t |
Time |
Horario en formato 24 horas HH:MM:SS |
\T |
Time |
Horario en formato 12 horas HH:MM:SS |
\@ |
At |
Horario en formato 12 horas HH:MM am/pm |
\A |
At |
Horario en formato 24 horas HH:MM |
\u |
Usuario |
Nombre de login del usuario corriente |
\v |
Versión |
Versión de Bash (2.00) |
\V |
Versión |
Versión+subversión de Bash (2.00.0) |
\w |
Working Dir |
Directorio corriente, ruta completa ($PWD) |
\W |
Working Dir |
Directorio corriente, solo el último (basename $PWD) |
\! |
Histórico |
Número del comando corriente en el histórico |
\# |
Número |
Número del comando corriente |
\$ |
ID |
Muestra "#" para root, "$" para usuarios normales |
\nnn |
Octal |
Carácter cuyo octal es nnn |
\\ |
Backslash |
Barra invertida \ literal |
\[ |
Escape |
Inicia una secuencia de escape (ej: código de colores) |
\] |
Escape |
Termina una secuencia de escape |
Letra |
Recordatorio |
Tipos de Archivo (primer carácter) |
- |
- |
Archivo normal |
d |
Directory |
Directorio |
l |
Link |
Link simbólico |
b |
Block |
Dispositivo de bloque (HD) |
c |
Char |
Dispositivo de caracteres (modem serial) |
s |
Socket |
Socket mapeado a archivo (comunicación de procesos) |
p |
Pipe |
FIFO o Named Pipe (comunicación de procesos) |
Letra |
Recordatorio |
Permisos de Archivo (los nueve caracteres siguientes) |
- |
- |
Permiso desactivado |
r |
Read |
Acceso de lectura |
w |
Write |
Acceso de escritura |
x |
eXecute |
Acceso de ejecución (o acceso al directorio) |
X |
eXecute |
Acceso al directorio solamente |
s |
Set ID |
Ejecución para usuario/grupo (SUID, SGID) - permiso 'x' activado |
S |
Set ID |
Ejecución para usuario/grupo (SUID, SGID) - permiso 'x' desactivado |
t |
sTicky |
Usuarios solo borran sus propios archivos - permiso 'x' activado |
T |
sTicky |
Usuarios solo borran sus propios archivos - permiso 'x' desactivado |
Código |
Significado |
Ejemplo |
0 |
No hubo errores, ejecución finalizó OK |
echo |
1 |
La mayoría de los errores comunes |
echo $((1/0)) |
2 |
Error de uso en algún 'builtin' de Shell |
- |
126 |
Comando no ejecutable (sin permisos) |
touch a ; ./a |
127 |
Comando no encontrado ("command not found") |
echooo |
128 |
El parámetro para 'exit' no es un decimal |
exit 1.0 |
128+n |
128 + código de la señal que mató al proceso |
kill -9 $PPID #exit 137 |
130 |
Programa interrumpido con Ctrl+C (128 + 2) |
- |
255 |
El parámetro para 'exit' no está entre 0 y 255 |
exit -1 |
Meta |
Nombre |
Descripción |
. |
Punto |
Comodín para un carácter |
[] |
Lista |
Cualquiera de los caracteres listados |
[^] |
Lista negativa |
Cualquier carácter, excepto los listados |
? |
Opcional |
El objeto previo puede aparecer o no (opcional) |
* |
Asterisco |
El objeto previo puede aparecer en cualquier cantidad |
+ |
Más |
El objeto previo debe aparecer como mínimo una vez |
{,} |
Llaves |
El objeto previo debe aparecer en la cantidad indicada |
^ |
Circunflejo |
Comienzo de la línea |
$ |
Pesos |
Fin de la línea |
\b |
Borde |
Limita una palabra (letras, números y subrayado) |
\ |
Escape |
Carácter de escape para un meta, lo deja sin efecto |
| |
O |
Indica alternativas (usar con el grupo) |
() |
Grupo |
Agrupa partes de la expresión (cuantificable y multinivel) |
\1 |
Retrovisor |
Recupera el contenido del grupo 1 |
\2 |
Retrovisor |
Recupera el contenido del grupo 2 (sigue hasta el \9) |
.* |
Comodín |
Expande como cualquier cosa, es todo o nada |
?? |
Opcional NG |
Igual a opcional común, pero expande el mínimo posible |
*? |
Asterisco NG |
Igual a asterisco común, pero expande el mínimo posible |
+? |
Más NG |
Igual a más común, pero expande el mínimo posible |
{}? |
Llaves NG |
Igual a llaves comunes, pero expande el mínimo posible |
Condicionales con IF |
if [ -f "$archivo" ]; then echo 'Archivo encontrado'; fi |
if [ ! -d "$dir" ]; then echo 'Directorio no encontrado'; fi |
if [ $i -gt 5 ]; then echo 'Mayor que 5'; else echo 'Menor que 5'; fi |
if [ $i -ge 5 -a $i -le 10 ]; then echo 'Entre 5 y 10 inclusive'; fi |
if [ $i -eq 5 ]; then echo '=5'; elif [ $i -gt 5 ]; then echo '>5'; else echo '<5'; fi |
if [ "$USER" = 'root' ]; then echo 'Hola root!'; fi |
if grep -qs 'root' /etc/passwd; then echo 'Usuario encontrado'; fi |
Condicionales con Y (&&) y O (||) |
[ -f "$archivo" ] && echo 'Archivo encontrado' |
[ -d "$dir" ] || echo 'Directorio no encontrado' |
grep -qs 'root' /etc/passwd && echo 'Usuario encontrado' |
cd "$dir" && rm "$archivo" && touch "$archivo" && echo 'listo!' |
[ "$1" ] && param=$1 || param='valor por defecto' |
[ "$1" ] && param=${1:-valorpordefecto} |
[ "$1" ] || { echo "Uso: $0 parámetro" ; exit 1 ; } |
Adicionar 1 a una variable $i |
i=$(expr $i + 1) |
i=$((i+1)) |
let i=i+1 |
let i+=1 |
let i++ |
Loop de 1 a 10 |
for i in 1 2 3 4 5 6 7 8 9 10; do echo $i; done |
for i in $(seq 10); do echo $i; done |
for ((i=1;i<=10;i++)); do echo $i; done |
i=1 ; while [ $i -le 10 ]; do echo $i ; i=$((i+1)) ; done |
i=1 ; until [ $i -gt 10 ]; do echo $i ; i=$((i+1)) ; done |
Loop sobre las líneas de un archivo o sobre la salida de un comando |
cat /etc/passwd | while read LINEA; do echo "$LINEA"; done |
grep 'root' /etc/passwd | while read LINEA; do echo "$LINEA"; done |
while read LINEA; do echo "$LINEA"; done < /etc/passwd |
while read LINEA; do echo "$LINEA"; done < <(grep 'root' /etc/passwd) |
Comodines en los ítems del comando case |
case "$dir" in /home/*) echo 'dir dentro de /home';; esac |
case "$user" in root|juan|maria) echo "Hola $user !";; *) echo "No te conozco";; esac |
case "$var" in ?) echo '1 letra';; ??) echo '2 letras';; ??*) echo 'más de 2';; esac |
case "$i" in [0-9]) echo '1 dígito';; [0-9][0-9]) echo '2 dígitos';; esac |
Cuadros con Dialog |
dialog --calendar 'abc' 0 0 31 12 1999 |
dialog --checklist 'abc' 0 0 0 item1 'desc1' on item2 'desc2' off |
dialog --fselect /tmp 0 0 |
(echo 50; sleep 2; echo 100) | dialog --gauge 'abc' 8 40 0 |
dialog --infobox 'abc' 0 0 |
dialog --inputbox 'abc' 0 0 |
dialog --passwordbox 'abc' 0 0 |
dialog --menu 'abc' 0 0 0 item1 'desc1' item2 'desc2' |
dialog --msgbox 'abc' 8 40 |
dialog --radiolist 'abc' 0 0 0 item1 'desc1' on item2 'desc2' off |
dialog --tailbox /tmp/archivo.txt 0 0 |
dialog --textbox /tmp/archivo.txt 0 0 |
dialog --timebox 'abc' 0 0 23 59 00 |
dialog --yesno 'abc' 0 0 |
Tip1: dialog ... && echo 'Presionó OK/Yes' || echo 'Presionó Cancel/No' |
Tip2: respuesta=$(dialog --stdout --TIPODECAIXA 'abc' ...) |
Atajo |
Descripción |
Tecla Similar |
Ctrl+A |
Mueve cursor al inicio de la línea |
Home |
Ctrl+B |
Mueve cursor un lugar a la izquierda |
← |
Ctrl+C |
Envia señal EOF() al sistema |
|
Ctrl+D |
Borra un carácter a la derecha |
Delete |
Ctrl+E |
Mueve cursor al fin de la línea |
End |
Ctrl+F |
Mueve cursor un lugar a la derecha |
→ |
Ctrl+H |
Borra un carácter a la izquierda |
Backspace |
Ctrl+I |
Completa archivos y comandos |
Tab |
Ctrl+J |
Línea nueva |
Enter |
Ctrl+K |
Corta del cursor al fin de la línea |
|
Ctrl+L |
Limpa la pantalla (igual que 'clear') |
|
Ctrl+N |
Próximo comando |
|
Ctrl+P |
Comando anterior |
|
Ctrl+Q |
Destraba el shell (ver Ctrl+S) |
|
Ctrl+R |
Busca en el histórico de comandos |
|
Ctrl+S |
Traba el shell (ver Ctrl+Q) |
|
Ctrl+T |
Intercambia dos caracteres de lugar |
|
Ctrl+U |
Corta la línea entera |
|
Ctrl+V |
inserta un carácter literal |
|
Ctrl+W |
Corta la palabra a la izquierda |
|
Ctrl+X |
Mueve cursor al inicio/fin de línea (x2) |
Home/End |
Ctrl+Y |
Pega el texto cortado |
|
Comando |
Función |
Opciones útiles |
cat |
Muestra archivo |
-n, -s |
cut |
Extrae campo |
-d -f, -c |
date |
Muestra fecha |
-d, +'...' |
diff |
Compara archivos |
-u, -Nr, -i, -w |
echo |
Muestra texto |
-e, -n |
find |
Encuentra archivos |
-name, -iname, -type f, -exec, -or |
fmt |
Formatea párrafos |
-w, -u |
grep |
Encuentra cadena |
-i, -v, -r, -qs, -n, -l, -w -x, -A -B -C |
head |
Muestra inicio |
-n, -c |
od |
Muestra caracteres |
-a, -c, -o, -x |
paste |
Une archivos |
-d, -s |
printf |
Muestra texto |
ninguna |
rev |
Invierte texto |
ninguna |
sed |
Edita texto |
-n, -f, s/esto/aquello/, p, d, q, N |
seq |
Cuenta números |
-s, -f |
sort |
Ordena texto |
-n, -f, -r, -k -t, -o |
tac |
Invierte archivo |
ninguna |
tail |
Muestra final |
-n, -c, -f |
tee |
Archiva flujo |
-a |
tr |
Transforma texto |
-d, -s, A-Z a-z |
uniq |
Remueve duplicados |
-i, -d, -u |
wc |
Cuenta letras |
-c, -w, -l, -L |
xargs |
Gerencia argumentos |
-n, -i |