Curso ShellCcript
Curso ShellCcript
[Link]
Copyright20042010dunetna
Se garantiza permiso para copiar, distribuir y modificar este
documento segn los trminos de la GNU Free Documentation
License,Versin1.2 ocualquierapublicadaposteriormentepor
la Free Software Foundation, sin secciones invariantes ni
textosdecubiertadelanteraoposterior.
Tabladecontenidos
[Link].......................................................4
[Link]...........................................5
[Link].............................................5
[Link]..............................6
[Link]...............................7
[Link].................................8
[Link]/s.................................8
[Link]...............................................9
[Link](pipelines).................................11
[Link]..............................13
[Link]...........................13
[Link]..........................14
[Link]..........................................14
[Link]....................15
[Link]/s....................................15
[Link]...........................................16
[Link]..................16
[Link]........................17
[Link]............................18
[Link]..............................19
[Link]...............................................21
[Link]...............................................21
[Link]............................................21
[Link]................................22
[Link]...............................24
[Link]............................................24
[Link]............................................25
[Link]........................30
[Link].....................................................33
[Link]...........................................33
[Link]...................................39
[Link]............................................40
[Link]
Estemanual,tutorialocomolequerisdecir,eselresultado
del curso realizado por kernelpanic (hacklab de Barcelona) de
programacindeshellscripts.
No pretende ser un gran manual sino una ayuda a aquellas
personasque,yasabiendoprogramarytienenunosconocimientos
genricos de UNIX, quieren usar el lenguaje que ofrece la
shellparahacerscriptsquelasfacilitenlavida;)
Dedicamos estos apuntes al CSO Les Naus, desalojado el 9 de
diciembre del 2003. Nos quitarn los espacios pero seguiremos
luchando, construyendo y compartiendo conocimientos e
ilusiones.
NOTA:Podeisencontrarlosejemplosdescriptsque tienensu
nombre
entre
parntesis
en
la
web
[Link] Para cualquier duda o
sugerencia
podeis
enviar
un
a
info@[Link].
[Link]
[Link]
La shell nos permite definir variables donde almacenar datos.
Tenemos dos zonas de memoria donde podemos definir nuestras
variables:elrealocalyelentorno.
Variableslocales:slosonvisiblesporlashelldondeestamos
trabajando,nosonvisiblesporningunasubshell,esdecir,no
sonvisiblesporningnsubprocesodelashell.
Variables de entorno: son visibles tanto por la shell donde
estamos como por cualquier subshell que abrimos (o por
cualquiersubprocesodelashell)
NOTA:unavariabledeclaradaenunprocesohijonoservisible
porsuprocesopadre(aunqueseadeentorno)
COMANDOS
set
Vertodaslasvariablesdefinidas
env
Vertodaslasvariablesdeentornodefinidas
nombre_var=valor_var
Definirvariableyasignarlevalor
export
nombre_var=valor_var
Definirvariableentornoyasignarlevalor
exportnombre_var
Convertirvariablelocalavariablede
entorno
unsetnombre_var
Liberarunavariable
::ejemplo::
$varmeva=3
$echo$varmeva
3
$bash
$echo$varmeva
$exit
$exportvarmeva
$echo$varmeva
3
$bash
$echo$varmeva
3
$exit
declarounavariablelocal
mirosuvalor
entroenunasubshell
notienevalorporqueeslocal
volvemosalashellprincipal
[Link]
enlashellprincipalsigoviendosuvalor
3
entroenunasubshell
ahorasquevemossuvalor!!!
(esdeentorno)
VARIABLESPREDEFINIDAS
HOME
Directoriodetrabajoactual
PATH
Lugaresdondepodemosaccederdirectamentesinescribir
elcamino
PS1
Promptprimario
PS2
Promptsecundario
BASH
Caminodelprogramabash
BASH_VERSION
Versindelabashactual
COLUMNS
Nmerodecolumnasenlapantalla
GROUPS
Identificadordelgrupoprincipaldelusuari@
HISTCMD
ndiceenelhistricodelcomandoactual
HISTFILE
Ficherodondeseguardaelhistrico
HISTFILESIZE
Medidadelficherohistrico
HOSTNAME
Nombredelamquina
LANG
Idiomapordefecto,sinosehaespecificadoenningn
LC_
LC_ALL
Idioma
PID
Identificadordelprocesoactual
PWD
Caminodondeestamossituados
RANDOM
Nmeroaleatorio
SECONDS
Segundosquellevaencendidalamquina
UID
Identificadordelusuari@actual
::ejemplo::
$echoMidirectoriodetrabajoes$HOMEymiiddegrupoes
$GROUPS
Midirectoriodetrabajoes/home/kpymiiddegrupoes
1000
[Link]
Sustitucin de variables: Es la tcnica que utilizaremos para
hacerreferenciaalvalorcontenidoenunavariable.
SUSTITUCINDEVARIABLES
$nombre_var
Hacerreferenciaalvalordelavariablenombre_var
${nombre_var} Hacereferenciaalvalordelavariablenombre_var.Las
llavesnosdelimitanelnombredelavariable.
::ejemplos::
[Link] $saluda=hola
$nombre=anna
$echosaludanombre
saludanombre
$echo$saluda$nombre
holaanna
definovariablesaludaconvalorhola
definovariablenombreconvaloranna
muestroporpantallalosvaloresdelas
variables...
estmal:hepuestolosnombredelas
vars,nosuvalor
ahoraestbien!
[Link] $masc=gat
definovariablemascconvalorgat
$echomasculino:$mascfemenino:$masca
muestroel$mascy
masculino:gatfemenino:
$masculino:$mascfemenino:${masc}a
masculino:gatfemenino:gata
$mascseguidodeuna
a
meinterpretamasca
comounavar(vaca)
pongo{}para
diferenciarel
nombredela
variable
esoesloque
quera!!!
[Link]
Sustitucin de comandos: Es la tcnica que utilizaremos para
sustituirennombredeuncomandoporlasalidadesta.
SUSTITUCINDECOMANDOS
`comando`
$(comando)
Sustituirelnombredelcomandoporsusalida
::ejemplos::
[Link] #whoami
ejecutamosuncomando
root
quenosdiceaquienestsconectado
#echoSoyel/lawhoami
siqueremosmostrarporpantallay
Soyel/lawhoami
#echoSoyel/la`whoami`
Soyel/laroot
#echoSoyel/la$(whoami)
Soyel/laroot
[Link] $date+%F;date+%D
20041021
10/21/04
$aaaammdd=%F
ponemoselcomando...
...nossaleliteralmenteloquele
ponemos
sustituimoswhoamiporelvalorque
devuelvey...
...obtenemoselquequeramos!!!
otramaneradehacerlo
ejecutamosdateconformatos%Fy%D
dosvariables
$mmddaa=%D
$echoData(aaaammdd):`date+$aaaammdd`
hacemos
Data(aaaammdd):20041021
sustitucinde
$echoData(mm/dd/aa):`date+$mmddaa` comandosyde
Data(mm/dd/aa):10/21/04
variables...
[Link] pequeo script que nos crea una copia de seguridad de
nuestrodirectoriodetrabajo:
CS=/var/backup`date+%Y%m%d`.tgz variableconelnombredela
tarczf$CS/home/nomusu
copiade seguridad
(ej:/var/backup20040601)
comprimimosyempaquetamosel
directoriodetrabajo
[Link]
Caracteresespeciales: Haycaracteresqueparalashelltienen
un significado especial. Existen diferentes tcnicas para que
la shell ignore este significado o para que lo tenga en
cuenta.
COMANDOS
\
anulaelsignificadoespecialdelcarcterquevadetrs
''
anulaelsignificadoespecialdetodosloscaracteresque
estndentrodelascomillas
anulaelsignificadoespecialdetodosloscaracteres
excepto:$\``
::ejemplos::
[Link] $echoElsilencio
Elsilencio
$echoEl\silencio\
Elsilencio
queremosmostrarsilencioentre...
nosinterpretalasdesilenciocomo
uncarcterespecial!
lashemosdeescapar
[Link] #echo'Soyel/la$LOGNAMEyestoyen$PWD'con''...
Soyel/la$LOGNAMEyestoyen$PWD
...nointerpretalos
$
#echoSoyel/la$LOGNAMEyestoyen$PWDcon...
Soyel/larootyestoyen/root
...squelos
#echoSoyel/la$LOGNAMEy\$PWD:$PWD
Soyel/larooty$PWD:/root
interpreta!
mezclandoy\...
...podemos
interpretarono
segnnosconvenga
[Link]/s
stdin, stdout y stderr: Haycomandosqueaceptanlosdatosde
entrada por lo denominamos entrada estndar (stdin, con
descriptor de fichero 0), que es el teclado. Tambin hay
comandos que nos dan su salida por la que denominamos salida
estndar (stdout, con descriptor de fichero 1) que es la
pantalla. Por ltimo, todos loserrores quepueda producir un
comando se dirigen a la salida de errores (stderr, con
descriptordefichero2)
Redireccionamiento de E/S: El redireccionamiento de E/S nos
permitirquecogiendolosdatosdeentrada,salidayerrory
lasredireccionemoshaciaotroficherodiferentealdonadopor
defecto(stdin,stdout,stderr)
REDIRECCIONAMENTOE/S
<
redireccionamentodestdin
>
redireccionamentodestdout
sielficheronoexistelocrea
sielficheroexistesecargaelcontenido
>>
redireccionamentodestdout
sielficheronoexistelocrea
sielficheroexisteaadeunacontinuacin
2>
redireccionamentodestderr
sielficheronoexistelocrea
sielficheroexistesecargaelcontenido
2>>
redireccionamentd'stderr
sielficheronoexistelocrea
sielficheroexisteaadeunacontinuacin
1>&2 redireccionarstdoutastderr
2>&1 redireccionarstderrastdout
>&
redireccionarstdoutystderraunfichero
::ejemplos::
[Link] $mailroots"hackyourmind!"<mailpr mailprseraun
[Link]
ficheroconel
mensaje
$catfit1fit2
fit1existe,fit2no
existe
estoeselcontenidodelfichero1
stdout
cat:fit2:Noexisteelficherooeldirectorio
stderr
$catfit1fit2>>copiafit2>>[Link] aadimosfit1al
ficherocopiafity
elerrorseira
[Link]
[Link] $catfit1fit22>fit31>&2
(fit1existe,fit2noexiste)
todaslassalidasestnen
fit3porqueloserrores
vanafit3yredirigimos
stdoutastderr
$catfit1fit2>fit32>&1
[Link] $catfit1fit2>&fit3
(fit1existe,fit2noexiste)
todaslassalidasestnen
fit3porquestdoutvaa
fit3yredirigimosstderra
stdout
(fit1existe,fit2noexiste)
todaslassalidasestnenfit3porque
redirigimosstdoutystderrafit3
[Link]
Filtro: Esunprogramaquerecibedatospor stdin ysacadatos
porstdout,sinmodificarlosdatosintroducidosporstdin.
FILTROS
cat[nombre_fichero]
muestrastdin/nombre_fichero
FILTROS
cutclista[nombre_fichero]
cutflistadsep
[nombre_fichero]
extraelascolumnascitadasenlista
extraeloscamposcitadosenlista
segnelseparadorsep
formatodelista:
A,Bseleccionarcolumnas/camposAy
B
ABseleccionarcolumnas/campos
desdeAhastaB
Adesdelacolumna/campoAhasta
elfinal
Bdesdeelprincipiohastala
columna/campoB
grep[cinv]patrn
[nombre_fichero]
Bsquedadelaslneasdelos
ficheros/stdindelpatrndeterminado
cslomuestraelnmerodelnea
yignoramaysculas/minsculas
naadeelnmerodelnea
vmuestralaslneasqueno
contienenelpatrn
formatodepatrn(expresiones
regularesbsicas):
.cualquiercarctersimple
[]conjuntodecaracteres
[^]cualquiercarcternoincluido
enloscorchetes
[]rangos
*0omsocurrenciasdela
expresinprecedente
+1omsocurrenciasdela
expresinprecedente
^expcualquiercadenaquecomience
conexp
exp$cualquiercadenaqueacabecon
exp
head[num][nombre_fichero]
Muestralasprimerasnumlneasdel
fichero/stdin(10pordefecto)
sed's/expr1/expr2/[g]'
sedr's/expr1/expr2/[g]'
Sustituyeexpr1porexpr2
Sustituyeexpr1porexpr2con
expresionesregularescomplejas
gsubstituyetodaslasocurrencias
sort[ndutsep][knum]
[nombre_fichero]
Ordenarlaslneasde
nombre_fichero/stdin
nordenacinnumrica
dnotieneencuentacaracteres
quenoseanletras,
nmerosoblancos
unotieneencuentalaslneas
duplicadas
tsepespecificaundelimitadorde
campo
knumespecificaqueordenaremospor
elcamponum
tail[num][nombre_fichero]
Muestralasltimasnumlneasdel
fichero/stdin(10pordefecto)
tee[a]nombre_fichero1
[nombre_fichero2]
Muestraporpantalla
nombre_fichero2/stdinyloescribe
ennombre_fichero1
aenlugardesobreescribir
nombre_fichero1aadeacontinuacin
10
FILTROS
trc1c2[nombre_fichero]
trsc1[nombre_fichero]
traducec1porc2de
nombre_fichero/stdin
conviertec1consecutivosenunosolo
uniq[nombre_fichero]
conviertediversaslneasiguales
consecutivasdenombre_fichero/stdin
enunadesola
wc[lwc][nombre_fichero]
cuentalneas,palabrasycaracteres
denombre_fichero/stdin.
lsloelnombredelneas
wsloelnombredepalabras
csloelnombredecaracteres
[Link](pipelines)
Tubera: Nos permiten redireccionar la salida de un comando
comounaentradaaotrocomando.
COMANDOS
comando1|
comando2
Redireccionamosstdoutdecomando1astdinde
comando2
::ejemplos::
11
12
[Link]
[Link]
Shell script: No es ms que un programa que usa el lenguaje
[Link]:
[Link]
a)$bashnombre_script
b)$./nombre_script
(necesitamospermisosdeejecucin)
c)$nombre_script
(necesitamospermisosdeejecuciny
queeldirectoriodondeest
nombre_scriptestalPATH)
[Link]
hijodelashell
Comoprimeralneadelscriptpondremosconqushell
queremosquenoslointerprete:
#!/bin/bash
yejecutamoselscriptcomoenelcaso1
[Link]
$sourcenombre_script
$.nombre_script
::ejemplo::
[Link]:
sleep222
Ejecucintipo1:
$chmodu+[Link]
$./[Link]
enotraconsolaveramos:
$pstreep
...
bash(905)bash(1542)sleep(1543)
...
Ejecucintipo2:
Ahoraelscripttendrelsiguientecontenido:
#!/bin/bash
sleep222
$./[Link]
enotraconsolaveramos:
$pstreep
...
bash(905)[Link](1564)sleep(1565)
...
13
Ejecucintipo3:
$.[Link]
enotraconsolaveramos:
$pstreep
...
bash(905)sleep(1576)
...
[Link]
Depuracin: Cuando hacemos un programa y los resultados que
ste produce no son los esperados, es muy til tener una
herramienta que nos permita depurarlo. Es decir, una
herramientaquenospermitahacerunseguimientopasoapasode
pordondevaelflujodelprograma.
DEPURACIN
setx
activaladepuracin
set+x
desactivaladepuracin
sete
Saleinmediatamentesiunaordensimpleacabasinxito
(conuncdigoderetornodiferentedecero)
set+e
desactivaelsalirsiunaordensimpleacabasinxito
::ejemplo::
Sitenemoselsiguientescript:
SALUDA=hola
DESPIDE=adis
setx
echo$SALUDA$LOGNAME
echoUsuari@sConectad@s
who
set+x
echo$DESPIDE$LOGNAME
cuandoloejecutamosnosdepurarlaslneasdecdigoque
estnentresetxyset+xytendremoselsiguiente
resultadoporpantalla:
++echoholahm
holahm
++echoUsuari@sConectad@s
Usuari@sConectad@s
++who
hmtty1Jun319:39
++set+x
adishm
[Link]
Comentarios: Cuandoprogramamoshemosdetenerpresentequeno
estamossolosenelmundoo,queaunqueloestemos,lamemoria
nospuedefallarynoentenderelprogramaque nosotr@s mism@s
14
comentarpartesdecdigo
[Link]
Parmetros: Un parmetro de un script sern todos aquellos
valores que adjuntamos cuando ejecutamos ste y que queremos
poderverdentrodelprograma.
$./nombre_scriptparmetro1parmetro2...parmetron
Podemos hacer referencia a los parmetros pasados segn la
siguientetabla:
PARMETROS
$0
nombredelshellscriptqueseestejecutando
$n
Parmetropasadoalshellscriptenlaposicinn
$*
expandelosparmetrosenunacadena:par1par2...
$@
expandelosparmetrosencadenasdiferenciadas:par1
par2...
shift
n
[Link]
desplaza1posicin.
Variablesespeciales: Tenemosdiferentesdefinidasencualquier
scriptquepodemosusarsegnnuestrasnecesidades.
VARIABLESESPECIALES
$#
nmerodeparmetros
$$
PIDdelashellprocesoqueseest
ejecutando
$!
PIDdelltimoprocesoejecutado
$?
Cdigoderetornodelltimo
procesoejecutado
::ejemplo::
([Link])scriptquenosinformadediversosdatosdel
sistema
[Link]/s
Instrucciones de entrada y salida: Son aquellas instrucciones
quenospermitenleerdatosde stdin (entrada)ymostrardatos
porstdout(salida)
15
COMANDOS
readnombre_var
entradaporstdin
echo[ne]cadena/
$nombre_var
salidaporstdoutconsaltodelneafinal
einterpretacaracterescon\
\n:saltodelnea
\t:tabulador
...
nsuprimeelsaltodelneafinal
::ejemplo::
$readvarmia
3
$echoeMivares:\t\t$varmia
Mivares:3
leemosunavariablede
teclado
mirosuvalorconun
formato
[Link]
Operadoresnumricos: sonaquellosquenospermitenoperarcon
nmerosyvariablesquecontienennmeros.
Operadores lgicos: son aquellos que nos permiten especificar
condicionescompuestas
OPERADORES
NUMRICOS
OPERADORES
LGICOS
suma
! no
resta
& y
&
\*
producto | o
|
\/
divisin
mdulo
parntes
\
(\) is
[Link]
En muchas ocasiones tendremos que hacer clculos numricos ya
sea para mostrar el resultado o bien por almacenarlo en una
variable.
EXPRESIONESNUMRICAS
exprexpr_num
evalaexpr_numsacandoelresultadoporstdout(a
expr_numhemosdesepararoperadoresdeoperandosconun
espacio)
letexpr_num
((expr_num))
evalaexpr_num(aexpr_numnohemosdesepararoperadores
deoperandosconunespacio,nossirveparaasignar)
::ejemplos::
[Link] $expr3+5
8
calculamos3+5
8!
16
[Link] $((a=3+5))
$echo$a
8
calculamos3+5yponemoselresultadoala
variablea
mostramoselvalordelavariable
[Link] $a=1
$((a=$a+1))
$echo$a
2
incrementamoselvalordea
mostramoselvalordelavariable
[Link]
Condicin: Para romper el flujo de un programa necesitamos
especificar condiciones que nos lo bifurquen hacia un lado o
[Link]:
testexpr
obien
[expr]
A continuacin se exponen las condiciones que podemos
especificar:
17
CONDICIONESFICHEROS
[enombre_fichero]
truesielficheroexiste
[dnombre_fichero]
truesielficheroexisteyesundirectorio
[fnombre_fichero]
truesielficheroexisteyesregular
[Lnombre_fichero]
truesielficheroexisteyesunenlace
simblico
[rnombre_fichero]
truesielficheroexisteytienepermisode
lectura
[wnombre_fichero]
truesielficheroexisteytienepermisode
escritura
[xnombre_fichero]
truesielficheroexisteytienepermisode
ejecucin
[nombre_fichero1nt
nombre_fichero2]
truesifichero1esmsnuevoquefichero2
[nombre_fichero1ot
nombre_fichero2]
truesifichero1esmsantiguoquefichero2
CONDICIONESCADENAS
[cadena]
truesinoeslacadenavaca
[ncadena]
truesilalongituddecadenaesdiferentede
0
[zcadena]
truesilalongituddecadenaes0
[cadena1=cadena2]
truesicadena1ycadena2soniguales
[cadena1!=cadena2]
truesicadena1ycadena2sondiferentes
CONDICIONESENTEROS
[num1eqnum2]
truesinum1ynum2soniguales
[num1nenum2]
truesinum1ynum2sondiferentes
[num1gtnum2]
truesinum1esmsgrandequenum2
[num1genum2]
truesinum1esmsgrandeoigualquenum2
[num1ltnum2]
truesinum1esmspequeoquenum2
[num1lenum2]
truesinum1esmspequeooigualquenum2
[Link]
Estructuras alternativas: son aquellas que nos permiten
ejecutar un trozo de cdigo segn si se cumple o no una
condicin.
18
ESTRUCTURAif
ESTRUCTURAcase
ifcondicion1
then
casenombre_varin
patron1)
instrucciones;;
patron2)
instrucciones;;
...
patronn)
instrucciones;;
*)
instrucciones;;
esac
instrucciones
elif
condicion2
then
instrucciones
else
instrucciones
fi
::ejemplos::
[Link] ([Link])scriptquecompruebalaexistenciadelfichero
.bashrc
[Link] ([Link]) script que comprueba si existe el fichero
pasadoporparmetroy,siexiste,nosdasuspropiedades
[Link] ([Link]) script que crea una copia de seguridad del
directorio que le pasamos como parmetro y la guarda en
/var/[Link]
[Link] ([Link])scriptpensadoparaponeren/etc/init.d,que
nosreproducirunsonidoalentraralsistemayunsonido
alsalir.
[Link]
Estructurasiterativas: sonaquellasquenospermitenejecutar
diversasvecesuntrozodecdigo.
ESTRUCTURAwhile
ESTRUCTURAuntil
ESTRUCTURAfor
whilecondicion
untilcondicion
fornombre_varin
do
do
lista_valores
instrucciones
instrucciones do
done
done
instrucciones
done
::ejemplos::
[Link] ([Link])scriptquerenombradiversosficherosalavez
eneldirectorioactual.
[Link] ([Link])scriptqueaceptacomoargumentosnombresde
ficheros y muestra el contenido de cada uno de ellos
precedidodeunacabeceraconelnombredelfichero.
[Link] ([Link]) script que realiza un estudio de todo el
rbol de directorios y ficheros a partir del directorio
pasadocomoparmetrodeformaqueobtenemoslasiguiente
info:
19
20
[Link]...
[Link]
Tabla:esunaestructuradedatoscompuesta.
va10
va11
va12
va13
va14
va15
va16
va17
va18
va19
arr
A continuacin podemos ver como definirla y como hacerle
referencia:
TAULES
nombre_arr=(val1val2...
valn)
declaracinyasignacininiciales
declareanombre_arr
[Link]
asignacionesdinmicas.
nombre_arr[index]=val
asignacindevalalelementoindexde
nombre_arr
${nombre_arr[index]}
Hacereferenciaalelementosituadoen
indexdelatablanombre_arr
nmerodeelementosdelatabla
${nombre_arr[@]}
listaloselementosdelatablatratadoscada
unodeelloscomounacadena
${nombre_arr[*]}
listaloselementosdelatablatratadoscomo
unanicacadena
${#nombre_arr[index]} longitudde${nombre_arr[index]}
::ejemplo::
(gen_menu.sh)scriptqueadmitecomoargumentosparejas
formadaspor'descripcin'y'comando'yqueconstruyeun
mendeopcionesdondecualquieradeloscomandospuedeser
ejecutadaseleccionandoladescripcincorrespondiente.
[Link]
Definicindeunafuncin:Paradefinirunafuncintenemosdos
posibilidades:
nombre_funcion(){
functionnombre_funcion{
...
...
instrucciones
instrucciones
...
...
}
}
21
interrumpelafuncinasignandounvaloralcdigode
retornodelafuncin
::ejemplos::
[Link] ([Link])mencondiferentesopciones
[Link] (gen_aniv.sh) Suponemos que tenemos un fichero denominado
[Link], y cuyas las lneas tienen el siguiente
formato:
nombre:fechaaniversario
Realizamos un script denominado generacumple que te
genereelficheroquetenemosquepasaralcomandocrontab
paraqueeldaantesdecadafechadeaniversariorecibas
unmailquetengalasiguienteinformacin:
...
Subject:RecordatorioCumpleaos
...
Maana da [data] es el cumpleaos de [nombre]. No
olvidesfelicitarl@.
[Link]
Expresiones regulares: son una herramienta para buscar
coincidencias entre untexto yunpatrn. Laexplicacin dada
aquestabasadaenlasexpresionesregularesestiloPerl.
COMODN
.
cualquiercarcter
CLASESDECARACTERES
[llista]
algunodeloscaracteresdelalista
[minmax]
caracterescomprendidosentreminymax
[^llista]
Cualquiercarcterquenoestenlalista
\w
palabra
\W
contrariode\w
\s
espacios,tabuladores,...(espacio,\t,\n,\r)
\S
contrariode\s
\d
dgito
\D
contrariode\d
\A
comenzaramirarporelprincipiodelacadena
\Z
comenzaramirarporelfinaldelacadena
22
\b
concordarconloslmitesdelapalabra
\B
contrariode\b
[[:alnum:]]
alfanumricos
[[:alpha:]]
alfabticos
[[:cntrl:]]
caracteresdecontrol
[[:digit:]]
dgitos
CLASESDECARACTERES
[[:graph:]]
grficos
[[:lower:]]
minsculas
[[:print:]]
caracteresimprimibles
[[:punct:]]
caracteresdepuntuacin
[[:space:]]
espacios
[[:uppor:]]
maysculas
[[:xdigit:]]
dgitoshexadecimales
ALTERNATIVAS
alter1|
alter2
Puedeapareceralter1oalter2
CUANTIFICADORES
?
0o1ocurrenciadelaexpresinprecedente
0omsocurrenciasdelaexpresinprecedente
1omsocurrenciasdelaexpresinprecedente
{m}
mocurrenciasdelaexpresinprecedente
{m,}
mocurrenciasomsdelaexpresinprecedente
{m,n}
demanocurrenciasdelaexpresinprecedente
??,*?,+?,
{}?
elmismoperonointentacogerelmximodecaracteres
(no'greedy')
ANCLAS
^expr
cualquiercadenaquecomienceconexp
expr$
cualquiercadenaqueacabeconexp
GRUPOSYREFERENCIAS
(expr)
hacerungrupoparapoderreferenciarlodespus
\n
referenciaalgruponsimo
(?:expr)
gruposinreferencia
:::ejemplos:::
[Link] [az]
letrasminsculas
[AZ]
letrasmaysculas
[09]
nmeros
[,'!;:\.\?]
caracteresdepuntuacin
[AZaz] letrasdelalfabeto
[aZ]
elmismoqueelanterior
[AZaz09]
caracteresalfanumricos
[^az]
todomenoslasletrasminsculas
[^09]
todomenosnmeros
[Link] a.b
axbaababbaSba#b...
23
a..b
axxbaaababbba4$b...
[abc]
abc
[aA]
aA
[aA][bB]
abAbaBAB
[09][09][09]
000001009010019100999
[09]*
cadena_vaca01900991234569999999
[09][09]*
019009912345699999999999999999999
^.*$
cualquierlneacompleta
[09]+
019009912345699999999999999999999...
[09]?
cadena_vaca0123...
^a|b
ab
(ab)*
cadena_vacaabababababab...
^[09]?b
b0b1b2b9b
([09]+ab)*
cadena_vaca 1234ab 9ab9ab9ab 9876543210ab
99ab99ab
s/(\d+)\.(\d+)\.(\d+)\.(\d)+/\4.\3.\2.\1/ [Link]
=>
[Link]
(\d+\.\d+\.\d+\.\d+)(?:\n)*\1(?:\n)*\1
(\d+\.\d+\.\d+\.\d+\n*){3}
3veceslamismaip
el mismo que el
anterior
[Link]
[Link]
sed:esuneditornointeractivo,recibelaentradaporstdino
por un fichero, hace las operaciones necesarias y saca el
[Link]
aqutresdelasmspotentes:escribir,[Link]
sintaxises:
sed[opciones]{OPERADOR|scriptfichero}
24
OPCIONES
r parapoderusarexpresionesregularescomplejas.
Porejemplo,parapoderhacerreferenciaagrupos:podemos
utilizar\nparahacerreferenciaalnsimogrupo,dondecadagrupo
sedelimitapor(expr).
f siqueremosusarunscriptenvezdeunOPERADOR
n noescribeporpantallalalneaqueesttratando
OPERADORESBSICOS
rangp
imprimelaslneasderang
rangd
borralaslneasderang
s/patron1/patron2/
[modificador]
sustituyelaprimeraocurrenciade
patron1porpatron2
rang/s/patron1/patron2/
[modificador]
sustituyelaprimeraocurrenciade
patron1porpatron2delaslneasde
rang
MODIFICADORES
g sustituyeatodaslasocurrenciasdelaslneas,nosloalaprimera
y nodistingueentreminsculasymaysculas
:::ejemplos:::
8d
/^$/d
/kernel/p
Borrala8alnea
Borratodaslaslneasenblanco
Imprimelaslneasconlapalabrakernel
(conn)
s/Windows/Linux/
de
cadalnea
s/Windows/Linux/g
Sustituye"Linux"porlaprimerainstancia
Windows"en
Sustituye"Linux"porcadainstanciade
Windows
s/*$//
Borratodoslosespaciosdelfinaldecada
lnea
s/00*/0/g
Reducetodaslassecuenciasde0'saun
nico0
/Windows/d
Borratodaslaslneasdondeaparece
Windows
s/Windows//g
BorratodaslaspalabrasWindows,sin
borrarla
lnea
:::ejemplos:::
sedr's/(La|El)(.*)es.*/\2/'
Extraeelsujeto(sinartculo)de
frasesdeltipo
Lapelotapequeaesdeuncolormuyextrao
sedr's/(La|El)([^]*)(.*)(es.*)/\1\3\2\4/'
Ponelaprimerapalabradel sujetoalfinaldeeste
[Link]
awk: esunlenguajeparaprocesartextoconmuchasutilidades.
Aqu veremos una pequea introduccin con aquellas que nos
puedansermstilesparahacershellscripts.
25
awk[Fseparador][vvar=valor][fprog_awk|'prog_awk']
[ficheros]
[Link]
ellastendrlasiguienteestructura:
expresin{accin1;accin2;...}
Acciones: Si la evaluacin de la expresin es positiva se
ejecuta/nla/lasaccin/esindicada/s
ACCIONS
print Imprimeloquelepiden,siponemosuna,imprimeunespacioen
blanco
:::ejemplo:::
$echoe\nun\ndos\ntres|awk'{printYouso;print
Linux}'
Youso Porcadalnea,comoquelaexpresinescumple,
Linux
noshacelasacciones:imprimirYousoyimprimirLinux
Youso
Linux
Youso
Linux
Campos: Cada lnea del fichero que le pasemos a awk est
formadaporcampos(sinolepasemosundelimitador,esteser
elespacioenblanco).
CAMPOS
$n
nsimocampo
:::ejemplo:::
$echoundostres|awk'{print$1,$2}'
undos Imprimimoselprimeryelsegundocampo,separadosporun
espacio
contienecarcterdelimitadordecampos(pordefecto,espacioen
blanco)
NF
contieneelnmerototaldecamposdelregistroqueseest
procesando
RS
contieneelcarcterqueindicadondeseacabacadaregistro(por
defecto,\n)
NR
contieneelnmerodeordendelregistroqueseestprocesando
OFS
contieneelseparadordecamposparalasalidagenerada
ORS
contieneelcarcterdefinalderegistroparalasalidagenerada
26
:::ejemplos:::
[Link] $echoe"Usoelsistema\noperativodenominadoGNU/Linux"
|awkvOFS="\t"vORS=\t{print$1,$2,$3}'
UsoelsistemaoperativodenominadoGNU/Linux
Comosalida,laseparacindecamposyladeregistrosesun
tabulador
[Link] [Link]:
{print"Procesandolalnea",NR}
imprimimoselnmero
delnea
queestamos
procesando
NF>1{print"Lalneatienemsdeunapalabra"}
miramossitienemsdeuncampo
$1=="GNU/Linux"{print"LaprimerapalabraesGNU/Linux"}
miramossielprimercampoesGNU/Linux
$echoe"GNU/LinuxesunSO\nMegusta
GNU/Linux\nGNU/LinuxesmiSO"|[Link]
Procesandolalnea1
Lalneatienemsdeunapalabra
LaprimerapalabraesGNU/Linux
Procesandolalnea2
Lalneatienemsdeunapalabra
Operadores:
operadores:
suma
resta
multiplicacin
divisin
residuo
exponenciacin
espac concatenacin
io
!
negacin
var++ incrementarvaren1
var decrementarvaren1
>
mayorque
>=
mayoroigualque
<
menorque
>=
menoroigualque
==
igual
!=
diferente
?:
estructuraifelse
27
PLANTILLASDEPRLOGOY
EPLOGO
BEG Laaccinseejecutar
alprincipio
IN
END Laaccinseejecutar
alfinal
:::ejemplo:::
[Link]:
BEGIN{total=0}
inicializamoslavariabletotala
0
{total=total+$1}
aumentamostotalconelprimer
campo
END{print"Eltotales",total} imprimimoselresultado
final
$echoe"12\n15\n10"|[Link]
Eltotales37
Estructuras de control: Disponemos tambin de las diferentes
estructuras de control de cualquier lenguaje de programacin.
Enelcaso deawk sehan heredado la sintaxi del lenguaje de
programacinC.
ESTRUCTURAif
ESTRUCTURAfor
ESTRUCTURA
while
ESTRUCTURA
do/while
if(cond){
instruccion
es
}
[else{
instruccion
es
}]
for
(inic;cond;instr){
instrucciones
}
while(cond){
instruccio
nes
}
do{
instruccione
s
}while(cond)
:::ejemplos:::
[Link] [Link]:
{
if($1>0){
print$1,"espositivo";
}
else{
print$1,"esnegativo";
}
}
miramossielprimercampoes
positivo...
...onegativo
$echoe"12\n15\n10"|[Link]
12espositivo
15esnegativo
10espositivo
[Link] [Link]:
{
print"\nTabladel",$1
print""
28
for(y=1;y<11;y++){
j=$1*y;
printy,"*",$1,"=",j;
}
}
$echoe"2\n3"|[Link]
tabladel2
1*2=2
2*2=4
3*2=6
4*2=8
5*2=10
6*2=12
7*2=14
8*2=16
9*2=18
10*2=20
tabladel3
1*3=3
2*3=6
3*3=9
4*3=12
5*3=15
6*3=18
7*3=21
8*3=24
9*3=27
10*3=30
29
Funciones:Tenemosademsdiversasfuncionespredefinidas:
FUNCIONES
length(s)
Devuelvelalongituddesenbytes
rand()
Devuelveunnmeroalazarentre0y1
srand()
Inicialasemilladegeneracinalazar
int(var)
Devuelvevarconvertidoenunentero
substr(s,m,n)
Devuelvelasubcadenadescomenzandoporlaposicinm
conunalongitudden
index(s,t)
Posicindesdondeapareceto0sinoest
match(s,r)
Posicindesdondesecumplelaexpresinr
split(s,a,fs)
Devuelvesenelementosseparadosporfsalatablaa
sub(r,t,s)
Cambiaenslacadenatporr
gsub(r,t,s)
Cambiaenslacadenatporrentodaslasocurrencias
sprintf(f,e,e,...) Imprimeconformato
system(cmd)
Ejecutacmdydevuelveelcdigoderetorno
tolower(s)
Devuelvesenminsculas
touppor(s)
Devuelvesenmaysculas
getline
Fuerzaunalecturadefichero
:::ejemplo:::
echoe"holamaria\nholajoan"|awk
'{sub("hola","adeu");print}'
adeumaria
adeujoan
[Link]...
LaAmericanNationalStandardsInstitute(ANSI)proporcionauna
serie de secuencias de caracteres para poder realizar
determinadas tareas bajo el S.O.. Aqu veremos las secuencias
que nos permiten formatear los caracteres de la pantalla
(negrita, color,...), mover el cursor, entre otros. Para
conseguirlotendremosqueponer:
SECUENCIA_ESCAPE+SECUENCIA_CONTROL
SECUENCIASDEESCAPE
^[
Sihacemosuntextodirectoyqueremosverloconcat
ParaobtenerestecarcterconeleditorVI:ctrl+xESC
\E
Sihacemosunechoe
30
SECUENCIASDECONTROL
ATRIBUTOSDELTEXTO
[0m
Textonormal(reset)
[1m
Negrita
[3m
Cursiva
[4m
Subrayado
[5m
Intermitente
[7m
Inverso
[22m
Nonegrita
[23m
Nocursiva
[24m
Nosubrayado
[25m
Nointermitente
[27m
Noinverso
COLORS
[XX;YYm XX:colordeletra
YY:colordefondo
COLORESDELETRA
30negro
31rojo
32verde
33amarillo
34azul
35magenta
36cian
37blanco
COLORESDEFONDOS
40negro
41rojo
42verde
43amarillo
44azul
45magenta
46cian
47blanco
Sicombinamosestosvalorescon0(textonormal)y1
(negrita)obtenemoscoloresfuertesosuaves.
MOVIMIENTODELCURSOR
[xA
Subirxlneas
[xB
Bajarxlneas
[yC
Iraladerechayespacios
[yD
Iralaizquierdayespacios
[y;xH
[y;xf
Posicionarelcursoray,x
[?6h
Posicionarenlapartesuperiorizquierda
[s
Grabarcursoryatributos
[u
Restauraratributosgrabados
CONTROLDEPANTALLA
[2J
Limpiarpantalla
#8
LlenarconE's
[K
Borrarhastafinaldelnea
[?5h
Enciendeinverso
[?5l
Apagainverso
::ejemplos::
[Link] Textorojoclarosobreverdesubrayadoyvolveradejarlos
coloresnormales
echoe\E[1;4;31;42mHOLA\E[0m
31
32
[Link]
[Link]
:::VARIABLES:::
[Link]:
a)AsignarelvalorLunesalavariableDIA1,elvalor
MartesalavariableDIA2yasconsecutivamentehastala
variableDIA7.
b)Mostrarelvalordetodaslasvariablesporverificar.
c)Usandoestasvariablesobtenerlasalida:
Semana:LunesMartesMircolesJuevesViernesSbado
Domingo
d)Usandoslolasvariablesdefinidas,cargarenlavariable
SEMANAlalistadedasseparadosporespacios.
[Link],mostrar:
a)caminodeldirectoriodetrabajodelusuari@
b)nombredellogindelusuari@
c)nombredelaterminalenusodelusuari@
d)nombredelintrpretedecomandosactual
e)caminoocaminosdebsquedadeejecutables
f)todaslasvariablesdeentorno
[Link]:
a)DeclaralavariableVIAScomoelvalor
/usr/doc:/var/lib/[Link].
b)AgregaralavariableVIASeldirectorio/usr/doc/HOWTOal
finaly/usr/DOC/FAQalprincipio(separadostodoslos
directorioscon:)
[Link]?
echo$LOGNAME
echo$LOGNAME
echo'$LOGNAME'
echo\$LOGNAME\
echoMilogines$LOGNAME
echo'Milogines$LOGNAME'
[Link]:
a)Visualizaelcontenidodelavariabledondeseguardael
[Link]
SAVE.
b)Cambiarelpromptparaquesemuestreas:
UNIXllest$
c)Hazqueelpromptvuelvaatenersuvalorinicialusando
lavariableSAVE.
[Link]:
a)InicializarlavariableVAR1conlacadenashellbash1.
[Link]
ahoralavariableVAR1?Porqu?
b)Saldecsh.QuvalortieneahoraVAR1?Porqu?
c)HazquelavariableVAR1seaunavariabledeentornoy
repitelospasosa)yb)Quhapasado?
d)[Link]?
[Link]/usr/prog/[Link]
33
harasparacomprobarquefuncionabienelnuevoPATH?
[Link]
variablesHOMEyLOGNAMEseparadospordospuntos.
:::REDIRECCIONAMIENTO:::
[Link]
[Link],por
ejemploEstaeslalnea1sinusarningneditordetexto.
a)Conelcomandocat,muestraporpantallaelcontenidodel
archivo/etc/services
b)Escribeelcomandocatredireccionandolaentradaestndar
desdeelarchivo/etc/servicesylasalidaestndarhaciael
[Link]
c)Usandoecho,[Link]
archivodErrores
d)[Link]
sinredireccionarentradaestndar,peroredireccionandola
[Link]
[Link]
[Link].
[Link]"$catf1f2".Elfichero
[Link]
porelmonitor.
a)Consiguequelasalidadeerroresvayaaunfichero
denominadoerrores.
b)Consiguequeelcontenidodelficheroqueexistesecopie
aunficherodenominadof3(ademsdelquehasconseguidoen
elapartadoa)).
[Link],creaunficheroquecontengala
siguienteinformacin:
UnalneaconelcontenidoInformedelsistema
Doslneasenblanco
Elcalendariodelmesactual
Lafechaactual
Eltipodeordenadoresqueestamosusando
Los/lasusuari@squeestnconectad@s
:::FILTROSIPIPELINES:::
[Link]:
a
aa
ab
aba
aaa
abab
abba
Lacadenaaescapicua
Tambinescapicualacadenaaa
Lacadenaabnoescapicua
Enunacadenacapicuasufinalreflejasuprincipio
Siconcatenasunacadenaysureflejoelresultadoes
capicua
A
AA
34
ABA
a)Listarlaslneasquecontenganunaletraa
b)Listarlaslneasquecontengandosletrasa
consecutivas
c)Listarlaslneasquenocontenganlaletraa
d)Listarlaslneasquenocontenganletrasmaysculas
e)Listarlaslneasquecomiencenporlaletraa
f)Listarlaslneasquecomiencenporunaletraminscula
g)Listarlaslneasqueacabenconlacadenacapicua
[Link]
aparezcanlosdirectorios.
[Link].
[Link]
root.
[Link]@susuari@sdelresultadodela
ordenwho.
17.Extraerloscampos1y3delresultadodelaordenwho.
[Link]
$HOME.
[Link]/lapropietari@ymedidadetodoslosficherosdel
directorio$HOME.
[Link]/etc/passwddelservidorLinuxcontiene
informacindetod@slas/losusuari@squetienenunacuentaen
[Link]/unausuari@diferentey
enellaaparecenlossiguientescamposdelimitadospor:
nombredeusuari@
Passwordcdigointroducidoenformadex
Identificadordel/lausuari@
Identificadordelgrupoalcualperteneceel/lausuari@
Informacinrespecteal/lausuari@(nombre,apellidos,
etc.)
Directoriodetrabajo
Intrpretedecomandosutilizado
Unejemplodelalneacorrespondienteaun/ausuari@eneste
ficherosera:
maria:x:210:204:MariaSanchez:/home/maria:/bin/bash
a)Compruebasiexisteonounaentradadetuusuari@este
fichero.
b)Listatod@sl@susuari@sdelmismogrupoquetque
existenenestefichero.
c)Listalosidentificadoresdeusuari@.
d)Listalosshellsusadosporl@susuari@squetenganel
mismogrupoquet.
e)Listaelcampo1yloscampos3a5.
[Link]/etc/passwdordenado
alfabticamente.
[Link]
[Link]@susuari@sdelresultadodela
ordenwhoyordenarlosalfabticamente.
[Link]@susuari@sdelresultadodela
ordenwho,ordenarlosalfabticamenteyeliminarlosnombres
repetidos.
[Link](excluyendo
losdirectorios)deldirectorioactualordenadosportamao.
35
[Link]/etc/groupseespecificanlosgrupos
existentesenelsistemaconsuidentificadorysus
[Link]:
nombre_grupo:id_grupo:comp1,comp2,...compn
a)Muestraporpantallalaslneasdelosgruposdondeest
tuusuari@.
b)Muestraporpantallaencuntosgruposests.
c)Muestraporpantallalaslneasdelosgruposdondeests
tyalgn/ausuari@ms.
d)Ahora,hazqueslosalganlosnombresdelosgruposdonde
esttuusuari@.
e)Almacenaestosnombresdegruposenunavariablequese
llameMISGRUPOS
f)Muestraporpantallaelprimerytercercampo(nombrey
identificador)delalneacorrespondienteatuusuari@enel
archivo/etc/[Link]
separadospor:.
g)Muestraelmismoresultadoqueenelapartadof)pero
ahoraelnombreyelidentificadorestarnseparadosporun
espacioenblanco.
h)Asignalasalidaanterioraunavariabledenominada
IDENTIDAD.
i)CreaunavariablequesellameYOconelcontenidodela
variableIDENTIDADydelavariableMISGRUPOS,separadoscon
un$.Muestraelresultadoporpantalla.
[Link]<num_id>dondenum_id
[Link]:
a)Usandoelcomandoidconopciones
b)Usandoelcomandoidsinopciones
c)Usandoelarchivo/etc/passwd
[Link]:
a)Salgaelda(nm)[Link]
variableDIA.
b)[Link]
MES.
c)[Link]
AO.
d)SalgaporpantallaHoyesda<num_da>delmes<mes>del
ao<ao>,usandolasvariablescreadas.
e)[Link]
salidaseveaporpantalla.
f)[Link]
vealasalidaporpantalla.
:::SHELLSCRIPTS:::
[Link]
elprimeroesmenorqueelsegundoylosresteencaso
contrario.
[Link]
nmero,unaletrauotracosa.
[Link]
esundirectoriolistasucontenido.
[Link]
pasanporparmetro.
36
[Link]
tienenlosnombresdelosficherosdeldirectorioactual.
[Link]
pasancomoparmetrossonparesoimpares.
[Link]'usuari@ynosdiga
sisteexistey,siexiste,nosdigasiestconectado.
[Link]
losficherosydirectoriosquehayeneldirectorioactualde
lasiguientemanera:
Siconelcomandolsobtenemoslasiguientesalida
fit1prog1prog2joc
Connuestroscriptlsenoslomostraras:
|_fit1
.|_prog1
..|_prog2
...|_joc
[Link]
detodoslosficherosqueselepasencomoargumentosdandoun
errorparatodosaquellosargumentosquenoexistenoquesean
directorios.
[Link]
detodoslosficherosdeldirectoriopasadocomargumento,
dandounmensajedeerrorsielargumentopasadonoesun
directorioonoexiste.
[Link](c),
mover(m)yborrar(d)[Link]
quelasintaxisutilizadaeslacorrecta.
[Link]
nombresdeusuari@ysistosexistenyestnconectad@snos
[Link]
cuandoel/lausuari@tecleeFI.
[Link]
ficherosconpermisodelecturadeundirectorioquese
proporcionacomoparmetro.
[Link],dadoun
identificadordegrupo,liste,paracadausuari@quepertenezca
algrupo,suid,[Link]
salidasera:
USUARI@SDELGRUPO52(5)
[Link].
NOMBRE
[Link]
235
maria
/home/maria
246
jordi
/home/jordi
...
[Link]
cualtenganelsiguienteformato
nombre:fechacumpleaos
Realizaunscriptdenominadogeneracumplequetegenereel
ficheroquedeberamosdepasarenelcomandocrontabparaque
eldaantesdecadafechadecumpleaosrecibasunmailque
tengalasiguienteinformacin:
...
Subject:RecordatorioCumpleaos
37
...
Maanada[data]eselcumpleaosde[nombre].No
olvidesfelicitrl@.
[Link]:
Cadadaalas7delamaanamiraquetamaotieneel
directorio/tmpysiesmsgrandeque10Mbloborrey
enveunmailaladministradorinformndolo.
Cadadosdasalas12delanoche,comprimay
empaqueteeldirectorio/homeyguardeestearchivoen
eldirectorio/usr/src/[Link]
existe,secrear.
Cadada,delunesaviernes,creeuninformealas
19:00,alas20:00yalas21:00conl@susuari@sque
estnconectad@[Link]
informetendrelsiguienteaspecto:
FECHA:[fecha]
HORA:[hora]
USUARI@SCONECTAD@S([numusuari@s])
[Link].
NOMBRE GRUPO
[id1] [nomusu1]
[grupousu1]
[id2] [nomusu2]
[grupousu2]
[id3] [nomusu3]
[grupousu3]
...
:::EXPRESIONESREGULARES:::
[Link]:
a)contenganlacadena"aba"
b)contengantres"b"seguidas
c)comiencenpordos"a"
d)acabenpor"ba"
e)comiencenpor"a"yacabenpor"b"(enelmediopuede
habercualquiercosa)
f)slocontenga"a"(lacantidadnoimporta)
g)primerouna"b"ydespusvarias"a"
h)tengatanto"a"como"b"(elordenolacantidadno
importa)
i)notengamsdetres"a"otres"b"seguidas
j)vayaalternandolas"a"ylas"b"sinrepetirse
k)slotengaparejasde"a"yde"b"
l)tenganunanica"a"ounanica"b"
m)hayaunascuantas"a"ydespusunascuantas"b"oal
revs
n)contengalacadena"aba"olacadena"bab"
o)contengalacadena"ba"dosveces
[Link]
contengan:
a)nmerosdecimales(conunacomacomoseparadordecimal)
b)nmerosdecimales(conunacomaounpuntocomoseparador
decimal)
c)nmerosdetelfonos(denuevecifras,quecomiencenpor9
o6)
d)cdigospostales(decincocifras,quecomiencencomo
38
muchopor5)
e)DNI(sieteuochocifrasquepuedenirseguidasdeuna
letra)
f)palabrasenminsculassinnmeros
g)palabrasenlascualesslolaprimeraletraseamayscula
h)tresocuatropalabras(sinnmeros)
[Link]/etc/passwddarlasexpresionesregulares
paraobtener:
a)usuari@sconlapalabra"Unix"alprincipiodelcampode
comentario.
b)usuari@sdelgrupo101.
c)usuari@sdelosgrupos100,101o105.
d)listarusuari@sconUIDdeundgito.
f)listarusuari@sconUIDde1o2dgitos.
g)usuari@sconnombredeexactamente4caracteres.
h)usuari@connombrede4caracterescomenzandoporr.
[Link]:
a)Fecha(DD/MM/AAAA)
b)Hora
c)Correoelectrnico
d)Nmerosdetelfono:(93)841.61.00
e)[Link]
[Link]
:::shellscripts:::
[Link]
[Link]
Cursointroductoriodeshellscripts,[Link]
opcionesyalgunosaspectosnoexplicadosenesteminicurso.
[Link]
Curso de GNU/Linux por consola. Tiene una parte de shell
scripting.
:::expresionesregulares:::
[Link]
Tutorialdeexpresionesregulares.
[Link]
Tutorialdeexpresionesregulares.
[Link]
Referenciarpidadeexpresionesregulares
:::awk:::
[Link]
39
Pequeotutorialdeawk
[Link]
pdf
Tutorialcompletodeawkencastellano
[Link]
[Link],semprehiha
[Link]:noselmaimsunper
sempre?Tanmateix,elpersempresesituaeneltemps,mentre
elmaimssintemporal.
(ManueldePedrolo)
40