Documentos de Académico
Documentos de Profesional
Documentos de Cultura
02 ShellScripts
02 ShellScripts
rogramacin de
rogramacin de
8hell 8cripts
8hell 8cripts
apacitacin 2005 KT ngeniera Electrnica SRL
2
ontenido:
+ Mdulo 0 Generalidades
+ Mdulo 1 !ntroduccin
+ Mdulo 2 Caracteres especiales y Quoting
+ Mdulo 3 variables
+ Mdulo 4 Operadores
+ Mdulo 5 Construcciones condicionales
+ Mdulo 6 Construcciones iterativas o de repeticin
+ Mdulo 7 Funciones
+ Mdulo S Entrada y Salida Redireccin
+ Mdulo 9 Herramientas Niscelaneas
+ Mdulo 10 Filtros
+ Mdulo 11 Lenguaje wk
+ Mdulo 12 Lenguaje sed
+ Mdulo 13 - Depuracin de scritps. Ejercitacin
+ Mdulo 14 Conclusiones
Agenda {mdulos)
apacitacin 2005 KT ngeniera Electrnica SRL
3
Mdulo 0
Generalidades
apacitacin 2005 KT ngeniera Electrnica SRL
4
- Shell
!ntrprete de comandos
Lenguaje de programacin
- Entorno de trabajo
- Case sensitive
- Si un programa no esta en el PATH: .fnombre_programa
- Prompts:
$: usuario normal
#: usuario administrador o superusuario (root)
- Scripts
- Lista de comandos UN!X reunidos en un archivo. Reutilizacin de cdigo
- Un script es un nuevo comando
Filosofia UN!X crear comandos complejos a partir de comandos simples"
Generalidades
apacitacin 2005 KT ngeniera Electrnica SRL
6
- El shell es independiente del S.O. generacin de docenas de shells
- Bourne shell (Steven Bourne, UN!X version 7, 1979), conocido como sh
- Principal alternativa a sh fue el shell (Bill Joy, BSD, 1981), csh
- Turbo shell, tcsh, superconjunto de csh con mejoras respecto a
amigabilidad y velocidad
- Korn shell (David Korn, AT8T, 1986), ksh, comercial, {ksh) > {sh) U {csh)
- Una alternativa sin costo es la versin de Korn shell conocida como pdksh
(Public Domain Korn shell). pdksh esta disponible como cdigo fuente
- Bourne Again shell (Brian Fox, Chet Ramey, 19881993), bash
- Creado para su uso en el proyecto GNU (Richard Stallman, FSF), no comercial
- Se convirt rapidamente en el derivado de Bourne Shell mas popular
- Shell estandar utilizado ampliamente en los sistemas UN!X e incluido en Linux
- {bash) > {csh) U {ksh)
- !ntuitivo y flexible
- Z shell, zsh, (Paul Falstad, Princeton, aprox. 1990) posee similitudes con ksh
{zsh) > {bash) U {ksh) U {tcsh)
Historia de los shell de UNIX
apacitacin 2005 KT ngeniera Electrnica SRL
7
Mdulo 1
!ntroduccin
apacitacin 2005 KT ngeniera Electrnica SRL
8
{Bourne Shell} < {Bourne shell Again} > { Shell} U {Korn Shell}
- aractersticas propias de -shell incorporadas:
- Nanipulacin de directorios.
- Control de trabajos.
- Expansin de llaves, para la generacin de cadenas arbitrarias.
- Caracter tilde (~), manera de referenciar al directorio home.
- Alias, que permiten referenciar mas convenientemente comandos y sus opciones.
- Histrico de comandos, que posibilita reutilizar comandos previamente tipeados.
- aractersticas propias:
- Edicin de linea de comandos, permite usar comandos al estilo vi o emacs.
- Configuracin de teclas (key bindings) permiten establecer secuencias de teclas de
edicin personalizadas .
- Caracteristicas de programacin integrada: la funcionalidad de comandos UN!X (test,
expr, getopt, echo) se integraron en el shell, permitiendo que tareas comunes de
programacin sean realizadas mas clara y eficientemente.
- Estructuras de control, especialmente el select para la generacin sencilla de menus.
- Opciones y variables nuevas permiten personilizar mas el entorno.
- Arrays unidimensionales que permiten facil acceso a lista de datos.
aractersticas de bash
apacitacin 2005 KT ngeniera Electrnica SRL
0
!/bin/bash
Primer script
echo Hola Mundo
$./hol.sh
Hola Mundo
Primer ejemplo
hol.sh
quien interpretara
el resto de los
comandos
comentario comando
jecucin:
apacitacin 2005 KT ngeniera Electrnica SRL
Lee la entrada desde un archivo, como un argumento o desde la
terminal
Divide la entrada en tokens de acuerdo a las reglas de quoting.
Se hacen expansiones de metacaracteres y alias
Se analizan los tokens y se dividen en comandos simples y
compuestos
Se hacen expansiones separando los tokens expandidos en listas de
nombres de archivo y comandos con sus argumentos
Se realizan redireccionamientos, eliminando operadores y
operandos de redireccin
Se ejecuta el comando
Opcionalmente se espera la finalizacin del mismo para recoger su
exit status
mo ejecuta un comando en shell?
apacitacin 2005 KT ngeniera Electrnica SRL
2
Archivos de configuracin de bash {1J5)
- Existen, eventualmente, tres archivos en el directorio home
.bsh_profile
.bshrc
.bsh_logout
- Se utilizan para definir variables yJo ejecutar comandos al ingresar
al sistema, cuando se invoca un nuevo shell o al cerrar la sesin
- Pueden existir o no dependiendo de como se creo la cuenta de
usuario.
Si no existen, el usuario utilizar slo el archivo de sistema
/etc/profile, o puede optar por editarlos l mismo
- El ms importante es .bsh_profile, el cual es leido por el shell
para ejecutar los comandos que contiene cada vez que se ingresa al
sistema
apacitacin 2005 KT ngeniera Electrnica SRL
4
Archivos de configuracin de bash {2J5)
- Algunas lneas de .bsh_profile
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/locl/bin
SHELL=/bin/bsh
MANPATH=/usr/mn:/usr/X11/mn
EDITOR=/usr/bin/vi
PS1='\h:\w\$ '
PS2='> '
set -o ignoreeof
export EDITOR
- Si se agregan nuevas lneas no sern consideradas hasta que el
archivo .bsh_profile sea ledoJejecutado nuevamente,
reingresando al sistema, por ejemplo
- omando source: Ejecuta los comandos en el archivo especificado
$ source .bsh_profile
- Alternativa para source comando, utilizar el comando punto {.)
$ ./bsh_profile
apacitacin 2005 KT ngeniera Electrnica SRL
5
Archivos de configuracin de bash {3J5)
-bash admite dos sinnimos para .bsh_profile:
-.bsh_login, derivado del archivo .login de shell
-.profile, derivado del archivo .profile del Bourne shell y el Korn
shell
-Se lee slo uno de estos al ingresar al sistema
- Orden: .bsh_profile .bsh_login .profile
- .bshrc puede o no existir
- Al iniciar un nuevo shell (un subshell) se leern los comandos de
.bshrc
- eparacin de comandos de inicio y de personalizacin de shell
Si .bshrc no existe entonces no se ejecutarn cuando se inicia un
subshell
apacitacin 2005 KT ngeniera Electrnica SRL
6
Archivos de configuracin de bash {4J5)
# If running interctively, then:
if [ "$PS1" ]; then
# don't put duplicte lines in the history.
# export HISTCONTROL=ignoredups
# enble color support of ls nd lso dd hndy lises
evl `dircolors -b`
lis ls='ls --color=uto
# some more ls lises
#lis ll='ls -l'
#lis l='ls -A'
#lis l='ls -CF'
# set fncy prompt
PS1='\u@\h:\w\$ '
# If this is n xterm set the title to user@host:dir
#cse $TERM in
#xterm*)
# PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"
# ;;
#*)
# ;;
#esc
fi
apacitacin 2005 KT ngeniera Electrnica SRL
8
Archivos de configuracin de bash {5J5)
-.bsh_logout es ledo y ejecutado cada vez que se sale del
-Brinda la capacidad de ejecutar comandos, como eliminar archivos
temporarios
-Generalmente hay que definirlo mediante edicin manual
-Si no existe, no se ejecutarn comandos extra a la salida
apacitacin 2005 KT ngeniera Electrnica SRL
9
- A veces la sintaxis de los comandos es difcil de recordar,
especialmente si se utilizan con varias opciones y argumentos
- Alias = sinnomo enriquecido
- Los alias pueden definirse en lnea de comandos, en el
.bsh_profile, o en .bshrc, mediante:
lis [nme=commnd] JJ sin espacios entre el signo =
- Ejemplos: $ alias lf='ls -F'
$ alias revsort='ls [0-9]* | sort -v'
.
- Notas:
- Se permite definir un alias de un alias
- No estn permitidos los alias recursivos $ alias ls='ls -la'
- Los alias slo pueden usarse al principio de un comando {existen
excepciones)
$ alias pkgs=/var/sadm/pkg
$ alias cd='cd '
.
- Implicancias
Brevedad (ls=ls -lha) Costumbre (dir=ls)
Proteccin (rm=rm -i) Personalizacin (moer=more)
Alias
apacitacin 2005 KT ngeniera Electrnica SRL
20
- Los alias permiten definir nombres convenientes para los comandos
pero no cambian realmente el comportamiento del shell
- Una opcin de shell se establece como activaJinactiva {onJoff) y
cambia efectivamente el comportamiento del shell
- Sintaxis bsica {contraintuitiva)
set +o opcion off
set -o opcion on
- Para visualizar el estado de las opciones set -o
- La mayora de los nombres de opciones tienen asociado una letra
para abreviarlas, set -o noglob set -f
- Ejemplos: {en on)
ignoreeof Deshabilita Ctrl-d para salir de la sesin; debe usarse exit
noclobber Deshabilita la redireccin de salida (>) sobre archivos existentes
noglob Deshabilita la expansin de metacaracteres como * y ?
notify Reporta el estado de terminacin de los jobs de inmediato
nounset !ndica un error cuando se intenta utilizar variables no definidas
vi Entra al modo edicin de vi directamente
Opciones
apacitacin 2005 KT ngeniera Electrnica SRL
22
Mdulo 2
Caracteres especiales
y Quoting
apacitacin 2005 KT ngeniera Electrnica SRL
23
- onocidos tambin como metacaractes
- Los metacaracteres poseen significado especial para el shell
- Existen diversas categoras de acuerdo a la funcionalidad con que
estn relacionados
- Ejemplos:
$ cd ~/libros
$ rm *.bck
$ find / -name a* & Bsqueda prolongada
$ echo El dijo \Hola\
$ echo Fecha y hora actual: `date`
$ echo Hay `wc -l /etc/passwd | awk '{print $1}'` usuarios
aracteres especiales
apacitacin 2005 KT ngeniera Electrnica SRL
24
Crcter Significdo
~ Directorio home
` Sustitucin de comndo
# Comentrio
$ Vlor de vrible
& Trbjo en bckground
* Estrell de Kleene (expresiones regulres)
( Inicio de subshell
) Fin de subshell
\ Crcter de Escpe
| Pipe
[ Inicio de conjunto de crcteres (expresiones regulres)
] Fin de conjunto de crcteres (expresiones regulres)
{ Inicio de bloque de comndos
} Fin de bloque de comndos
; Secuencilizr comndos
' Comill simple (Strong quote)
" Comills dobles (Wek quote)
< Redireccin entrd
> Redireccin slid
/ Seprdor de directorios en pthnme
? Reemplzo de un crcter (expresiones regulres)
! Negcin de pipeline
aractes especiales
apacitacin 2005 KT ngeniera Electrnica SRL
26
- Los archivos ocultos comienzan con punto {.), utilizar ls - (:all)
- omodines
? un caracter cualquiera
* cualquier cadena de caracteres
[...] cualquier caracter entre los corchetes (conjunto)
[!...] cualquier caracter no perteneciente al conjunto
- onjuntos
[bc] , b o c
[.,;] punto, coma y punto y coma
[-c] , b o c
[-z] Todas las minusculas
[!0-9] Ningun digito
[0-9!] Todos los digitos y el caracter !
[-zA-Z] Todas las letras minusculas y mayusculas
- Expansin de llaves {brace expansion)
prefijo{cdens}sufijo
$ echo c{p,r,s}s
capas caras casas
Archivos, comodines y pathname expansion
apacitacin 2005 KT ngeniera Electrnica SRL
27
- La teclas de control {CTRL-letr) son otro tipo de metacaracter
- Normalmente no imprimen nada
- RETURN = CTRL-m
BACKSPACE = CTRL-h
- Pueden diferir de sistema en sistema
Control Key Descripcin
CTRL-C Detiene el comndo ctul (envi SIGINT)
CTRL-D Fin de entrd (eof)
CTRL-\ Detiene el comndo ctul
(si no funcion CTRL-C, envi SIGQUIT)
CTRL-S Detiene slid por pntll
CTRL-Q Reinici slid por pntll
DEL or CTRL-? Borr ltimo crcter
CTRL-W Borr l ltim plbr de l lne de comndos
CTRL-U Borr l line de comndos enter
CTRL-Z Suspende el proceso ctul
CTRL-A Cursor l principio de l lne de comndos
CTRL-E Cursor l finl de l lne de comndos
CTRL-R Bsqued recursiv de comndos
ontrol keys
apacitacin 2005 KT ngeniera Electrnica SRL
28
- Deshabilitar el comportamiento por defecto o imprime textualmente
un metacaracter
- Proteger metacaracteres dentro de una cadena a fin de evitar que se
reinterpreten o expandan por accin del shell
- Ejemplos:
$ echo 2 * 3 > 1 es cierto
No produce salida, que pas?
$ echo El vlor de este producto es $120
El valor de este producto es 20
Por que sale 20 y no 120?
$ ls [A]+
-rw-r--r-- 1 admin admin 1250 Apr 2 15:05 Apendice.txt
-rwxrw-rw- 1 admin admin 804 May 5 18:09 append.c
-rwxrw-rw- 1 admin admin 539 May 9 20:58 a.out
- Existen tres mecanismos de quoting
- El caracter de escape \ (escape character)
- Comillas dobles " (double quotes)
- Comillas simples ' (single quotes)
Quoting
apacitacin 2005 KT ngeniera Electrnica SRL
30
- Es el carcter \ {backslash)
- Evita que el siguiente carcter sea interpretado por el shell
$ echo $1234
234
$ echo \$1234
$1234
- Excepcin: \newline, esta secuencia se interpreta como
continuacin de lnea eliminando posteriormente esta secuencia de
la entrada del comando
- Ejemplo:
$ echo Texto escrito en \
> ms de un line
Texto escrito en mas de una linea
El carcter de escape
apacitacin 2005 KT ngeniera Electrnica SRL
3
- Los caracteres encerrados entre comillas dobles preservan su valor
literal
- Tambin se conoce como Weak quoting o Partial quoting
- Los caracteres * y @ tienen un significado especial cuando se
encierran con comillas dobles
- Excepciones:
$ y ' siguen manteniendo sus significados especiales
\ sigue manteniendo su significado especial slo si antecede los caracteres
$, ', , \ o newline.
- Ejemplos:
$ echo El reloj tiene un vlor de $123
El reloj tiene un precio de 23
$ echo El reloj tiene un vlor de \$123
El reloj tiene un precio de $123
$ echo Es un vino con buen 'bouquet'
Es un vino con buen 'bouquet'
omillas dobles
apacitacin 2005 KT ngeniera Electrnica SRL
32
- Los caracteres encerrados entre comillas simples preservan su valor
literal
- No se permite la desreferencia de variables entre comillas simples
- No puede aparecer una comilla simple entre dos comillas simples
- Tambin se conoce como Strong quoting o Full quoting
- Excepcin: \newline
- Ejemplos:
$ VAR=10
$ echo '$VAR'
$VAR
$ echo 'd* = el crcter <d> seguido de culquier cden, \
inclusive l vc'
$ echo 'L comill simple (') tmin es llmdo opostrofo'
omillas simples
apacitacin 2005 KT ngeniera Electrnica SRL
34
- Las cadenas de la forma $'texto' son consideradas de manera
especial
La cadena se expande a texto con los caracteres de escape \
reemplazados como lo especifica el estndar ANSI-
\ alerta (alerta)
\b retroceso (backspace)
\n nueva lnea (new line)
\t tab horizontal (horizontal tab)
\v tab vertical (vertical tab)
\\ barra invertida (backslash)
- Ejemplos:
$ echo Brr invertid = $'\\'
Barra invertida = \
& nd
&= nd-igul
| or
|= or-igul
~ negcin
! negcin
^ xor (o-exclusivo)
^= xor-igul