Aqui describiremos las opciones mas usadas del shell bash, que sera de mucha utilizada como referencia al programador:
| Operadores Aritméticos | Operadores Relacionales |
|---|---|
| + Adicion | == Igual |
| - Restar | != Diferente |
| * Multiplicacion | > Mayor |
| / Division | >= Mayor o igual |
| % Modulo | < Menor |
| ** Exponente | <= Menor ou Igual |
| Operadores de asignacion | Operadores de BIT |
|---|---|
| = Asignar valor a una variable | « Desplazamiento a la izquierda |
| += Incrementar a la variable una constante | » Desplazamiento a la derecha |
| -= Restar una varible por una constante | & Y del bit (AND) |
| *= Multiplica una variable por una constante | | O del bit (OR) |
| /= Divide una variable por una constante | ^ O exclusivo del bit (XOR) |
| %= Resto de la division por una constante | ~ Negacion del bit |
| ++ Incremente en 1 la variable | ! No del bit(NOT) |
| – Decremente en 1 la variable |
| Operadores Lógicos | Operadores de BIT (asignacion) |
|---|---|
| && Y lógico (AND) | <<= Desplazamiento a la izquierda |
| || O lógico (OR) | >>= Desplazamiento a la derecha |
| &= Y de bit | |
| |= O de bit | |
| ^= O exclusivo de bit |
| Operador | Accion |
|---|---|
| < | Redirecionamiento de la entrada estandar (STDIN) |
| > | Redirecionamiento de la salida estandar (STDOUT) |
| 2> | Redireccionamiento de la salida de errores (STDERR) |
| >> | Redirecionamiento de la salida estandar, adicionando |
| 2>> | Redirecionamiento de la salida de errores, adicionando |
| | | Conectar la salida estandar con una entrada estadar de otro comando |
| 2>&1 | Conectar la salida de errores a la salida estandar |
| >&2 | Conectar la salida estandar a la salida de errores |
| >&- | Cierra la salida estandar |
| 2>&- | Cierra la salida de errores |
| 3<>arq | Conecta el descriptor de archivos 3 al archivo ‘arq’ |
| <<FIM | Alimenta la entrada estandar |
| <<-FIM | Alimenta la entrada estandar, cortando TABs |
| <(cmd) | La salida del comando ‘cmd’ es un archivo: diff <(cmd1) <(cmd2) |
| >(cmd) | La entrada del comando ‘cmd’ es um archivo: tar cf >(bzip2 -c >file.tbz) $dir |
| Variable | Posicion de los paramentros |
|---|---|
| $0 | Parametro número 0 (nombre del comando o funcion) |
| $1 | Parametro número 1 (de la linea de comando o funcion) |
| ... | Parametro número N ... |
| $9 | Parametro número 9 (de la linea de comando o funcion) |
| ${10} | Parametro número 10 (de la linea de comandos o funcion) |
| ... | Parametro número NN ... |
| $# | Número total de parametros de la linea de comando o funcion |
| $* | Todos los parametros, como una cadena unica |
| $@ | Todos los parametros, como varias cadenas protegidas |
| Variable | Miscelanea |
|---|---|
| $$ | Número PID del proceso actual (del propio script) |
| $! | Número PID del último trabajo en segundo plano |
| $_ | Último argumento del ultimo comando ejecutado |
| $? | Código de retorno del ultimo comando ejecutado |
| Sintaxis | Extension Condionalpansão Condicional |
|---|---|
| ${var:-texto} | Si var no esta definida, retorna ‘texto’ |
| ${var:=texto} | Si var no esta definida, la define como ‘texto’ |
| ${var:?texto} | Si var no esta definida, retorna el error error ‘texto’ |
| ${var:+texto} | Si var no esta definida, retorna ‘texto’, Si no retorna vacio |
| Sintaxis | Extension de Strings |
|---|---|
| ${var} | Es lo mismo que $var, pero no ambiguo |
| ${#var} | Retorna el tamaño de la cadena |
| ${!var} | Ejecuta el contenido de $var (igual ‘eval \$$var’) |
| ${!texto*} | Retorna los nombre de las variables que empiezan con ‘texto’ |
| ${var:N} | Retorna el texto a partir de la posicion ‘N’ |
| ${var:N:tam} | Retorna ‘tam’ caracteres a partir de la posicion ‘N’ |
| ${var#texto} | Corta ‘texto’ del inicio de la cadena |
| ${var%texto} | Corta ‘texto’ del final de la cadena |
| ${var/texto/nuevo} | Reemplaza ‘texto’ por ‘nuevo’, una vez |
| ${var//texto/nuevo} | Reemplaza ‘texto’ por ‘nuevo’, siempre |
| ${var/#texto/nuevo} | Si una cadena comienza con ‘texto’, reemplaza ‘texto’ por ‘nuevo’ |
| ${var/%texto/nuevo} | Si una cadena termina con ‘texto’, reemplaza ‘texto’ por ‘nuevo’ |
| Sintaxis | Descripcion | Ejemplo |
|---|---|---|
| “...” | Protege una cadena, mas reconoce $, \ y ` como especiales | “abc” |
| ‘...’ | Protege una cadena completamente (sin caracteres especiales) | ‘abc’ |
| $’...’ | Protege una cadena completamente, mas interpreta \n, \t, \a, etc | ‘abc\n’ |
| `...` | Ejecuta comandos en una subshell | `ls` |
| {...} | Agrupa comandos en un bloque | { ls ; } |
| (...) | Ejecuta comandos en una subshell | ( ls ) |
| $(...) | Ejecuta comandos en una subshell, retornando el resultado | $( ls ) |
| ((...)) | Prueba una operacion aritmética, retornando 0 o 1 | ((5 > 3)) |
| $((...)) | Retorna el resultado de una operacion aritmética | $((5+3)) |
| [...] | Prueba una expresion, retornando 0 o 1 (alias do comando ‘test’) | [ 5 -gt 3 ] |
| [[...]] | Prueba una expresion, retornando 0 o 1 (pudiendo usar && e ||) | [[ 5 > 3 ]] |
if CONDICION
then
comandos
elif CONDICION
comandos
else
comandos
fi
for VAR in LISTA
do
comandos
done
o:
for ((exp1;exp2;exp3))
while CONDICION
do
comandos
done
case $VAR in
txt1) comandos;;
txt2) comandos;;
txtN) comandos;;
*) comandos;;
esac
| Pruebas en archivos | Pruebas en variables |
|---|---|
| -b es un dispositivo de bloque | |
| -c es un dispositivo de caracter | Comparacion Numerica |
| -d es un directorio | -lt es menor que (LessThan) |
| -e el archivo existe | -gt es mayor que (GreaterThan) |
| -f es un archivo normal | -le es menor igual (LessEqual) |
| -g el bit SGID está ativado | -ge es mayor igual (GreaterEqual) |
| -G el grupo de archivo es del usuario actual | -eq es igual (EQual) |
| -k el sticky-bit está ativado | -ne es diferente (NotEqual) |
| -L el archivo es un enlace simbólico | |
| -O el propietario del archivo es el usuario actual | Comparacion de Cadenas |
| -p el archivo es un llamamo pipe | = es igual |
| -r el archivo tiene permiso de lectura | != es diferente |
| -s el tamaño del archivo es mayor que cero | -n no es nulo |
| -S el archivo es un socket | -z es nulo |
| -t el descritor de archivos N es una terminal | |
| -u el bit SUID está ativado | Operadores Lógicos |
| -w el archivo tiene permiso de escritura | ! No lógico (NOT) |
| -x el archivo tiene permiso de ejecucion | -a Y lógico (AND) |
| -nt el archivo es el mas reciente (NewerThan) | -o O lógico (OR) |
| -ot el archivo es el mas antiguo antigo (OlderThan) | |
| -ef el archivo el el mismo (EqualFile) | |
| Escape | Mnemónico | Extension para... |
|---|---|---|
| \a | Alerta | Alerta (bip) |
| \d | Fecha | Fecha con formato “Dia-de-semana Mes Dia” (Sat Jan 15) |
| \e | Escape | Caractere Esc |
| \h | Hostname | Nombre de la máquina sim el dominio (dhcp11) |
| \H | Hostname | Nombre completo de la máquina (dhcp11.empresa) |
| \j | Jobs | Número de jobs ativos |
| \l | Tty | Nombre de la terminal actual (tty1) |
| \n | Newline | Linea nueva |
| \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 | Usuário | Login del usuario actual |
| \v | Version | Version del Bash |
| \V | Version | Version+subversion de Bash (2.00.0) |
| \w | Working Dir | Directorio actual, ruta completa ($PWD) |
| \W | Working Dir | Directorio actual, solamente el ultimo (basename $PWD) |
| \! | History | Número del comando actual en el histórico |
| \# | Número | Número del comando actual |
| \$ | ID | Muestra “#” si es para root, “$” si es para usuario normal |
| \nnn | Octal | Caracter cuyo octal es nnn |
| \\ | Backslash | Barra invertida \ literal |
| \[ | Escapes | Inicia una secuencia de escapes (tipo códigos de colores) |
| \] | Escapes | Termina una secuencia de escapes |
| Escape | Mnemonico | Descripcion |
|---|---|---|
| \a | Alerta | Alerta (bip) |
| \b | Backspace | Caracter Backspace |
| \c | EOS | Termina la cadena |
| \e | Escape | Caracter Esc |
| \f | Form feed | Alimentacion |
| \n | Newline | Linea nueva |
| \r | Return | Retorno de carro |
| \t | Tab | Tabulacion horizontal |
| \v | Vtab | Tabulacion vertical |
| \\ | Backslash | Barra invertida \ literal |
| \nnn | Octal | Caracter cuyo octal es nnn |
| \xnn | Hexa | Caracter cuyo hexadecimal es nn |
| Formato | Descripcion |
|---|---|
| %a | nombre del dia de la semana abreviado (Dom..Sáb) |
| %A | nombre del dia de la semana (Domingo..Sábado) |
| %b | nombre del mes abreviado (Jan..Dec) |
| %B | nombre del mes (January..December) |
| %c | fecha completa (Sat Nov 04 12:02:33 EST 1989) |
| %y | año (00..99) |
| %Y | año (1970...) |
| %m | mes (01..12) |
| %d | dia (01..31) |
| %j | dia del año (001..366) |
| %H | horas (00..23) |
| %M | minutos (00..59) |
| %S | segundos (00..60) |
| %s | segundos desde 1º de enero de 1970 |
| %% | un % literal |
| %t | un TAB |
| %n | se rompe la linea |
| Formato | Descripcion |
|---|---|
| %d | Número decimal |
| %o | Número octal |
| %x | Número hexadecimal (a-f) |
| %X | Número hexadecimal (A-F) |
| %f | Número con punto flotante |
| %e | Número en notacion científica (e+1) |
| %E | Número en notacion científica (E+1) |
| %s | String |
| Letra | Mnemonico | Tipos de Archivo (primer caracter) |
|---|---|---|
| - | - | archivo normal |
| d | Directory | diretorio |
| l | Link | enlace simbólico |
| b | Block | dispositivo de bloque (HD) |
| c | Char | dispositivo de caracteres (modem serial) |
| s | Socket | socket mapeado en un archivo (comunicacion de procesos) |
| p | Pipe | FIFO o llamado Pipe (comunicacion de procesos) |
| Letra | Mnemonico | Permisos del Archivo (proximos nueve caracteres) |
|---|---|---|
| - | - | permiso desactivado |
| r | Read | aceso de lectura |
| w | Write | aceso de escritura |
| x | eXecute | aceso de ejecucion (o aceso al directorio) |
| X | eXecute | acesso al diretório solamente |
| s | Set ID | usuario/grupo para ejecucion (SUID, SGID) - permiso ‘x’ activado |
| S | Set ID | usuario/grupo para ejecucion (SUID, SGID) - permiso ‘x’ desativado |
| t | sTicky | usuarios borran solamente sus propios archivos - permiso ‘x’ ativado |
| T | sTicky | usuarios borran solamente sus propios archivos - permiso ‘x’ desativado |
| Comodin | Relacionado con... | Ejemplo |
|---|---|---|
| * | Cualquier cosa | *.txt |
| ? | Un caracter cualquiera | archivo-??.zip |
| [...] | Cualquier de los dos caracteres listados | [Aa]rquivo.txt |
| [^...] | Cualquiera del primer caracter, excepto lo mencionandos | [^A-Z]*.txt |
| {...} | Cualquiera de los dos textos separados por coma | archivo.{txt,html} |
| Comodin | Relacionado con... | Ejemplo |
|---|---|---|
| * | Cualquier cosa | *.txt) echo ;; |
| ? | Un caracter cualquiera | archivo-??.zip) echo ;; |
| [...] | Cualquier de los dos caracteres listados | [0-9]) echo ;; |
| [^...] | Cualquiera del primer caracter, excepto los listados | [^0-9]) echo ;; |
| ...|... | Cualquiera de los dos textos separados por | | txt|html) echo ;; |
| Código | Significado | Ejemplo |
|---|---|---|
| 0 | Ningun error, la ejecucion termino OK | echo |
| 1 | La mayoria de los errores comunes en la ejecucion | echo $((1/0)) |
| 2 | Error de uso en algun ‘builtin’ del Shell | - |
| 126 | Comando no ejecutable (sin permiso) | touch a ; ./a |
| 127 | Comando no encontrado (”command not found”) | echooo |
| 128 | El parametro para el ‘exit’ no es un decimal | exit 1.0 |
| 128+n | 128 + código de señal que lo mato | kill -9 $PPID #exit 137 |
| 130 | El programa interrumpido con Ctrl+C (128 + 2) | - |
| 255* | Parametro para el ‘exit’ no esta entre 0 e 255 | exit -1 |
| Color | Letra | Fondo | ___ | Atributo | Valor | ___ | Ejemplos: ESC [ <N>;<N> m |
|---|---|---|---|---|---|---|---|
| negro | 30 | 40 | reset | 0 | ESC[m texto normal (sin colores) | ||
| rojo | 31 | 41 | negrita | 1 | ESC[1m negrita | ||
| verde | 32 | 42 | subrayado | 4 | ESC[33;1m amarillolo | ||
| amarillo | 33 | 43 | parpadeo | 5 | ESC[44;37m fondo azul, letra ceniza | ||
| azul | 34 | 44 | invertido | 7 | ESC[31;5m rojo parpadeante | ||
| rosado | 35 | 45 | En la linea de comando: | ||||
| cyan | 36 | 46 | echo -e ‘\e[33;1m amarillo \e[m’ | ||||
| blanco | 37 | 47 | echo -e ‘\033[33;1m amarillo \033[m’ |
| Meta | Nombre | Descripcion |
|---|---|---|
| . | punto | Comodin de un caracter |
| [] | lista | Casa cualquiera de los dos caracteres listados |
| [^] | lista negada | Casa cualquier caracter, excepto los listados |
| ? | opcional | La entidad anterior puede aparecer o no (opcional) |
| * | asterisco | La entidad anterior puede aparecer en cualquier cantidad |
| + | mas | La entidad anterior debe aparecer como mínimo una vez |
| {,} | llaves | La entidad anterior debe aparecer en la cantidad indicada |
| ^ | circunflexo | Casa el comienzo de la linea |
| $ | peso | Casa el fin de la línea |
| \b | borde | Limita una palabra (letras, números y subrayado) |
| \ | escape | Escape de un meta, quitando su poder |
| | | o | Indica alternativas (usar con el grupo) |
| () | grupo | Agrupa partes de la expresión, es cuantificable y multinível |
| \1 | retrovisor | Recupera el contenido del grupo 1. |
| \2 | retrovisor | Recupera el contenido del grupo 2 (sigue hasta el \9) |
| .* | comodin | Casa cualquier cosa, es el todo y la nada |
| ?? | opcional NG | Ídem al opcional común, pero casa el mínimo posible |
| *? | asterisco NG | Ídem al asterisco común, pero casa el mínimo posible |
| +? | mas NG | Ídem al más común, pero casa el mínimo posible |
| {}? | llaves NG | Ídem a las llaves comunes, pero casa el mínimo posible |
| Condicionales con el 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 -la $i -le 10 ]; then echo ‘Entre 5 y 10, incluyendo’; fi |
| if [ $i -eq 5 ]; then echo ‘=5’; elif [ $i -gt 5 ]; then echo ‘>5’; else echo ‘; fi |
| if [ “$USER” = ‘root’ ]; then echo ‘Hola root’; fi |
| if grep -qs ‘root’ /etc/passwd; then echo ‘Usuario encontrado’; fi |
| Condicionales con el 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 ‘hecho!’ |
| [ “$1” ] && paran=$1 || paran=’valor patrón’ |
| [ “$1” ] && paran=${1:-valor patrón} |
| [ “$1” ] || { echo “Uso: $0 parámetro” ; exit 1 ; } |
| Añadir 1 a la variable $i |
| i=$(expr $i + 1) |
| i=$((i+1)) |
| let i=i+1. |
| let i+=1. |
| let i++ |
| Loop de 1 a la 10. |
| sea i in 1 2 3 4 5 6 7 8 9 10; del echo $i; done |
| sea i in $(seq 10); del echo $i; done |
| sea ((i=1;i<=10;i++)); del echo $i; done |
| i=1 ; while [ $i -le 10 ]; del echo $i ; i=$((i+1)) ; done |
| i=1 ; until [ $i -gt 10 ]; del echo $i ; i=$((i+1)) ; done |
| Loop en las líneas de un archivo o salida de comando |
| cat /etc/passwd | while read LINEA; do echo “$LINEA”; done |
| grep ‘root’ /etc/passwd | while read LÍNEA; do echo “$LÍNEA”; 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 del /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-un 9]) echo ‘1 dígito’;; [0-un 9][0-un 9]) echo ‘2 dígitos’;; esac |
| Cajas del Dialog |
| dialog –calendar ‘abc’ 0 0 31 12 1999. |
| dialog –checklist ‘abc’ 0 0 0 ítem1 ‘desc1’ on ítem2 ‘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 –menú ‘abc’ 0 0 0 ítem1 ‘desc1’ ítem2 ‘desc2’ |
| dialog –msgbox ‘abc’ 8 40. |
| dialog –radiolist ‘abc’ 0 0 0 ítem1 ‘desc1’ on ítem2 ‘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. |
Pista1: dialog ... && echo ‘Apretó OK/Yes’ || echo ‘Apretó Cancel/No’
Pista2: respuesta=$(dialog –stdout –TIPODECAJA ‘abc’ ...)
| 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 | -y, -n |
| find | Encuentra archivos | -name, -iname, -type f, -exec, -or |
| fmt | Formatea párrafo | -w, -u |
| grep | Encuentra texto | -i, -v, -r, -qs, -n, -l, -w -x, -A -B -C |
| head | Muestra Inicio | -n, -c |
| od | Muestra Caracteres | -la, -c, -el, -x |
| paste | Paraleliza archivos | -d, -s |
| printf | Muestra texto | ninguna |
| rev | Invierte texto | ninguna |
| sed | Edita texto | -n, -f, s/eso/aquello/, p, d, q, N |
| seq | Cuenta Números | -s, -f |
| sort | Ordena texto | -n, -f, -r, -k -t, -el |
| tac | Invierte archivo | ninguna |
| tail | Muestra Final | -n, -c, -f |
| tee | Archiva flujo | -la |
| tr | Transforma texto | -d, -s, A-Z a-z |
| uniq | Remueve duplicatas | -i, -d, -u |
| wc | Cuenta Letras | -c, -w, -l, -L. |
| xargs | Administra argumentos | -n, -i |