cli (command line interface) ¿qué es una shell? introducci...
TRANSCRIPT
Dpto. Informática y Automática
Programaci
Programaci
Programaci
Programacióóó ón n n n
en Shell
en Shell
en Shell
en Shell
Rodrigo Santamaría Vicente
http://carpex.usal.es/~visusal/rodrigo/shellscript.htm
Co
nte
nid
os
1.Introducción a la shell
2.P
rogramación básica en bash
3.P
rogramación avanzada
4.sed y aw
k5.
Referencias
Introducci
Introducci
Introducci
Introduccióóó ón an an an a
la Shell
la Shell
la Shell
la Shell
1.1.1.1.¿¿¿ ¿Qu
QuQu
Quééé ées una shell?
es una shell?
es una shell?
es una shell?
2.2.2.2.Tipos de shell
Tipos de shell
Tipos de shell
Tipos de shell
3.3.3.3.Usos de la shell
Usos de la shell
Usos de la shell
Usos de la shell
4.4.4.4.Variables de entorno
Variables de entorno
Variables de entorno
Variables de entorno
Interfaz entre el Sistem
a Operativo y el
Usuario
Dos tiposG
ráficaLínea de C
omandos
CLI (C
omm
and Line Interface)intérprete de com
andos, terminal, consola
¿Q
ué
es u
na s
hell?
shell (ȓǫl/) –noun 1.a hard outer covering of an anim
al, as the hard case of a m
ollusk, or either half of the case of a bivalve mollusk.
Sh
ell G
ráfic
a
Sh
ell d
e L
ínea
de C
om
an
do
s
Generalm
ente con shellnos referim
os a una C
LIde Unix
Grá
fica v
s T
ex
to
Transferencia o
procesamiento de datos
Procesam
iento de imagen,
video, etc.
Usuario experto
Usuario base
Ciertas operaciones son m
ás rápidas o no se pueden hacer de otro
modo
Sencilla
Fácil uso
Línea de Com
andosG
ráfica
Tip
os d
e s
hell
•B
ourneshell (sh)
–1971 (Thom
pson), 1976 (Mashey)
–1977. Stephen B
ourne, Bell Labs.
•C
Shell (csh)
–1978. Bill Joy, B
erkeley•
Korn
Shell (ksh)
–1982. David K
orn, Bell Labs.
•B
ourne againshell (bash)
–1987. Brian F
ox, GN
U P
roject
Bo
urn
e S
hell (s
h)
•La m
ás antigua•
No tiene características interactivas
–H
istoria de comandos
–A
utocompletar nom
bres de ficheros–
…•
No tiene estructuras com
plejas de program
ación–
Funciones
–C
ase–
…
C S
hell (c
sh
)
•S
intaxis como el lenguaje C
–N
o compatible con la fam
ilia Bourne
•C
apacidades interactivas–
Pausar/reiniciar procesos
–H
istoria de comandos
–O
peraciones aritméticas
Ko
rn S
hell (k
sh
)
•S
ustituye y es compatible con B
ourne
•C
aracterísticas interactivas como C
, pero m
ejoradas–
Añade edición de líneas de la historia
–E
jecución más rápida
Bo
urn
e a
gain
sh
ell (b
ash
)
•Juego de palabras con born-again (renacido)
•D
esarrollado para el proyecto GN
U, que daría
lugar a Linux•
De nuevo, tom
a las mism
as ideas que ksh y csh y las im
plementa sobre sh
–P
arámetros
–O
peraciones matem
áticas–
Redireccionam
iento E/S
–E
xpresiones regulares–
etc.
Dis
tribu
cio
ne
s
AIX
, HP
-UX
, B
SD
mac os X
solarisfreebsd
linux
ksh
csh
bash
PO
SIX
sh
ell
•S
imilar a ksh y utilizada por H
P-U
X•
95
%com
patible con bash•
Com
o ksh, integra características de la csh, m
ejoradas (histórico de comandos,
autocompleción, operaciones aritm
éticas…)
•Las diferencias entre P
OS
IX y ksh son m
ínimas:
–http://docs.hp.com
/en/B2355-90046/ch15s03.htm
l
Mu
ltiplic
ida
d d
e la
s s
hells
•A
nte el mism
o sistema operativo, podem
os tener varias shells activas al m
ismo tiem
po–
Gráficas y de texto (Linux)
–D
e texto en distintos terminales
•$$
indica el PID
de la shell en ejecución•ps
para ver los PID
de todos los procesos en ejecución
•$SHELL
nos indica el tipo de shell que estamos
usando (chsh
para cambiar de shell)
•/etc/shells
es un fichero con todos los tipos de shell disponibles en el sistem
a
Uso
s d
e la
sh
•Intérprete de com
andos: ejecutar comandos
desde el intérprete•
Scripts: ejecutar secuencias de com
andos desde un fichero
•P
rogramas: control del flujo de ejecución de
secuencias de comandos (bucles, condiciones,
variables, etc.) desde un fichero
Inté
rpre
te d
e c
om
an
do
s
•S
intaxistípica
–com
an
do [-]o
pcio
ne
s p
ará
me
tros
•O
pciones: dependen de cada comando y alteran
su funcionamiento
•P
arámetros: variables de entrada que necesita el
comando, separadas por espacios
–ps –fu
–ls file.txt
–grep “*.txt” ../folder
Pro
ce
sam
ien
to s
ec
uen
cia
l
date
ps –fu
who
•E
l sistema com
pleta cada comando antes
de ejecutar el siguiente:
Pro
ce
sam
ien
to s
ec
uen
cia
l
•date;
“ps –fu”;
who
Pro
ce
sam
ien
to n
o S
ecu
en
cia
l
•C
ada programa se ejecuta sin esperar a que el anterior
termine
date &
“ps -fu”
&who
ps
datepsw
ho
datew
ho
Red
irecció
n d
e E
/S
•>
Escribe la salida estándar a fichero
•<
Lee la entrada estándar de fichero•
>>
Añade la salida estándar a un fichero
existente•
> y >
> crean el fichero si no existe
•<
da error si el fichero no existe
Tu
bería
s (p
ipes)
•C
onectan la salida de un programa a la entrada del
siguiente
–ls |
more ~
ls > temp; more < temp
Sh
ell s
crip
t
•P
oner en fichero órdenes que se puedan ejecutar en el intérprete de com
andos
•P
ara editar el fichero, se puede usar cualquier editor (típicam
ente vi)
•E
jemplo: editar un fichero con la línea:
•date; who; ps uf; du /home
•E
jecutar con: •
sh
nombreScript
Tru
co
s
•S
i se usa vi, lo ideal es tener dos consolas
abiertas, una para edición y otra para ejecución•
Para poder ejecutar un fichero com
o script, debem
os tener permisos de ejecución
•chmod +x
nombreFichero
•O
tros modos de ejecución:
–./nombreScript
–nombreScript
si se encuentra en el PA
TH
Fic
hero
.pro
file
•S
cript(s) que se ejecuta automáticam
ente al hacer login
•S
e encuentran en el directorio raíz del usuario
•E
stablece el “entorno” de trabajo
.profile.c
sh
rc
.profile.k
sh
rc
.bash_profile.bash_login
.profile.b
as
hrc
.profile
csh
ksh
bash
sh
Varia
ble
s d
e e
nto
rno
Shell que estam
os usandoSHELL
Configuración del prom
pt de consolaPS1
Tipo de S
istema O
perativoOSTYPE
Directorio de trabajo actual
PWD
Nom
bre de cuenta con el que hemos
accedido al sistema
LOGNAME
Directorio raíz de nuestra cuenta
HOME
Directorios para la búsqueda de parám
etros, separados por (:)PATH
Varia
ble
s d
e e
nto
rno
•P
ara acceder al valor $VAR
•P
ara mostrar el valor
echo
$VAR
•P
ara cambiar el valor
VAR=valor
•Los cam
bios a las variables de entorno n
o se m
antienen para otras shells a no ser que se incluyan en el .p
rofile
o se utilice e
xp
ort
•E
jercicio–
Establecer en el P
AT
H la ruta de la carpeta
donde almacenarem
os los scripts
Programaci
Programaci
Programaci
Programacióóó ón n n n
bbb bááá ásica en Bourne Shell
sica en Bourne Shell
sica en Bourne Shell
sica en Bourne Shell
1.1.1.1.Introducci
Introducci
Introducci
Introduccióóó ónnn n
2.2.2.2.Variables
Variables
Variables
Variables
3.3.3.3.Par
Par
Par
Parááá ámetros
metros
metros
metros
4.4.4.4.E/S E/S E/S E/S
5.5.5.5.Condiciones
Condiciones
Condiciones
Condiciones
6.6.6.6.Bucles
Bucles
Bucles
Bucles
7.7.7.7.Funciones
Funciones
Funciones
Funciones
8.8.8.8.Operaciones
Operaciones
Operaciones
Operaciones
aritmaritmaritmaritm
ééé éticas
ticas
ticas
ticas
9.9.9.9.Depuraci
Depuraci
Depuraci
Depuracióóó ónnn n
Pro
gra
ma
ció
n S
hell
•S
cripts donde introducimos conceptos
propios de la programación
–V
ariables–
Parám
etros–
Condiciones
–B
ucles–
Funciones
–O
peraciones aritméticas
•Los com
andos disponibles de la shell actúan com
o nuestra biblioteca de funciones
Po
r qu
é p
rog
ram
ar e
n s
hell?
•R
equiere un cierto esfuerzo programar en
shell, así que antes debemos plantearnos si
nos va a ser útil•
Razones para program
ar en shell1.
Porque nos lo m
andan (como es el caso)
2.P
orque sabemos program
ar: el esfuerzo necesario para aprender es m
uchísimo m
enor3.
Porque en nuestro trabajo nos va a ser útil:
–A
dministradores: tareas com
plejas o automatizables
–H
ackers : tareas rápidas–
Program
adores usuarios: tareas que se repiten
Cu
án
do
pro
gra
mar e
n s
hell?
•Llam
adas frecuentes a funciones del sistema
•Llam
adas repetitivas a una función del sistema
•P
rogramas cortos
–S
i un programa pasa de una página, probablem
ente la shell no sea la m
ejor solución
•C
uanto mejor conozcam
os la shell y sus com
andos, más la usarem
os y más útil será la
programación en shell
Varia
ble
s
•A
demás de las variables de entorno podem
os declarar variables lo
cale
sal script
•N
o tienen tipo, no hay que declararlas o inicializarlas previam
ente
•A
signación:variable=valor
•A
cceder al valor: $variable
Varia
ble
s (II)
•P
ara diferenciar el valor de variables en cadenas, usam
os { }:–dir2=/home/rodrigo/curso
–cat ${dir2}/lista.txt
–E
n las shells más m
odernas ya no es necesario
•N
ormalm
ente, se abre una shell para ejecutar el script–
si queremos que se ejecute en la shell en que
estamos, y así luego tener disponibles las variables,
usamos (.):
. programa
Pará
metro
s
•U
n script puede tener parámetros de entrada
igual que cualquier comando
–script par1 par2 par3 …
•P
ara acceder a sus valores usamos
–$1, $2, $3, … $9
•$0
es el nombre del com
ando•$*, $@
devuelven todos los parámetros
separados por espacios
Pará
metro
s (II)
•N
úmero de parám
etros:$#
•S
i tenemos m
ás de 9 parámetros, tenem
os que usar desplazam
ientos:shift [n]
–D
onde nes el núm
ero de pasos que desplazamos
–S
i no se especifica n, se com
porta como s
hift 1
Gestió
n E
/S: e
ch
o
•S
alida por consola: echo
cadena
Lo que encierra se toma literalm
ente‘’
Todo lo que está entre com
illas pierde su significado especial salvo $ y \
“”
Elim
ina el significado especial del siguiente carácter\
Todo lo que está entre acentos graves se trata com
o un com
ando` `
Evita el salto de línea
(útil si se espera un parámetro de entrada)
-n
des
crip
ció
nC
ara
cte
res
esp
ec
iale
s
ech
o: s
ecu
en
cia
s d
e e
scap
e
tabulador horizontal\t
retorno de carro\r
alerta (beep)\a
salto de línea\n
suprime el salto de línea (com
o –n
)\c
elimina el carácter anterior (backspace)
\b
barra hacia atrás (\)
\\
activa la interpretación de secuencias de escape-e
des
crip
ció
ns
ec
ue
nc
ias
d
e e
sc
ap
e
ech
o: c
ód
igo
s d
e e
sc
ap
e
•S
e introducen con la secuencia de escape \033
•C
ada código tiene la sintaxis: [parametroAcción
–parámetro
es un número
–acción
es una letra
•E
jemplo:
•echo –e
“\033[34m
Hola”
ech
o: c
ód
igo
s (ii)
11
–acepta caracteres A
SC
II extendidos (asciitable.com)
30-37
–establece el color de las letras (3
1rojo, etc.)
27
–deshabilita el intercam
bio de colores
25
–deshabilita el parpadeo
0–
modo por defecto (letras negras, fondo blanco)
7–
intercambia el color de fondo y el de las letras
5–
parpadeo
1–
negrita
40-47
–establece el color de fondo
modifica el estilo de la fuente
m
des
crip
ció
n y
pa
rám
etro
sa
cc
ion
es
ech
o: c
od
igo
s (iii)
Recupera la posición del cursor y sus atributos
ojo
: 7s
y 8
u n
o fu
ncio
nan
en
tod
os lo
s te
rmin
ale
s, e
s m
ás
re
co
men
tab
le u
sar t
put sc
y tput rc
8u
Establece la posición del cursor
x;y
–posición para el cursor
H,f
Alm
acena la posición del cursor y sus atributos7s
0–
apaga todos los bloqueos del teclado
3–
enciende el bloqueo de mayúsculas, apaga el resto
2–
enciende el bloqueo de números, apaga el resto
1–
enciende el bloqueo de scroll, apaga el resto
gestiona los bloqueos del tecladoq
des
crip
ció
na
cc
ion
es
ech
o: e
jem
plo
sG
estio
n E
/S: re
ad
•E
ntrada de consola: read
var
•E
n ksh también se puede hacer así:
•read fich?“Introduce nombre de fichero: ”
Gestió
n E
/S: e
xit
•S
alida del script:exit
código_fin
•0
terminado con éxito
•1
error interno•
2error por sintaxis de llam
ada
•$?
Devuelve el código de salida del últim
o com
ando ejecutado
Exp
resio
nes re
gu
lare
s
•M
anejar con soltura las expresiones regulares es fu
nd
am
en
talpara program
ar en shell y manejar
comandos com
o grep, sed o awk.
Cualquier cadena de caracteres
.*
Cualquier carácter de los especificados entre corchetes, o un rango si separados por ‘-’
[a-z] [0-9] [a-z,A-Z] [Tt]
[ … ]
Cualquier carácter (1 ocurrencia)
.
La expr. reg. anterior aparece 0+
veces*
Descrip
ció
nS
ímb
olo
Ex
pre
sio
ne
s re
gu
lare
s (II)
•M
ás expresiones regulares
Marca expr. regulares, para luego repetirlas con \n, donde n
es la n-ésima expr. m
arcada\(…\)
Líneas sin
los caracteres entre corchetes[^…]
Líneas en blanco^$
Interpretar literalmente el sím
bolo especial siguiente
\
La línea empieza con la expr. reg. siguiente
^
La línea acaba con la expr. reg anterior$
Descrip
ció
nS
ímb
olo
Ex
pre
sio
ne
s re
gu
lare
s (III)
•E
xtensión PO
SIX
Aparece la expr. anterior o la posterior
cat|dog�
cat, dog
|
La expr. reg. anterior aparece 1+
veces
[hc]+at �
hat, cat, hhat, chat,
__________hcat, ccchat
+
La expr. reg. anterior aparece 0 ó
1vez
[hc]?at �
at, hat, cat
?
Descrip
ció
nS
ímb
olo
Co
nd
icio
nes
•iflista_condiciones1
•then
lista_comandos1
•elif
lista_condiciones2
•then
lista_comandos2
•…
•else
lista_comandosN
•fi
Test
•P
ara chequear condiciones se usan [ ]en
la sintaxis del if (equivalente al comando
test)
Mayor o igual que
-ge
Menor o igual que
-le
Mayor que
-gt
Menor que
-lt
Igual a-eq, =
Test
Verdadero si f
ich
existe y tiene tamaño
mayor que cero
-s fich
Verdadero si f
ich
existe y es un directorio-d fich
Verdadero si f
ich
existe y se puede ejecutar-x fich
Verdadero si f
ich
existe y se puede escribir-w fich
Verdadero si f
ich
existe y se puede leer-r fich
Verdadero si f
ich
existe y es un fichero -f fich
Fic
hero
s
Test
Verdadero si c
ad
existe y no tiene valor nulo
cad
Verdadero si las cadenas son distintas
cad1!=cad2
Verdadero si las cadenas son iguales
cad1==cad2
Verdadero si c
ad
sí es una cadena nula-z cad
Verdadero si c
ad
no es una cadena nula -n cad
Cad
en
as
Test
OR
-o
AN
D-a
Op
era
do
res b
oo
lean
os
•O
bservaciones–
Incluir siempre un espacio despues de [ y antes de ]
–test solo vale para enteros, los reales son truncados al entero m
ás próximo
Case
•E
xpansión de if
(similar al sw
itch de C
o java)•case
param in
•patron1 [ | patron2…] )
lista_comandos1 ;;
•patron2 [ | patron3…] )
lista_comandos2 ;;
•…
•esac
Case
Eje
rcic
io
•H
acer un script similar a m
v, move
, con la siguiente sintaxis
»move filename
•D
eberá:1.
Chequear si hay argum
ento y salirse si no, m
ostrando la sintaxis correcta2.
Chequear que el argum
ento es un fichero3.
Preguntar si se quiere m
over el fichero a otro directorio o cam
biarle el nombre
4.P
roceder en cada caso, pidiendo el nombre
nuevo para el fichero o el directorio al que se va a m
over y realizar la operación (mv
)
Eje
rcic
ios
1.M
odificar move
para que el paso 3 se haga mediante
case
2.H
acer un programa s
howLines
que muestre n
um
líneas de un fichero empezando en s
tart
–showLinesstart num file
3.H
acer un programa s
ayHello
que diga “Buenos
dias”, “Buenas tardes” o “B
uenas noches”, seguido del nom
bre del usuario, según la hora que sea. El
programa debe ejecutarse autom
áticamente al abrir
un terminal
Bu
cle
s
•F
or•for
parametro [ in
lista]
•do
lista_comandos
•done
•parametro
toma los valores de la l
ista
y para cada uno de ellos se ejecuta lista_comandos
•S
i se omite la lista, p
arametro
contiene los parám
etros de entrada al script ($1 $2 …)
for (ii)
for (iii)
•S
intaxis como en C
:–for ((
expr1; expr2; expr3 ))
–do
–…
–done
•E
jemplo:
–for ((
i = 0 ;
i <= 5;
i++
))
do
echo “Hola $i veces"
done
Wh
ile
•Ejecutam
os lista_comandos2
mientras la
siguiente entrada de lista_comandos1
tenga éxito (código de salida 0):
•while lista_comandos1
•do lista_comandos2
•done
Un
til
•Com
o while, pero se ejecuta hasta que
la condición sea verdadera, en vez de m
ientras la condición no sea falsa (~
do…w
hile de C o java)
•until lista_comandos1
•do lista_comandos2
•done
Eje
mp
los w
hile
-u
ntil
Deta
lles
•break
rompe un bucle f
or
o while
•#
a comienzo de línea para añadir un com
entario
•$$
devuelve el identificador único de la shell
•R
ecursividad: un script puede llamarse a sí
mism
o
Eje
rcic
ios
1.H
acer un script gp
(gro
upcopy), que copie
todos los ficheros del directorio actual al directorio especificado, con la siguiente sintaxis:
–gp [-q] [-d] directorioDestino
»-q
para confirmar la copia de cada fichero
»-d
para incluir ficheros en los subdirectorios
Eje
rcic
ios
2.R
ealizar un script digitalClock
que muestre
la hora cada segundo (función sleep
), siem
pre en la mism
a posición (fila 0y colum
na 69
)
Fu
nc
ion
es
•nombreFuncion() {listaComandos;}
–Llam
ada:nombreFuncion parametros
•parametros
es una lista separada por espacios
–$1, $2, …
dentro del código de la función son los parám
etros con los que se llama a la función
•dentro de la función no se pueden referenciar los parám
etros posicionales.
–U
na función debe declararse al principio del fichero, o al m
enos antes de su primera llam
ada–
Una función puede hacerse recursiva llam
ándose a sí m
isma
Fu
ncio
nes (ii)
•Retorno de función:
–Código de retorno:
return n
–Devolver una variable:
echo $var
–Si se retorna con e
cho
, se considera un retorno con éxito (r
eturn 0
)–E
jemplo:
•ret=`factorial 3`
•echo $?
•echo $ret
factorial()
{…echo $fact
}
Fu
ncio
nes (iii)
Con return, los
valores que se devuelven son num
éricos y siguen el m
ismo
código de retorno
Tom
a los parámetros com
o si fuera el script principal
No hay que declarar
parámetros
Alc
an
ce y
Bib
liote
ca d
e fu
nc
ion
es
•C
ualquier variable declarada en un punto o función del program
a es acessible en cualquier otro punto o función–
No hay definición de alcance m
ás que para los parámetros
posicionales $1, $2, …
•Las funciones de un script puede utilizarse en otros scripts utilizando el com
ando–. ./script
–G
eneralmente, a los scripts que son sólo funciones tienen
las extensión .lib
•La función se invoca com
o si estuviera en nuestro script
exp
r
•expr
expresion1 operador expresion2
•expr
se puede sustituir por (( … ))
•R
ealiza operaciones aritméticas
Com
paración de enteros=
,!=,\>
,\>=
, \<
,\<=
Multiplicación, división, resto
\*,/,%S
uma, resta
+, -
acció
no
pera
do
r
exp
r
•Y
operaciones con cadenas
Posición de la prim
era ocurrencia del carácter
c en
c1
exprindexc1 c
Subcadena de c
1que em
pieza en la posición s
tarty de longitud le
ngth
expr substrc1
startlength
Nº de caracteres de c1
expr lengthc1
Nº de caracteres en que coinciden c
1y
c2
(pueden ser expresiones regulares)expr c1:c2
acció
nexp
res
ión
Eje
rcic
ios
1.H
acer un script fact
que devuelva el factorial de un núm
ero que se pasa como argum
ento–
Sintaxis: f
act num
2.R
eescribir fact
para que utilice una función que se llam
ará factorial
3.M
odificar la función factorial
para que sea recursiva
4.U
bicar la función factorial en otro fichero (common.lib
) y reescribir fact
para que la invoque a través de la biblioteca de funciones.
wait y
sle
ep
•wait
[n]
–E
spera hasta que el proceso con id nacabe
–S
i no es especifica id, espera a que todos los procesos hijos en background term
inen–
“!” da el id del último proceso lanzado en segundo
plano �wait $!
para esperar por él
•sleep
n
–E
l script se queda bloqueado sin hacer nada durante n
segundos
Dep
ura
ció
n
•sh –v
script
•E
scribe cada linea de código que ejecuta:
–tot=
`expr $1 + $2`
–echo $tot
$ s
h -v
su
ma
.sh
4 5
tot=
`exp
r $1
+ $
2`
exp
r $1
+ $
2e
ch
o $
tot
9
Dep
ura
ció
n d
e s
crip
ts
•sh –x
script
•S
ustituye cada $var
por su valor•
Muestra cada línea de código que se va
ejecutando–
Precedida de +
,o de ++
si es un ‘subcomando’ de la
línea–tot=
`expr $1 + $2`
–echo $tot
$ s
h -x
su
ma
.sh
4 5
++
exp
r 4 +
5+
tot=
9+
ech
o 9
9
Programaci
Programaci
Programaci
Programacióóó ón n n n
avanzada en bash
avanzada en bash
avanzada en bash
avanzada en bash
1.1.1.1.Variables locales y globales
Variables locales y globales
Variables locales y globales
Variables locales y globales
2.2.2.2.SeSeSe Señññ ñales
ales
ales
ales
3.3.3.3.getopts
getopts
getopts
getopts
4.4.4.4.Utilidades esenciales
Utilidades esenciales
Utilidades esenciales
Utilidades esenciales
Varia
ble
s g
lob
ale
s y
locale
s
•Las variables declaradas en un program
a son locales, y por tanto no estarán disponibles en otras shells
•P
ara hacer global:export
var
$ vech=Bus
$ echo $vech
Bus
$ exportvech
$ /bin/bash
$ echo $vech
Bus
$ exit
$ echo $vech
Bus
$ vech=Bus
$ echo $vech
Bus
$ /bin/bash
$ echo $vech
$ vech=Car
$ echo $vech
Car
$ exit
$ echo $vech
Bus
Eje
cu
ció
n c
on
dic
ion
al
•comando1&&comando2
–E
jecuta comando2
sólo si comando1
se ejecutó con éxito
•comando1 ||
comando2
–E
jecutacomando2
sólo sicomando1
se ejecutó sin éxito
•listaComandos1 ;
listaComandos2
–S
e ejecuta primero l
istaComandos1
, luego listaComandos2
–test –d /tools &&cd /tools;test –z “$fn” ||sort
–o $fn $fn &
Señ
ale
s
•U
n programa puede term
inar de manera forzosa
debido a un error en el SO
o a la interrupción por parte del usuario
•P
ara controlar estos eventos, se utilizan señ
ale
s
•S
i, por ejemplo, un program
a modifica ficheros
delicados o crea ficheros temporales, etc. debe
manejar la gestión de señales para evitar dejar
ficheros incompletos o innecesarios
Tra
p
•trap {comandos} {lista de ids. de señal}
•E
jecuta la lista de co
man
do
scuando se produce
alguna de las se
ña
les
especificadas•
Una vez incluida, se m
antiene a la escucha para el resto del program
a•
Es bueno tratar estas señales en una función,
que será la que se incluya en trap
como
comando
ids. d
e s
eñ
al
kill (no se puede coger con trap
)9
terminate (k
ill
que se puede coger con trap
)15
quit3
interrupt (CTRL+C
)2
hangup (colgar)1
salida de la shell0
ocu
rre c
uan
do
nº d
e s
eñ
al
Existen m
uchas más señales (s
eg
me
nta
tion
fau
lt, bu
s e
rror, p
ow
er
fail, e
tc) , pero generalmente, estas son las que se busca controlar
Se
ñale
s: e
jerc
icio
•H
acer un programa a
ges
que1.
Acepte un único parám
etro, el nombre de un
fichero2.
Indefinidamente:
1.P
regunte por un nombre y luego por una edad
2.A
ñada el nombre y la edad a un fichero tem
poral temp
3.P
regunte si se quieren añadir más ficheros
4.S
i no se van a añadir más ficheros, vuelca t
emp
al fichero que se pasó com
o parámetro
3.E
jecutar el programa, m
eter un par de nombres y
luego pulsar CTRL+C
Se
ñale
s: e
jerc
icio
(II)
•¿
Qué ocurre? t
emp
no se ha borrado y no se ha generado el fichero final
•H
acer tratamiento de la señal generada por
CTRL+C
para que temp
se borre en ese caso.
geto
pts
•getopts
optstring var1
•R
ecoge las opciones que se le hayan pasado al script y que coincidan con la sintaxis en optstring
, almacenándolos en v
ar1
•S
i un parámetro en o
ptstring
va seguido de :quiere decir que requiere de un argum
ento•
Ejem
plo de optstring:
–n:asgr:t
»-n argn –a –s –g –r argr –t
»-n argn –r argr -asgt
geto
pts
(II)
•S
i una opción requiere de argumento, se
almacena en $
OPTARG
•$OPTIND
es el índice del siguiente parámetro
•E
jemplo:
•while getopts n:a:s opt
do
case "$opt" in
n) na="$OPTARG";;
a) age="$OPTARG";;
s) single=“y”;;
esac
done
usage: civilState –n name –a age -s
geto
pts
: eje
rcic
ios
1.M
odificar el programa m
ove
para que los parámetros
sean recogidos mediante g
etopts
–usage: m
ove [–f file | -d dir] filename
2.E
scribir un script utilities
que, mediante
getopts
, comprenda la sintaxis
–usage: u
tilities –c –d –e editor
–-c
limpia la pantalla
–-d
muestra la lista de ficheros en el directorio actual
–-e
inicia el editor que se pase como parám
etro (p. ej, vi), com
probando si existe antes–
-?
muestra la ayuda (usage)
Utilid
ad
es e
sen
cia
les
•Linux provee una serie de utilidades esenciales para agilizar el trabajo:–
Ficheros de datos
–Inform
ación del sistema
–A
dministración del sistem
a
•D
e todas ellas, veremos las m
ás importantes
–cut
–paste
–join
–tr
–uniq
Fic
hero
s
•V
amos a trabajar sobre dos ficheros sencillos
Sr.N
oN
ame
11V
ivek12
Renuka
13P
rakash14
Ashish
15R
ani
Sr.N
oM
ark11
6712
5513
9614
3615
67
sn
am
e
(nombres)
sm
ark
(patrimonio en m
ill.)
cu
t
Extracción de colum
nas o campos: c
ut
–cut [opciones] [fichero ...]
Opciones-c lista
Trata cada carácter com
o una columna
-f lista
Cam
pos delimitados por tabuladores
-d SEP
Utiliza el carácter S
EP
como separador en vez del
tabulador
lista
es una secuencia de números para indicar qué
campos o colum
nas se quieren cortar:A-B
Cam
pos o columnas A
hasta B inclusive
A-
Cam
po o columna A
hasta el final de la línea
A,B
Cam
pos o columnas A
y B
paste
•P
egar líneas de ficheros por columnas
•paste
file1 file2
•C
omo separador, añade un tabulador
•E
jerc
icio
: Generar un fichero con códigos, patrim
onio y nom
bres, pero sin repetir el código de persona
$ p
as
te s
nam
e s
mark
11
Viv
ek
11
67
12
Renuka
12
55
13
Pra
kash
13
96
14
Ashis
h14
36
15
Rani
15
67
cut –f2 smark > temp; paste sname temp; rm temp
join
•P
ega líneas de dos ficheros, por columnas, sólo para
las líneas que tienen el mism
o valor en la primera
columna (que no se repite)
–join
file1 file2
•S
i uno de los campos no existe en alguno de los
ficheros, no lo añade
$jo
in s
na
me s
ma
rk11
Viv
ek
67
12
Renu
ka
55
13
Pra
kash
96
14
Ashis
h36
15
Rani
67
tr
•C
ambiar un rango de caracteres a otro distinto
–tr
pattern1 pattern2
$ tr "h
2" "3
x" <
sn
am
e11
Viv
ek
1x
Ren
uka
13
Pra
kas3
14
As3is
315
Rani
$ tr "[a
-z]" "[A
-Z]"
holaH
OLA
…
tr (ii)
•O
pciones
elimina p
attern1
(no se necesita pattern2
)-d
(delete)
añade pattern2
a pattern1
en vez de sustituirlo-c
(concat)
busca las cadenas más largas que coincidan con
pattern1
antes de sustituirlas por pattern2
-s
(squeeze)
descrip
ció
no
pcio
nes
tr (iii) -eje
mp
los
•echo “hola que tal” | tr “hl” “cs”
–cosa que tas
•echo “hola que tal” | tr “[a-z]” “3”
–3333 333 333
•echo “hola que tal” | tr –s “[a-z]” “3”
–3 3 3
•echo “hola que tal” | tr –sc “[a-z]” “3”
–hola3 que3 tal3
•echo “hola que tal” | tr –d “[aeiou]”
–hl q tl
un
iq
•E
limina líneas duplicadas adyacentes
–uniq
file
•-c
indica el número de veces que aparece duplicada
•S
u salida es el mism
o fichero sin líneas duplicadas a
dya
ce
nte
s
•S
i queremos elim
inar toda
slas líneas
duplicadas–
sort
file | uniq
Eje
rcic
ios c
on
fich
ero
s
•H
acer un script listWords
que recoja todas las palabras de f
ile1
y las ordene en una lista de palabras (sin repetir), según la cantidad de veces que aparecen (que debe aparecer en la lista), que se guardará en f
ile2
–listWords file1 file2
•M
odificar el script para que acepte la opción –v
, en cuyo caso la ordenación se llevará a cabo según palabras que rim
en–
truco: usar rev
eje
rcic
ios
•U
n dig
ram
aes un conjunto de dos palabras.
Realizar un script que liste, en orden, el núm
ero de ocurrencias de cada digram
a en un fichero que se pase com
o parámetro
•listDigrams file1 file2
awk y sed
awk y sed
awk y sed
awk y sed
a)a)a)a)sed
sed
sed
sed
1.1.1.1.substitu
ciones
substitu
ciones
substitu
ciones
substitu
ciones
2.2.2.2.delimitadores
delimitadores
delimitadores
delimitadores
3.3.3.3.marcadores
marcadores
marcadores
marcadores
4.4.4.4.ocurrencias
ocurrencias
ocurrencias
ocurrencias
5.5.5.5.scripting
scripting
scripting
scripting
6.6.6.6.restric
ciones
restric
ciones
restric
ciones
restric
ciones
b)b)b)b)awk
awk
awk
awk
1.1.1.1.patrones
patrones
patrones
patrones
2.2.2.2.acciones
acciones
acciones
acciones
3.3.3.3.variables
variables
variables
variables
4.4.4.4.scripting
scripting
scripting
scripting
5.5.5.5.nawk
nawk
nawk
nawk
sed
•stream
ed
itor: edición de textos en script–sed
–e ‘expr1’ [–e ‘expr2’ …] filename
•sed
suele estar muy m
al documentado:
–http://w
ww
.grymoire.com
/Unix/S
ed.html#uh-0
•S
i sólo se usa una expresión, se puede quitar el –e
:sed ‘expr1’ filename
•S
i no se pone filename, se usa la entrada
estándar
sed
-s
ub
stitu
ció
n
•sed ‘s/word1/word2/’
filein>fileout
•P
ara cada línea de filein
, sed busca la primera
ocurrenciade w
ord1
y la substituye por word2
, añadiendo la línea resultante a f
ileout
•word1
y word2
pueden ser expresiones regulares•
Si no se especifica f
ileout
, lo escribe en consola•
Ejem
plo: sed ‘s/gold/stone/’ coins.txt>
•La substitución es la operación m
ás común para la que
se usa sed
sed
-d
elim
itad
ore
s
•E
l delimitador (/) puede cam
biarse por cualquier otro carácter que no aparezca en las secuencias de búsqueda
•E
jemplo: sustituir rutas de fichero
–sed 's|/usr/local/bin|/common/bin|' old >new
–sed 's:/usr/local/bin:/common/bin:' old >new
–sed 's_/usr/local/bin_/common/bin_' old >new
–C
on barras sería•sed 's/\/usr\/local\/bin/\/common\/bin/' old >new
&
•&
indica la cadena correspondiente al patrón buscado
•Ú
til cuando no sabemos exactam
ente qué estam
os buscando (expresiones regulares):–
Poner paréntesis a cualquier palabra en m
inúsculased 's/[a-z]*/(&)/' old >new
–D
uplicar el primer núm
ero de cada línea–echo "123 abc" | sed 's/[0-9]*/& &/'
–echo "abc 123" | sed 's/[0-9]*/& &/‘ �
?
–echo "abc 123 456" | sed 's/[0-9]*/& &/‘ �
?
su
bstitu
ció
n g
lob
al
•sed
sólo modifica la prim
era ocurrencia de la expresión buscada en cada línea
•para m
odificar todas las ocurrencias–‘s/pattern1/pattern2/g’
•echo "abc 123 456" | sed 's/[0-9][0-9]*/& &/g‘
flag
s (m
arc
ad
ore
s)
•P
odemos m
arcar los patrones con \(…\)
•U
n patrón marcado se puede repetir con \1
, \2…
según el orden en que se hayan m
arcado (hasta \9)•
Quedarnos con la prim
era palabra de cada línea:–sed 's|\([a-z]*\).*|\1|'
•C
ambiar el orden de la prim
era y la segunda palabra–sed 's|\([a-z]*\) \([a-z]*\)|\2\1|'
•E
liminar palabras duplicadas
–sed 's|\([a-z]*\)\1|\1|'
•probar con e
cho “perro perro gato”
•y con e
cho “casa perro gato”
?
ocu
rren
cia
s
•/n
especifica a qué ocurrencia del patrón nos referim
os•
Elim
inar la segunda palabra de cada línea•
echo "casa perro gato " | sed 's/[a-z][a-z]* //2'
•C
omparar con
•echo "casa perro gato " | sed 's/[a-z][a-z]* //'
•echo "casa perro gato " | sed 's/[a-z][a-z]* //g'
•/n
se puede combinar con g
:•echo "casa perro gato " | sed 's/[a-z][a-z]* //2g'
escrib
ir a fic
hero
•sed ‘s/word1/word2/w file’
filein
•N
o tiene mucho sentido si solo tenem
os una expresión (es equivalente a >
file
)•
Es m
uy útil si tenemos varias expresiones y
queremos que la acción de cada una vaya a un
fichero diferente•
En caso de que se usen varias opciones tras el
último /, w
debe ser la última.
sed
scrip
ting
•C
uando tenemos m
uchas expresiones sed, es cóm
odo hacer un sed
sc
ript:
•#Este script cambia vocales minúsculas
a mayúsculas
•s/a/A/g
•s/e/E/g
•s/i/I/g
•s/o/O/g
•s/u/U/g
•P
ara llamarlo:
sed –f script filein>fileout
sed
en
sh
ell s
crip
t
•D
entro de un shell script, podemos usar
igualmente s
ed
. Podem
os utilizar varias líneas usando “\”•sed -e 's/a/A/g‘ \
-e 's/e/E/g' \
-e 's/i/I/g' \
-e 's/o/O/g' \
-e 's/u/U/g' filein >fileout
pas
o d
e a
rgu
men
tos
a s
ed
en
sh
ell s
crip
t
•D
eberemos jugar con las com
illas para que no tom
e el argumento com
o una expresión regular:
•sed -n 's/'$1'/&/g'
•P
ara evitar problemas de sintaxis en el caso de
que el parámetro contenga espacios:
•sed -n 's/‘“$1”'/&/g'
restric
cio
nes
•R
estringir a una línea–sed ‘ns/searh/replace/options’ filein>fileout
•R
estringir a un rango de líneas–sed ‘n,ms/searh/replace/options’ filein>fileout
•La últim
a línea del fichero se identifica con $•
Restricción con patrones:la búsqueda va de la
primera línea en la que se encuentre p
1hasta la
primera en que se encuentre p
2–sed ‘/p1/,/p2/s/searh/replace/options’ fin>fout
otra
s o
pcio
ne
s
•sed
tiene multitud de opciones adicionales
–m
anejo de E/S
–condiciones (if, else)
–control de flujo (for, w
hile)–
etc.
•S
in embargo, para soluciones m
ás complejas
que búsquedas y sustituciones simples, a
wk
es m
ás potente y más fácil de utilizar
otra
s a
ccio
ne
s
write (escribe a fichero la salida de sed)
w
print (imprim
e por pantalla la salida de sed)p
quit (terminar la ejecución)
q
sig
nific
ad
oaccio
nes
Eje
rcic
ios
1.S
ustituir todas las vocales minúsculas de un
fichero por vocales mayúsculas
2.R
ealizar el mism
o ejercicio, pero mediante un
sedscript llamado v
owels
3.R
ealizar el mism
o ejercicio, pero en una shellscript
4.M
odificar 3 para que se acepten los nombres
de ficheros de entrada y salida como
argumentos
eje
rcic
ios (ii)
5.Q
ueremos cam
biar todos los ficheros con extensión *.txt a *.tex. H
acer mv *.txt
*.tex
no funciona ¿P
or qué? Hacer un script
basename
que realice esta función
aw
k
•S
e puede ver como
–U
tilidad para realizar procesamiento sencillo de texto
–Lenguaje de program
ación para procesamiento
complejo de texto
•B
asado en C•
Utilizado para
–G
eneración de informes
–M
anejo de Bases de D
atos pequeñas–
Traducir form
atos de fichero–
Realizar operaciones m
atemáticas en ficheros
numéricos
aw
k (ii)
•A
WK
�A
ho, Weinberg &
Kernigan
–K
ernigan es autor, junto con Ritchie, de C
•A
WK
es un lenguaje inte
rpre
tad
o–
Relativam
ente lento–
Fácil de apreder
•A
WK
cuando no haya una solución más sencilla:
–grep
para buscar texto–head/tail
para quedarnos con partes de texto–cat, paste, join
para unir ficheros–sed
para hacer búsquedas/reemplazos
–tr, unique, sort
para transformaciones básicas
Fic
hero
de
eje
mp
lo: c
oin
s.tx
t
meta
l weig
ht_
in_o
un
ces d
ate
_m
inte
d c
ou
ntry
_o
f_o
rigin
descrip
tion
gold 1 1986 US
A A
merican E
agle
gold 1 1908 Austria-H
ungary Franz Josef 100 K
orona
silver 10 1981 US
A ingot
gold 1 1984 Sw
itzerland ingot
gold 1 1979 RS
A K
rugerrand
gold 0.5 1981 RS
A K
rugerrand
gold 0.1 1986 PR
C P
anda
silver 1 1986 US
A Liberty dollar
gold 0.25 1986 US
A Liberty 5-dollar piece
…
sin
taxis
•A
plicar a un fichero un patrón awk
•awk [-F<del>]‘/search_pattern/ {awk_actions}’ filename
–A
plica aw
k_a
ctio
ns
a todas las líneas de filen
am
eque cum
plan con se
arc
h_
pa
ttern
–-F
<d
el>
especifica el carácter a utilizar como delim
itador de colum
nas. Por defecto, se tom
an espacios y tabuladores
•A
plicar a un fichero un programa aw
k•awk –f awk_program filename
•B
ásicamente am
bas opciones son lo mism
o, la segunda se usa cuando el patrón aw
k se hace m
uy largo o lo tenemos en un fichero
patro
ne
s d
e b
ús
qu
ed
a
•aw
k busca en el fichero de entrada todas las líneas que contengan el patrón de búsqueda
•P
atrones de búsqueda–/seq/
busca líneas que contengan seq
•var ~ /seq/
busca variables (ver +abajo) que contengan s
eq
–BEGIN
busca la primera línea
–END
busca la última línea
•S
i no se especifica patrón de entrada, devuelve todas
las líneas del fichero•
Las secuencias de búsqueda pueden llevar m
eta
ca
racte
res
meta
cara
cte
res
Coincide con el patrón a su izquierda o derecha
|
El carácter anterior aparece 0 ó 1 vez
?
El carácter anterior aparece 1+
veces+
Coincide con la expresión exacta entre {}
{ }
Coincide con alguna de los caracteres entre []
[ ]
El carácter siguiente no es m
etacaracter\
Coincide con el final de línea
$
Coincide con el com
ienzo de línea^
El carácter anterior aparece 0+
veces*
Cualquier carácter (uno)
.
sig
nific
ad
om
eta
cara
cte
r
eje
mp
los d
e b
úsq
ue
da
“Germ
any” “Germ
any’s politics …”
/{^Germany}/
“Bourne” “815oceanic”
^[^a-z]
“bourne” “Bourne” “oceanic815”
/[a-zA-Z0-9]/
“plane” “house” “bourne”/[a-z]/
“The” “the”
/[Tt]he/
“$”/\$/
“Bourne U
ltimatum
, The”, “T
he”, “Pathe”
/The$/
“The B
ourne Ultim
atum”, “T
he”, “Thelem
a"/^The/
“The”
/The/
resu
ltad
op
atró
n
eje
mp
los d
e b
úsq
ue
da (ii)
[0-9]+ C
ualquier cadena de números
[-+]? P
osible signo inicial/^…
$/ La línea coincide exactamente
Cualquier entero (con o sin signo)
/^[+-]?[0-9]+$/
“wh” “w
hh” “whhh” …
/wh+/
“w” “w
h”/wh?/
Cualquier cadena de caracteres
/.*/
“w“ “w
h” “whh” “w
hhh” …/wh*/
“who” “w
hy” “wh3” …
/wh./
resu
ltad
op
atró
n
ac
cio
ne
s
•awk ‘/search_pattern/ {awk_actions}’ filename
•P
odemos tener cualquier tipo de acción que ofrezca
awk com
o lenguaje de programación (~
C)
–A
signación de variables y arrays(=
)–
Operaciones aritm
éticas simples (+
,-,*,/,%, +
+, --, ^)
–C
omparaciones aritm
éticas (==
,!=,>
,<,>
=,<
=)
–O
peraciones aritméticas avanzadas (sqrt, log, exp, int)
–S
alida por pantalla (print y printf)–
Procesam
iento de cadenas (substr, split, index, length)–
Estructuras de control (if…
else, for, while)
•F
or se puede usar como en bash: for(var in
lista) o como en C
accio
nes
devuelve la longitud de la cadenalength(str)
Com
o en shell y Cbreak, continue, exit
salta a la siguiente línea de textonext
index(“gorbachov”, “bach”) �4
index(“gorbachov”, “z”) �0
index(str, str)
split(“jay:bob”,c,”:”) �
c[1]=jay, c[2]=
bob
split(str, array
[,sep])
substr("unforgettable",6,3)�
“get”substr(str,start,
length)
descrip
ció
nacció
n
prin
t y p
rintf
imprim
e siguiendo la sintaxis de C:
%d, %
f, %o, %
x%
n.m\n, \t
printf()
imprim
e “cad1cad2”print “cad1”
“cad2”
imprim
e “cad1 cad2”print
“cad1”,”cad2”
imprim
e la linea actualprint
descrip
ció
nacció
n
varia
ble
s
•N
o tienen tipo ni hay que declararlas•
Se asignan com
o en los programas de la shell
•V
ariables especiales:
Valor de la últim
a columna
$NF
Núm
ero de columnas
NF
Núm
ero de líneas de entradaNR
Contiene el valor de toda la línea
$0
Variable de cam
po, da el valor de la colum
na 1, 2, 3 …$1, $2, $3…
descrip
ció
nvaria
ble
varia
ble
s e
sp
ecia
les
(ii)
Form
ato numérico. P
or defecto “%.6g”
OFMT
Com
o los anteriores pero para el fichero de salida
OFS, ORS
Separador de filas. P
or defecto es “new
line”, refiriéndose a “\n”RS
Separador de colum
nas. Por defecto es
“white space”, refiriéndose a “[ ]“ y “\t”
Tam
bié
n s
e p
ued
e m
od
ificar c
on
la o
pció
n d
e c
om
an
do
–F
seg
uid
o d
el d
elim
itad
or (-
F:, -F/
)
FS
Nom
bre del fichero de entradaFILENAME
descrip
ció
nvaria
ble
arra
ys
•S
ólo tienen una dimensión
•E
l acceso se identifica por indices–array[1], array[2], array[3]
–Los índices van de 1 a N
•P
odemos usar com
o índices cadenas:–array[“Roberto”], array[“Antonio”], array[“Luis”]
–E
n este sentido, se pueden utilizar los arrays como tablas
hash
•P
ara acceder a cada elemento de un array
–for (i in array)
print $i
Eje
mp
los
•Im
primir todas las líneas con la palabra “gold”
–awk ‘/gold/’ coins.txt
•Im
primir todas las líneas de coins.txt
–awk ‘{print}’ coins.txt
•Im
primir la tercera colum
na de coins.txt–
awk ‘{print $3}’ coins.txt
•G
uardar la tercera columna de las líneas de coins.txt
que contengan la palabra “gold” a un fichero goldY
ear.txt–
awk ‘/gold/ {print $3}’ coins.txt > goldYear.txt
Eje
mp
los
•H
acer doble espaciado en coins.txt (poner una línea en blanco tras cada línea)–awk ‘{print ; print “ “}’ coins.txt
•H
acer doble espaciado SIN
duplicar líneas en blanco–awk {print ; if(NF>0) print “”} coins.txt
•C
ontar el número de líneas en el fichero
–awk ‘END {print NR}’ coins.txt
–wc coins.txt
Eje
mp
los
•Im
primir el tam
año medio de los ficheros de
nuestro directorio actual•
ls -l | awk '{count+=$5} END {print count/(NR-1)}‘
•G
enerar los 10 primeros núm
eros de la secuencia de F
ibonacci: 1 1
2 3
5 8
13 2
1 3
4 5
5»awk 'BEGIN
»{
»a=1; b=1;
»count=0;
»while(count++<10)
»{print a; ta=a; a=b; b=b+ta;}
»}'
Scrip
ts c
on
aw
k
•H
acer un script que se llame w
ords
, que escriba cada palabra en el fichero pasado com
o parám
etro en una nueva línea–awk ‘NF>0 {split($0, c); for(i in c) print $i}’ $1
–awk ‘BEGIN {FS=“[^A-Za-z]+”}
–{for(i=1;i<=NF;i++) print $i}’ $1
Pro
gra
ma
s a
wk
•U
n programa aw
k tiene el siguiente aspecto:•search_pattern1 {awk_actions1}
search_pattern2 {awk_actions2}
•…
•search_patternN {awk_actionsN}
•S
e llama con:
•awk –f awk_program filename
Eje
mp
lo p
rog
ram
a a
wk: f
indDup
•B
uscar palabras seguidas duplicadas en un fichero
•BEGIN { dups=0; w="xy-zzy" }
•{
•for( n=1; n<=NF; n++)
•{
•if ( w == $n )
•{
•print w, "::", $0 ;
•dups = 1
•}
•w = $n
•}
•}
•END
{ if (dups == 0)
•print "No duplicates found."
•}
Eje
rcic
ios
1.M
odificar findDup
para que muestre el
número de línea en el que se produce el
duplicado2.
Modificar f
indDup
para que no cuente la últim
a palabra de la línea anterior
Co
nd
icio
ne
s
•E
n vez de patrones de búsqueda, podemos usar
condiciones.•
Ejem
plo: buscar líneas con el nº diez en su segundo cam
po, e imprim
ir la línea siguiente•BEGIN {flag = 0}
•$2 == 10 {flag = 1; next}
•flag == 1 {print; flag = 0; next}
•¿
Cóm
o modificar para que acepte cualquier
número en vez del 10 com
o parámetro?
eje
rcic
ios: b
as
es d
e d
ato
s
•T
rabajando sobre el fichero cars.txt
1.B
uscar todos los coches de la marca v
olvo
2.M
ostrar la columna 3
, seguida de la 13.
Mostrar todas las entradas que contengan una ‘h
’ en la prim
era columna
4.M
ostrar todas las entradas cuya primera colum
na em
piece con una ‘h’
5.M
ostrar la columna 2
, luego la 1, luego un ‘m
pg
’ seguido de la colum
na 3; sólo para aquellas
entradas cuya seguna columna em
pieza por mo t
. ¿
Se observa algo raro?
eje
rcic
ios (ii)
6.M
ostrar las entradas cuya columna 5
tiene un valor num
érico menor o igual a 1
00
7.M
ostrar todas las entradas desde la primera
que contenga ‘toyota
’ hasta la primera que
contenga ‘chevrolet
’
8.M
ostrar todos los usuarios del sistema que no
tengan como shell por defecto /
bin/sh
scrip
t co
n a
wk
•E
n shell script, los parámetros de la función
están en $1, $2, $3 …
•E
n awk, $1, $3, $3 …
expresan campos!
•S
i queremos usar parám
etros del script en llam
adas a awk, antes tenem
os que alm
acenarlos en otras variables
Eje
mp
lo a
wk s
crip
t
•E
jemplo: hacer un script que, m
ediante awk, devuelva
un campo de un fichero. C
ampo y fichero deben ser
parámetros del script»file=$1
»num=$2
»awk '{print $'$num'}' $file
»awk '{print $' $2 '}' $1
•E
n estos casos, no podemos usar a
wk –f
y tener el program
a awk en otro fichero, pues no
podríamos pasarle los parám
etros de la script
Eje
rcic
ios a
wk
scrip
ts
•U
n palíndromo es una palabra que es igual si se
escribe de izquierda a derecha que al revés. B
uscar todos los palíndromos que se encuentran
en un texto. El script tendrá la sintaxis:
–palindrome filein fileout
eje
rcic
ios (ii)
•H
acer un script que devuelva todas las palabras de un fichero (sin repetir) que tengan tantas letras com
o se le indique. El script debe tener la sintaxis
–textAnalysis –l n file
•donde n es el núm
ero de letras•
file es el fichero de entrada
naw
k
•aw
k está diseñado para hacer programas cortos
•pero m
ucha gente lo adoptó como lenguaje de
programación al uso y desarrollaba con él
•n
aw
k(n
ew aw
k) trata de incorporar herramientas
para una mejor gestión de program
as largos–
Funciones
–E
ntrada: getline–
Trigonom
etría: sin, cos, atan2, rand, srand–
Manejo de cadenas: m
atch, sub
otra
s v
ers
ion
es
e im
ple
men
tacio
ne
s
•b
kw
: versión de Brian K
ernigan de awk
•g
aw
k: im
plementación G
NU
de awk
–N
o funciona en todos los sistemas
–xgaw
k: projecto SourceF
orge que extiene awk con la carga
de bibliotecas dinámicam
ente
•m
aw
k: implem
entación muy rápida de aw
k por Mike
Brennan, basado en un intérprete de código binario
–aw
ka: traductor de aw
k a C basado en m
awk.
•ta
wk: com
pilador de awk para D
OS
y Window
s de T
hompson A
utomation S
oftware
•ja
wk: im
plementación de aw
k en Java
sh
ell y
aw
k e
n la
his
toria
d
e la
pro
gra
mació
n
http://ww
w.oreilly.com
/news/graphics/prog_lang_poster.pdf
refe
ren
cia
s
•T
utoriales utilizados–
shell scripting•
http://ww
w.cyberciti.biz/nixcraft/linux/docs/uniqlinuxfeatures
/lsst/•
http://tldp.org/LDP
/abs/html/index.htm
l
–sed•
http://ww
w.grym
oire.com/U
nix/Sed.htm
l#uh-1
–aw
k•
http://cs.sru.edu/~w
hit/cpsc207/notes/awkegs.htm
l•
http://ww
w.vectorsite.net/tsaw
k_1.html#m
1
refe
ren
cia
s (ii)
•Libros–
Shells: U
ser’s Guide. H
ewlett P
ackard, 1991
–Linux &
Unix S
hell Program
ming. D
avid T
ansley–
Portable S
hell Program
ming. B
ruce Blinn
–U
nix
Sh
ell P
rog
ram
min
g. S
tephen G.
Kochan and P
atrick H. W
ood
–sed &
awk. D
ale Dougherty and A
rnold R
obbins–
awk P
rogramm
ing. Arnold R
obbins–
The A
WK
programm
ing language. Aho,
Kernigan y W
einberger, 1988, Addison-
Wesley.