Sei sulla pagina 1di 40

Apuntes Bash

1-40

ndice de contenido
FicherosBASH................................................................................................................................3
CaracteresEspeciales.......................................................................................................................3
Variables..........................................................................................................................................5
Comillas...........................................................................................................................................5
Estadodesalida(exitstatus)............................................................................................................6
Comparadores..................................................................................................................................6
Operaciones.....................................................................................................................................9
Variables........................................................................................................................................11
Internas......................................................................................................................................11
Parmetrosposicionales............................................................................................................11
Otrasvariables...........................................................................................................................12
Manipulacindecadenas..........................................................................................................12
Evaluacindevariablesyparmetros.......................................................................................13
Tipadodevariables...................................................................................................................14
Referenciaindirecta..................................................................................................................14
NmerosAleatorios..................................................................................................................15
BuclesySaltos...............................................................................................................................16
for..............................................................................................................................................16
while..........................................................................................................................................16
until...........................................................................................................................................17
break,continue..........................................................................................................................17
case............................................................................................................................................17
select..........................................................................................................................................17
Redirecciones............................................................................................................................19
Redireccinlocal(heredocuments)..........................................................................................20
ExpresionesRegulares(RegExp)..................................................................................................21
Expansindenombresdefichero(globbing)...........................................................................22
Sustitucindeprocesos.............................................................................................................22
Funciones..................................................................................................................................23
Arrays............................................................................................................................................24
Ficherosespeciales:/dev/nully/dev/zeros....................................................................................25
sedyawk.......................................................................................................................................26
sed.............................................................................................................................................26
awk............................................................................................................................................26
ComandosInternos........................................................................................................................27
IO..............................................................................................................................................27
SistemadeFicheros..................................................................................................................27
Variables...................................................................................................................................27
Comportamientoscript..............................................................................................................28

Apuntes Bash

2-40

Comandos..................................................................................................................................29
Controldetrabajos....................................................................................................................29
Filtrosexternos,programasycomandos.......................................................................................30
Bsicos......................................................................................................................................30
Comandoscomplejos................................................................................................................31
Fechayhora..............................................................................................................................31
Procesadodetexto....................................................................................................................32
Archivadores.............................................................................................................................33
Compresin...............................................................................................................................34
Ficheros.....................................................................................................................................34
Compararficheros.....................................................................................................................34
Utilidadesdeficheros................................................................................................................34
Comunicaciones........................................................................................................................35
AccesoRemoto.........................................................................................................................35
Varios........................................................................................................................................36
ComandosdeAdministracinySistema.......................................................................................37
Usuariosygrupos.....................................................................................................................37
Terminales.................................................................................................................................37
Informacinyestadsticas.........................................................................................................38
Logs...........................................................................................................................................38
Procesos....................................................................................................................................38
Controldeprocesos...................................................................................................................39
Red............................................................................................................................................39
Sistemadeficheros...................................................................................................................39

Apuntes Bash

3-40

Ficheros BASH
Todoficherobashdebecomenzarenlaprimeralneacon#!/bin/bash

Caracteres Especiales
#

comentario
usadoeneliminaciones${...}
;
separadorcomandosenmismalnea
;;
separadorcase...in
.
leeyejecutaficheroscript(comosource)
enexpresinregular,cualquiercarcter

evitainterpretacin,salvo$(citaparcial)

evitainterpretacin(citatotal)
,
enlazaoperacionesaritmticas(entredoblesparntesis;elresultadoeseldelaltima)
\
escape
mismalneadividida
/
separadorenrutasfichero
divisin(aritmtica)
`
(backquote)ejecutarcomandoysustituirporsusalida(como$(...))
:
NOP(ejemplo:>fichero=>creaotruncafichero)
!
negacin
indireccindevariables(ejemplo:${!indir}evalalavariableconnombre$indir)
invocamecanismodehistoria
*
comodnenglobbing(expansindenombredefichero):cualquierconjuntodecaracteres
enexpresionesregulares(regexp):repiteexpresinanterior0onveces
multiplicacin(aritmtica)
**
potencia(aritmtica)
?
englobbing:cualquiercarcter
enregexp:0o1repeticindelaexpresinprevia
$
evalavariable
enregexp:findelnea
${...} sustitucindeexpresin
$*
todoslosparmetros(comounasolacadena)
$@
todoslosparmetros(comoncadenas)
$?
exitstatus
$$
pid
(...)
grupodecomandosensubshell
inicializadordearrays(conespacioscomoseparador)
{expr1,expr2,expr3...}
englobbing,conjuntodeexpresionesalternativasparacoincidencia
{...} bloquedecdigo(conposibilidadderedirigirIO)
{}
nombredecadafichero(conrutacompleta)encontradoenfind(paralaopcinexec)

Apuntes Bash
[...]

[[...]]
((...))
>
&>
>&2
>>
<(...)
>(...)
>
<
<<
\<
\>
|
>|
||
&
&&

=
+

%
~
~+
~
^

devuelveoksilaexpresinescierta(equivalea/usr/bin/test,peroescomandointerno)
ndiceelementoenarrays
enregexp,conjuntodecaracteresalternativo
testextendido(admitemsflexibilidadque[...])
evaluacindeenteros
redireccindestdout
redireccindestdoutystderr
redireccindestdoutastderr
redirigeyaade(sintruncarsiyaexiste)
sustitucindeprocesos
sustitucindeprocesos
comparadorcadenasyenteros
comparadorcadenasyenteros
redireccinparaprocesosinteractivos
enregexp,iniciodepalabra
enregexp,findepalabra
pipe
fuerzalaredireccin
ORlgico
ejecucinensegundoplano
ANDlgico
opcindecomando
stdin/stdoutenredirecciones
$OLDPWD(ej:cdcambiaaldirectorioanterior)
menos(aritmtica)
asignacin
comparacin
suma(aritmtica)
enregexp,repetirunaomsveceslaexpresinanterior
opcindecomando
mdulo(aritmtica)
usadoeneliminaciones${...}
$HOME
$PWD
$OLDPWD
enregexp,iniciolnea.Negacindentrode[]
englobbing,negacindentrode[]

4-40

Apuntes Bash

5-40

Variables
Asignacin:=(sinespacios)
ej:

variable=hola
variable2=hola

Evaluacin:
ej.

$o${...}(steevitaambigedad)
variable3=$variable2
variable4=${variable3}

Parmetrosposicionales:losquesepasanalcomandoofuncin.
$0nombredecomando
$1...$9parmetros
${10}...parmetros
$*,$@todoslosparmetrosenconjunto
$#numerodeparmetros(excluyendoelnombredecomando)
referenciaindirecta: var=7
var2=${!var}asignaavar2el7parmetro
shift:sentenciaquepasa$2a$1,$3a$2yassucesivamente,perdindoseelprimer
parmetro

Comillas
Partialquoting(comilladoble):Mantienenlosespacios.Interpretan$,`(backquoting),\(escape)
ej:

#!/bin/bash
var=abc
echo$var

#=>abc

echo$var

#=>abc

Fullquoting(comillasimple):Nointerpretasmbolos
ej:

var1=hola; var2=$var1;var3=$var1
echo$var1$var2$var3#=>holahola$var1

con$delante,interpretacaracteresdeescape
ej: echo$\aequivaleaechoe\a

Apuntes Bash

6-40

Estado de salida (exit status)


Comandoexitnnn(0255)>0ok,1255error
Elsmbolo$?tieneelestadodesalidadelaltimainstruccin
Elcomandoexitsinparmetrosequivaleaexit$?
Elsmbolo!msespaciomscomandoinvierteelestadodesalida
ej:

#!/bin/bash
!echohola #=>hola
echo$?

#=>1(error)

echo$?

#=>0(ok)

Comparadores
Sentenciaif...then...elif...then...else...fi
ifcompruebaelestadodesalidadelasentencia.Siok($?es0),ejecutathen.
Ej:

#!/bin/bash
ifcmpab&>/dev/null

#comparalosficherosabconsalidasilenciosa

then

#sisoniguales
echoaybsoniguales

else
echoaybsondistintos
fi
Operadoresparacomparaciones
[...]

equivalea/usr/bin/test,salvoqueesuncomandointerno(builtin)

[[...]] extiendelafuncionalidaddelanterior.Noesuncomando,sinounapalabraclave.
let

evalaexpresionesaritmticas

((...)) evalaexpresionesaritmticas
Operadoressobrefichero:IMPORTANTE:todosdebenirprecedidosyseguidosdeESPACIO
e

existe.Ej:if[e/etc/passwd];thencat/etc/passwd;elseechonoexiste;fi

esficheroregular

notienelongitud0

esdirectorio

Apuntes Bash

7-40

esdispositivodebloque

esdispositivodecaracteres

esunpipe

h,L esenlacesimblico
S

esunsocket

esunterminal(vacondescriptor,noconnombre)

tienepermisodelecturaparausuarioefectivo

tienepermisodeescrituraparausuarioefectivo

tienepermisodeejecucinparausuarioefectivo

tienesetgidactivado(tienepermisoparacambiarelgrupoefectivoaroot)

tienesetuidactivado(tienepermisoparacambiarelusuarioefectivoaroot)

tienestickybitactivado(mantenerencache)

usuarioefectivoespropietario

grupoefectivoigualaldelfichero

fechadeltimamodificacinposterioraladeltimoacceso

f1ntf2

f1posteriorf2(newerthan)

f1otf2

f1anteriorf2

f1eff2

f1yf2sonenlacesfuertes(hardlinks)almismofichero

negacin

Operadoresdeenteros:
Concorchete [$aoperador$b]
eq

igual

ne

distinto

gt

mayor

ge

mayoroigual

lt

menor

le

menoroigual

Condobleparntesis (($aoperador$b))
<

menor

<=

menoroigual

Apuntes Bash

8-40

>

mayor

>=

mayoroigual

Operadoresdecadenas:concorcheteodoblecorchete.
=,== cadenasiguales.Condoblecorchete,admitepatrones
ej:

var="hola"
if[$var=h*];thenechos;elseechono;fi#=>no
if[[$var=h*]];thenechos;elseechono;fi#=>s
if[[$var=h*]];thenechos;elseechono;fi#=>no(ajusteexacto)

Lascomillasdoblessontilesparapreservarespacios
ej:

var1="ab";var2=ab
if[$var1=$var2];thenechos;elseechono;fi#=>error(toomanyargs)
if[[$var1=$var2]];thenechos;elseechono;fi#=>no
if["$var1"="$var2"];thenechos;elseechono;fi#=>no

!=

cadenasdistintas.Mismoscomentariosqueelanterior

>,<

mayor,menor(alfabticamente).Concorchetesimplerequiere\(escape)
ej:

var1=a;var2=b
if[$var1\<$var2];thenechos;fi

#=>s

if[[$var1<$var2]];thenechos;fi

#=>s

cadenadelongitudceroosindeclarar(null)

cadenadelongitudmayorquecero

Operadoreslgicos
a

AND

OR

Encorchetesdoblesoenlistasdecomandos
&&

AND

||

OR

Listasdecomandos:debidoalaejecucinperezosa,eloperador&&puedeencadenar
comandoshastaelprimerretornodeestadonook.Delamismaforma,||encadena
comandoshastaelprimerok

Apuntes Bash

9-40

ejemplo:

[e$fichero]&&cat$fichero

equivalea

if[e$fichero];thencat$fichero;fi

Operaciones
Asignacindevariables

Aritmticaentera
+,,*,/,**,%
+=,=,*=,/=,%=
Paraevaluarexpresionesaritmticassehadeusarlet,expro((...))
Ejemplo:

#!/bin/bash
a=1;b=2
leta=a+b;echo$a #3
a=`expr$a+$b`;echo$a#5
((a=a+b));echo$a #7
:$((a=a+b));echo$a #9

Losenterosenbashsuelenserconsignode4bytes
Arimticadecomaflotante:Enbashnoexistenlasvariablesdetipocomaflotante.Soncadenas.
Paraejecutarestetipodeclculosnecesitamoselcomandobc,habitualmenteenpipe
ejemplo

#!/bin/bash
a=0.16;b=15
c=`echoscale=0;$b^$a|bc`

#backquoteparaejecutarydejarstdout
#comoparmetrodelsiguientecomando

variablesparabc:
scaleindicaelnmerodedecimales
ibase,obaseindicanlasbasesenlasqueserepresentanlosdatosdeentraday
desalidarespectivamente(pordefecto,10)
lastltimonmeroimpreso
Operadoresaniveldebit:

<<,>>,<<=,>>=,&,&=,|,|=,~,~=,^,^=

Otrosoperadores

lacomaentredobleparntesisejecutavariasoperacionesaritmticasy
devuelveelresultadodelaltima

Constantesnumricas

Apuntes Bash

10-40

decimal

letx=32

octal

letoc=032

hex

lethx=0x32Fa#tambinseadmite0X

otrasbases

letbin=2#0100101

mximabase64,queusa10dgitos,26minsculas,26maysculas,@y_

Apuntes Bash

11-40

Variables
Internas
$EUID

usuarioefectivo

$FUNCNAME

nombredelafuncinactual(paradepuracin)

$GROUPS

listadegruposalaqueelusuariopertenece

$HOME

directoriodetrabajodelusuario

$HOSTNAME

anlogoaejecutar/bin/hostname

$IFS

internalfieldseparator.Lasseparacionesdepalabrasycampossellevana
cabousandoloscaracteresaqudefinidoscomolmites.Sepuedemodificar
conlostestigosquenosinteresenencadacasoparahacerdivisinde
cadenas.

$LINENO

contienelalneaactualdelscript(paradepuracinej.echovoypor
$LINENO)

$OLDPWD

penltimoenelhistricodedirectoriosactuales

$PATH

conjuntoderutas(separadaspor:)enlasquesebuscanejecutables
ej:PATH=$PATH:/nuevodirectorio

$PPID

piddelprocesopadre

$PROMPT_COMMAND

comandoejecutadoantesdeimprimirelpromptprincipalPS1

$PS1

promptprincipal

$PS2

promptsecundario.Paralneasdeentradaadicionales(normalmente>)

$PS3

mostradoenlasentenciaselect

$PS4

cuandoseinvocaunscriptconx,opcinxtracequeimprimecadacomando
antesdeejecutarlo(normalmente+)

$PWD

directorioactual

$REPLY

enread,cuandonohayvariablecomoparmetro,contieneeldatoledo
enmensselect;contieneelnmerodeitem

$TMOUT

tiempoparalogout(tilpararealizarlecturasreadcontiempolimitado)

$UID

usuario

Parmetros posicionales
$0

nombredelscript

Apuntes Bash

12-40

$1,$2...$9

parmetrosdel1al9

${10},${11}...

apartirdedoscifrasseexige${}

$#

nmerodeparmetros(excluyendoelnombredescript)

$*

todoslosparmetros(comounacadena)

$@

todoslosparmetros(como$#cadenas)

Otras variables
$

conjuntodeflags

$!

PIDdelltimotrabajoensegundoplano

$_

ltimoparmetrodelltimocomandoinvocado

$?

exitstatusdelltimocomando

$$

PIDdelprocesoactual(tilporejemploparaconstruirnombrenicos
temporales)

Manipulacin de cadenas
Longituddeunacadena
${#cadena}
exprlength$cadena
expr$cadena:'.*'
Longituddecoincidenciadeexpresionesregulares
exprmatch$cadena$regexp
expr$cadena:$regexp
Bsquedadecaracteres:encuentralaposicin(ndicebase1)delprimercarcterquecoincida
exprindex$cadena$conjuntoDeCaracteres
Extraccindesubcadenas
${*:posicion}#parmetrosposicionalesdesdeposicionenadelante
${@:posicion}#parmetrosposicionalesdesdeposicionenadelante
${cadena:posicion}#desdeposicinalfinal
${cadena:posicion:longitud}#desdeposicin,'longitud'caracteres
${cadena:longitud}#'longitud'ltimoscaracteres
exprsubstr$cadena$posic$longitud

Apuntes Bash

13-40
exprmatch$cadena\($regexp\) #extraccindesdeelinicio
expr$cadena:\($regexp\)

#extraccindesdeelinicio

Borrado
${cadena#regexp}#borralaprimeracoincidenciamscorta
${cadena##regexp}#borralaprimeracoincidenciamslarga
${cadena%regexp}#borralaltimacoincidenciamscorta
${cadena%%regexp}#borralaltimacoincidenciamslarga
Sustitucin
${cadena/regexp/cadenaSustituye}#sustituyelaprimeracoincidencia
${cadena//regexp/cadenaSustituye}#sustituyetodaslascoincidencias
${cadena/#regexp/cadenaSustituye}#sustituyesilacoincidenciaseproduce
#desdeelprimercarcter
${cadena/%regexp/cadenaSustituye}#sustituyesilacoincidenciaseproduce
#desdeelltimocarcter

Evaluacin de variables y parmetros


Entodosloscasosvarpuedeserunaetiquetaalfanumricaounnmero,indicandoenesteltimo
casounparmetroposicional.
$var

devuelvevalordevar

${var}

devuelvevalordevar

${vardefecto}

devuelvevalordevar.Sinodefinida(null),devuelve'defecto'

${var:defecto}

devuelvevalordevar.Sinodefinida(null),devuelve'defecto'

${var=defecto}

devuelvevalordevar.Sinodefinida(null),devuelve'defecto'yseloasignaa
var

${var:=defecto}

devuelvevalordevar.Sinodefinida(null),devuelve'defecto'yseloasignaa
var

${var+otro}

sivarestdefinida,devuelve'otro'.Sino,devuelvenull

${var:+otro}

sivarestdefinida,devuelve'otro'.Sino,devuelvenull

Apuntes Bash

14-40

${var?mensajeError} sivarestdefinida,devuelvesuvalor.Sino,imprime'mensajeError'
${var:?mensajeError}

sivarestdefinida,devuelvesuvalor.Sino,imprime'mensajeError'

Tipado de variables
Lasvariablesnotienentipadofuerte.Paradefinirunavariable,simplementeseinicializaaunvalor
yactaconeltipodelaconstanteasignada.Posteriormenteselepuedeasignarotraconstantede
otrotipo.
Ejemplo:
#!/bin/bash
a=123456
leta=$a+100000
echo`expr$a:'\(.*3\)'`#=>223
Entodocaso,sepuederestringirsuusocontypesetodeclare(sonsinnimos)

Constantes:

declarervar
readonlyvar

Enteros:

declareivar

Arrays:

declareavar

Funciones:

declarefnombreFuncion
declaref

Paraexportar:

listalasfuncionesdefinidashastaelmomento

declarexvar

Referencia indirecta.
eval...\$$varIndirecta
${!varIndirecta}
Ejemplo:
#!/bin/bash
cad=hola
indir=cad
evalecho\$$indir

#=>hola

permiteinicializarenlamismalneadedeclaracin

Apuntes Bash
echo${!indir}

15-40
#=>hola

Nmeros Aleatorios
VariableRANDOM.
Inicializarlasemillaaleatoria(p.ej.usarpid)
Evaluar$RANDOM daunenteroentre0y32767

RANDOM=$$

Apuntes Bash

16-40

Bucles y Saltos
for
forvar[inlista]#siseomitelista,seusa$@
do
cmd
cmd
...
done
obien
for((a=1;a<10;a++))
do
...
done
tiles

set$var dividevarenpalabrasylasasignaa$1,$2...

sepuedeusarexpansindenombresdefichero(globbing)
forfichin./* #paracadaficheroeneldirectorioactual

while
whilecondicin#aligualqueif,lacondicinesunasentenciaysemirasuexitstatus
do
...
done[<fichEntrada][>fichSalida]
Lasredireccionesdeentradaysalidasonmuyinteresantesparahacerbuclesdelecturaconread.
Ejemplo:
whilereadlineaFichero
do
echo$lineaFichero
done<fichero

Apuntes Bash

17-40

until
Anlogoalanterior

break, continue
SinparmetrosfuncionancomoenC
breaknsaledennivelesdeanidamiento
continuensaleden1nivelesdeanidamientoycontinaenelsiguienteciclodelbucleexterior

case
case$varin
$valor1[|$valor2...])
...
;;

#indicafinalizacinestecaso

...)
...
;;
*)

#casoporexclusin
...
;;

esac
Losvalorespuedenllevarcomodines(*),peroentoncesnodebenllevarcomillas.Lascomillasno
sonnecesariasporquenohaydivisindepalabras.

select
selectvar[inlista]
do
cmd
...
break
done

Apuntes Bash

18-40

Presentaunmenconlista.Seeligemediantenmero,varseactualizaaesevaloryseejecutala
secuenciadecomandos.

Apuntes Bash

19-40

Redirecciones
Losdescriptoresdeficherosonficherosespecialesen/dev/fd/<num>,siendo0,1,2
respectivamenteasignadosastdin,stdoutystderr
:>fich

truncaficherofich(anlogoatouchfich,peronoarrancaunsubproceso)

>>

redirigeparaaadir(notruncafichsiexiste)

>fich

redirigestdoutafich(truncandofichsiexite)

1>fich

redirigestdoutafich(truncandofichsiexite)

>>fich

redirigestdoutafichparaaadirdatos(notruncafichsiexite)

1>>fich

redirigestdoutafichparaaadirdatos(notruncafichsiexite)

2>

redirigestderr

&>

redirigestdoutystderr

2>&1

redirigestderrastdout

num1>&num2

redirigeeldescriptornum1aldescriptornum2

0<fich

redirigestdinafich

<fich

redirigestdinafich

...num<>fich

asignaeldescriptornumalficherofichparaelcomandoactual

execnum<>fich

asignaeldescriptornumalficherofichparaelrestodelassentencias

execnum>&

cierraeldescriptornum

Bucletpicodelecturadelneas
whilereadvar
do
echo$var
done<fichOrigen>fichDestino

Apuntes Bash

20-40

Redireccin local (here documents)


Eloperador<<redirigelaentradastdinparauncomandointeractivoalaslneasqueseescribana
continuacin,hastaunacadenaquemarcaelfindelectura
comandoInteractivo<<cadenaLimite
lnea1
lnea2
lnea3
...
cadenaLimite
Unautilidaddeestopuedesercomentarvariaslneas
ejemplo
:<<comentario
comentariouno
Estoesotrocomentario
comentario

Apuntes Bash

21-40

Expresiones Regulares (RegExp)


Parased,grepyawk
*

coincidencia0ndelcarcteroREprevia

coincidenciaparauncarctercualquiera(salvaretornodecarro)

principiodelnea

(dentrodecorchetes)complementoderango

findelnea

[...]

rangooconjuntoparacoincidenciadeuncarcter

marcadecarcterdeescape

\<...\>

lmitesdepalabra

Conjuntoextendidodeexpresiones(paraegrep,sedyawk)
?

coincidencia01delcarcteroREprevia

coincidencia1ndelcarcteroREprevia

\{num\}

coincidencianumdelcarcteroREprevia.Ej:[09]\{5\}equivaleacincodgitos

(...|...|...)

gruposdeREalternativos

ClasesPOSIX(admitidasenexpresionesregularesextendidas,aunqueaveceshayqueusardoble
cochete)
[:alnum:]

09azAZ

[:alpha:]

azAZ

[:blank:]

\\t(espacioytabulador)

[:cntrl:]

caracteresdecontrol

[:digit:]

09

[:graph:]

caracteresimprimiblesyespacio

[:print:]

caracteresimprimibles(excluyendoespacio)

[:lower:]

az

[:space:]

[:blank:]

[:upper:]

AZ

[:xdigit:]

09afAF(dgitosparahexadecimal)

Apuntes Bash

22-40

Expansin de nombres de fichero (globbing)


Bashnointerpretaporsmismoexpresionesregulares(seusancomoparmetrosparaalgunos
comandos),aunquesllevaacaboexpansindenombresdefichero
*

cualquierconjuntodecaractres(excluyendocomienzopor.)

cualquiercarcter

[...]

unconjuntoparacoincidenciadeuncarcter.
Ejemplo:lsld[aem]*

listatodoslosficherosydirectoriosquecomienzanpora,b,c,
d,e,m

complementodeunrango

{patron1,patron2,...}

conjuntoalternativodepatrones

Ejemplo:lsld{h?h,a*}.c

listatodoslosficherosquefinalicenpor.cyque,obien
comiencenpora,obientengandoshyenmediocualquier
carcter

Sustitucin de procesos
Enlossiguientescasos,cmdseejecutaprimero,redirigiendosusalidacomoparmetrode
sentencia,queseejecuataacontinuacin
sentencia`cmd`
sentencia$(cmd)
Ejemplo:
var=`ls`

#$varcontienelosficherosydirectoriosdeldirectorioactual

Cuandosetienecomoparmetrounfichero,sepuedenusarlasexpresiones<(cmd)o>(cmd),
dependiendosielficheroesunparametrodelecturaoescritura.
sentencia<(cmd)
sentencia>(cmd)
Ejemplo:Compararlosdirectorios/home/pepey/home/manolocondiff
diff<(ls/home/pepe)<(ls/home/manolo)
Ejemplo:Imprimirselectivamentelatabladeenrutamiento
whilereaddeswhatmaskiface;do

Apuntes Bash

23-40

echo$des$what$mask$iface
done<<(routen)

Funciones
functionnombreFuncion{
<cuerpo>
}
obien
nombreFuncion(){
<cuerpo>
}
Losparmetrosnosedefinenentrelosparntesis.Enelcuerposeinvocanpor$1,$2...(parmetros
posicionales),ysonsiempredetipoglobal.Parainvocarlafuncinlosparmetrossecolocana
continuacinseparadosporespacios(sinparntesis).
Ejemplo:
#!/bin/bash
miFun(){
var2=adios
eval$1="pepe";
}
var="hola"
miFunvar
echo$var2$var

#=>adiospepe

Sepuedendefinirvariableslocalesconlapalabrareservadalocal.
Lapalabrareservadareturn<num>modifica$?(estadoderetorno),quepuedeserconsultadopor
elscriptqueinvocalafuncin.

Apuntes Bash

24-40

Arrays
Losarraystienencomoprimerndiceel0(comoenC)
Declaracin: <nombre>[<tamano>]
obien
declarea<nombre>
Invocacin:

${<nombre>[<ndice>]}

Asignacin:

<nombre>[<ndice>]=valor

(operador${...})

Inicializacin: <nombre>=(valor1valor2...)

(parntesisyvaloresseparadosporespacios)

obien
<nombre>=([2]=valor1[7]=valor2...)
Longitud:

(inicializacinselectivaporndices)

${#<nombre>[@]}

obien
${#<nombre>[*]}
NOTA:

${#<nombre>}eslalongituddelprimerelementodelarray!

Extraccindeelementos:
${<nombre>[@]:<indiceInicial>}
${<nombre>[@]:<indiceInicial>:<numeroElementos>}
Operaciones:
readanombreVector

leeunalneadestin,ladivideenpalabrassegnIFSycadaunasela
asignaalelementocorrespondientedelvectornombreVector

Ejemplos:
Sustituirltimoelemento
miVector=(ab)
miVector[${#miVector[@]}1]="hola"#obsrvesequenonecesita((...))paraclculo
echo${miVector[@]}

#=>ahola

Eliminarltimoelemento
miVector=(ab)
unsetmiVector[${#miVector[@]}1]#obsrvesequenonecesita((...))paraclculo
echo${miVector[@]}

#=>a

Apuntes Bash

Ficheros especiales: /dev/null y /dev/zeros


/dev/nullactacomoagujeronegro
Ejemplo:eliminarlasalidaerror.
comando...2>/dev/null
/dev/zerosactaigualmente,perotambinsirveparainicializara0binario
Ejemplo:creacindeunreadeintercambioinicializadaa0binario
ddif=/dev/zeroof=$fichbs=1024count=4096
mkswap$fich4096
swapon$fich

25-40

Apuntes Bash

26-40

sed y awk
sed
Editornointeractivodelnea.Leecadalneadestdin,laprocesaylaescribeenstdout.
Sedefinenrangosconunparmetroodosseparadosporunacoma.Elparmetropuedeserun
nmero(delnea)ounpatrndecoincidencia(expresinregular).
Sislohayunparmetro,seejecutarelcomandosobretodaslaslneascoincidentes(slounasies
unnmerodelneaotodaslasquecontenganlaexpresinregular)
Sihaydosparmetros,elrangoquedadefinidoporlaprimeracoincidenciadelprimerparmetroy,
apartirdeesepunto,laprimeracoincidenciadelsegundo.
Pararealizarvariasoperacionessobreunrango(odefinirsubrangos)seusanllaves.Ejemplo:
Imprimir,deentreloscuatroprimeroarchivos,aquellosquecomiencenpora,boc.
ls1|sedn1,4{/[ac].*/p}
(NOTA:ls1(nmero1,noletral)imprimeusandounacolumna)
(NOTA2:sedimprimepordefectotodaslaslneasastdout,conindependenciadela
instruccinqueseejecute.nseusaparaeliminarestasalida)
Operaciones
[rango]/d

noimprimelaslneascoincidentesenrango

[rango]/p

noimprimelaslneascoincidentesenrango

[rango]s/regexp/cadena/

sustituyelaprimeracoincidenciaderegexpporcadena

[rango]s/regexp/cadena/g

sustituyetodaslascoincidenciasderegexpporcadena

[rango]y/conjunto1/conjunto2/

sustituyelaprimeracoincidenciadecaracteresdelprimer
conjuntoporelcorrespondienteenelsegundoconjunto
(anlogoatr)

[rango]y/conjunto1/conjunto2/g

sustituyetodaslascoincidenciasdecaracteresdelprimer
conjuntoporloscorrespondientesenelsegundoconjunto.

awk
Nosvamosalimitaralafuncionalidaddecortarencampos(msverstilquecut).
Ejemplo:Imprimirloscampos1y3delficherofichero
catfichero|awkF\t{print$1\t$3}
Siseomitelaespecificacindedelimitador(F),eldelimitadorserelespacio

Apuntes Bash

27-40

Comandos Internos
Uncomandointerno(builtin)debashnorequierearrancarunsubproceso.

IO
echo

imprimetextoenstdout
e

reconocecaracteresdeescape

noimprimeretornodecarroalfinalizar

printfcadenaFormatoparam1param2...

anlogoenC

read[var[,var2...]] leeunalneadestdinylaasignaavar.
sivarseomite,elvalorquedaen$REPLY.
siseredirigelaentrada,seleelaprimeralnea.
sihayvariasvariables,sellevaacaboladivisindelalneasegnIFSycada
camposeleasignaacadavariable.Alaltimaseleasignaelresto.
a

dividelalneaylaasignaaunarray

nohayecoenstdout

nNN leemximoNNcaracteres
p

escribetextodepregunta

tsecs estableceuntiempodeesperadesecssegundos

Sistema de Ficheros
cdnuevoDirectorio
cd
pwd

cambiapwdanuevoDirectorio
cambiaa$OLDPWD
imprime$PWD(directorioactual)

Variables
let

expresionesaritmticas

eval

expansinyconversinacomando
ej:a=echohola;eval$a#=>hola

set

sinparmetros

listalasvariablesdeentorno

$var

estableceparmetrosposicionalessegnladivisinde$var

borralosparmetrosposicionales

Apuntes Bash

28-40

`comandos`

ejecutacomandosyredirigesusalidaparaestablecerlos
parmetrosposicionales
ej:set`echohola`;echo$1#=>hola

unsetvar

borravar(pasaavalernull)

exportvar

establecevarcomovariabledeentornoparaprocesoshijos

declare/typeset

establecetipodevariable

readonly

establecetipoconstante

getopts

paraleeropciones(flagsseguidosdeguiones)
$OPTIND

indicaelparmetroposicionaldondeseencuentralasiguiente
opcin

$OPTARG

paralasopcionesquerequierenirseguidasdeunparmetro,el
valordedichoparmetro

Ejemplo:
whilegetopts:abc:dopcion

#losdospuntostrascindicanqueesa
#opcinrequiereparmetro

do
case$opcionin
a)echo$opcion

#a

;;
b)echo$opcion

#b

;;
c)echo$opcion$OPTARG

#c<valorParmetro>

;;
d)echo$opcion

#d

;;
esac
done

Comportamiento script
.(punto)|source

elpuntoylapalabrareservadasourcesonsinnimos.Sonanlogosa
#includeenC

exitn

finalizaconexitstatusn

Apuntes Bash

29-40

execcmd

finalizaelscriptactualylanzaensulugarcmd

shopt

cambiaopcionesshell

Comandos
true

pone$?a0(ok)

false

pone$?a1(error)

type[cmd]

rutacompletadelcomando(siesexterno)
a

describesieskeyword(palabraclave)obuiltin(comandointerno)osi
comandoexterno(describelarutacompleta)

Control de trabajos
fg

traeprocesoensegundoplanoaprimerplano

bg

reiniciaunprocesobloqueadoensegundoplano

wait

esperaatodoslosprocesoshijoslanzadosensegundoplano
pid

esperaalhijoconelpidindicado

%job esperaalhijoconelnmerodetareaindicado
kill

[num]

imprimelalistadeseales.
pid

mandalasealnum(pordefecto,SIGTERM)alprocesoconpid
indicado

%job mandalasealnum(pordefecto,SIGTERM)alprocesoconnmero
detareaindicado.

Apuntes Bash

30-40

Filtros externos, programas y comandos.


Bsicos.
ls[patrn]

listaficherosydirectoriosordenadosalfabticamente
a

incluyeficherosquecomienzanpor.

informacincompleta

listadirectoriosrecursivamente

ordenadosportamao

ordenadosportiempo

muestrainodes

muestraetiquetacontipodefichero

catfich[fich2...]

imprimeelcontenidodelosficherosconsecutivamenteenstdout

incluyenmerodelnea

noimprimelneasblancas

muestracaracteresnoimprimiblescon^

sihayvariaslneasblancasconsecutivas,sloimprimeuna

tac

anlogoacat,peroimprimedesdelaltimalneaalaprimera

rev

imprimelneaalneadesdeelprincipio,peroinviertecadalnea(hola>aloh)

cporigdest

copiaelficheroorigendest,truncandocasodequeexistaesteltimo
d

copialosenlacessimblicoscomotal(nolosficherosalosqueapunta)

preservapermisostantocomoseaposible

copiadirectoriosrecursivamente(copiamalFIFOsyficherosespeciales!)

copiadirectoriosrecursivamente

equivaledpR(copiarecursivarespetuosaconenlacesypermisos)

rmfich

borraficherofich
f

nopreguntaconfirmacin(buenoparascript)

directoriosrecursivamente(buenoparaborrarrbolescompletos)

rmdirdir

borradirectoriovaco

mkdirdir

creadirectorio

chmodnumOctalfich cambialospermisosdefich.Tresdgitosenoctalindicanrwxdepropietario,
grupoyresto

Apuntes Bash

31-40

{u,g,o,a}{+,}{r,w,x}fich
R
lnficheroenlace
s

ejemplo:chmodu+wfichaadepermisosdeescrituraparael
propietario

recursivamente
creaenlaceparafichero
enlacesimblico

Comandos complejos
find<dir>[name<patrn>][type<tipo>][exec<comando>\;]
buscacoincidenciaspatrnrecursivamenteendir,ficherosdetipotipo,y
ejecutaconcadaunocomando(selepuedepasar{}comoargumento
equivalentealnombredeficheroencontrado).Pordefecto,loimprime.
ejemplo:find$dirtypefatime+5execrm{}\;
estoborralosficherosregulares(f)eneldirectorio$dircontiempodeaccesomayor
quecincodasdediferenciaconlafechaactual
xargscmd

ejecutacmdconlosparmetrosqueseindicanenstdin
nN

nmerodeparmetrosquesepasarnalcomando(sisobran,seejecutade
nuevo)

ejemplo:ls|xargsn1echo
expr

listaeldirectorioenunacolumna

vaseenManipulacindeCadenas

Fecha y hora
date

fecha
u

UTC

+<formato>
touchfich

ejemplo:date+%Y%m#=>0512

creafichconlongitud0

at<fecha>[f<ficheroListaTrabajos>]siseomitef,seesperalalistadetrabajosdestdin
ejecutaunalistadetareasenlafechaindicada(mejorusarcron)
sleepnum

bloqueaelprocesonumsegundos

usleepnum

bloqueaelprocesonummicrosegundos

hwclock,clock

relojhw(accesoymodificacin)

Apuntes Bash

32-40

Procesado de texto
sort[fich[fich2]

ordenalneasficheroseimprimestdout(siseomitenficheros,stdin)

uniq

borralneasduplicadas
c

incluyeelnmerodeaparicionesdecadalnea

expand,unexpand

conviertentabuladoresaespaciosyalainversa

cut

extraccindecampos(mejorusarawk)
fnum camponum
d$delimitadores especificadelimitadoresdeseparacindecampos
cnum1num2

extraecaracteresentrelascolumnasnum1ynum2(seignora
laseparacinpordelimitadores)

pastefich1fich2...

imprimecadalneaconsistenteenlalneacorrespondientedecadafichero
separadasportabuladores

joinfich1fich2

unelneassegnelprimercampodelneaigual(elprimercampoactaa
mododeclaveprimariaenunjoinnatural)

head[nnum]fich

imprimenumlneasinicialesdefich(10pordefecto)

cnum imprimenumcaracteres
tailfich

anlogoahead,perodelfinal
f

vaimprimiendoelfinalamedidaquevacreciendoelfichero(muybueno
paraobservarficheroslog).

grepregexpficheros extraelaslneasdondeexistealgunacoincidenciaderegexpenficheros
i

ignoracaso

coincidenciapalabrascompletas

slolistalosarchivosdondehaycoincidencias,nolaslneas.

recursivamentelosdirectorios

imprimenmerosdelnea

inversin:imprimedondeNOhaycoincidencia

sloimprimeelnmerodecoincidencias

equivaleaegrep:admiteexpresionesregularesextendidas

equivaleafgrep:noseadmitenexpresionesregulares,slocoincidencias
exactas

paraficheroscomprimidos
zgrep,zegrep,zfgrep versionesparaficherogzip

Apuntes Bash

33-40

bzgrep

versinparaficherosbzip,bzip2

sed

verapartadoSedyAwk

awk

verapartadoSedyAwk

wc

cuentalneas,palabrasycaracteres
w

slopalabras

slolneas

slocaracteres

longituddelalneamslarga

trrango1rango2

sustituyeloscaracteresderango1porloscorrespondientesderango2,
leyendodestdineimprimiendoenstdout

ejemplo:

trAZaz<fichero imprimeficherotodominsculas

drango1

noimprimeloscaracteresenrango1

crango

rangoseconvierteensucomplementario(ej.caseratodoexceptoa)

nl

equivaleacatn(pintaconnmerosdelnea)salvoquenoimprimelneasen
blanco

Archivadores
tar

paraarchivostarball
c

creararchivo

extraerarchivo

deletefich

eliminarfichdelarchivo

rfich aadirfichenelarchivo
Aarch

aadirarchivotararchalarchivo

listalosficherosdelarchivo

actualiza

comparaelcontenidodelarchivoconeldeunsistemadeficheros

ficherogzip(conccomprime,conxdescomprime)

ficherobzip

rpm

RedHatPackageManager.ParainstalarpaquetesRedHat
i

instalar

Apuntes Bash
qa

34-40
listapaquetesinstalados

Compresin
gzip,gunzip(equivalegzipd)
bzip2,bunzip
compress,uncompress
sq,unsq
zip,unzip

manejalosficherosMSDOSzipgeneradosporpkzip

unarc,unarj,unrar

descomprimenlosficheroscorrepondientesMSDOS

Ficheros
file<fich>

muestraeltipodefichero

which<fich>

muestralarutacompletadelfichero

whereis<fich>

muestralarutacompletadelficheroylacorrespondientepginadelmanual

whatis<fich>

muestraayudasobreelfichero

vdir

lsl

locate,slocate

buscalarutaenunabasededatosdelsistemaactualizadaperidicamente

readlink

muestraaquficheroapuntaunenlace

strings

buscacadenasdetextoenarchivosbinarios,dedatos,dumps...

Comparar ficheros
difff1f2

comparalneaalneaypintalalneasdistintas

cmpf1f2

informadelprimerpunto(lneaybyte)dondeambosdifieren
s

noimprimenada.Slomodifica$?

Utilidades de ficheros
basenamefich

eliminadelnombrelaruta,dejandonicamenteelnombre

dirnamefich

eliminaelnombredelfichero,dejandonicamentelaruta

Apuntes Bash

35-40

sum,cksum,md5sum generadoresderesumen(digest)defichero
md5sum:128bitMessageDigestcheckSUM.
Esteprogramaimprimelos128bitenhexadecimalyelnombredelficheroalquese
leharealizadoelresumen
shed

borradosegurodefichero(imprimevariasvecesencimadeformaaleatoria)

Comunicaciones
hostnombreDNS

devuelvedireccinIP

hostdirIP

devuelveelnombreDNS(resolucininversa)

ipcalc

hdirIP

devuelveelnombreDNS(resolucininversa)

mdirIP

mscaradesubredpordefectoparadirIP

ndirIP

red(aplicandolamscarapordefecto)

nslookup

resolucinDNS

dig

resolucinDNS
x

resolucininversa

traceroute

trazadelossaltosdered

ping

pruebadeecodeconexinaunequipo

whois

resolucinDNS

finger

usuariosconectadosalsistema

Acceso Remoto
ssh,scp

terminalremotoseguro,copiadearchivossegura

wget

descarganointeractiva
c

continuarsiexisteunaporcindelarchivo(seinterrumpielproceso)

descargasrecursivas

niveldeprofundidadenladescarga(siguiendoenlaces)

ftp

transferenciadeficheros

telnet

terminalremoto(noseguro,mejorssh)

Apuntes Bash

36-40

Varios
jot,seq[<inicio>]<fin>[<incremento>]
devuelveunasecuencia(pordefecto,inicioeincrementovalen1
ssep separalasecuenciaconsep
runparts

ejecutalosscriptsdeundirectorioenordenalfabtico

yes

imprimeunasecuenciailimitadadecadenas(yespordefecto).Estilpara
programasinteractivosdondesequieraaceptartodaslaspreguntas

tee<fich>

usadoenpipe.Imprimestdinenfichademsdeenstdout

dd

transferenciasentreficheros
if

inputfile

of

outputfile

bs

blocksize

count nmerosdebloques
ejemplo:ddif=~/ficheroImagenof=/dev/fd0bs=1024count=1440;sync
generaunfloppyapartirdeunficherodeimagen
sync

libera(flush)losbuffers

Apuntes Bash

37-40

Comandos de Administracin y Sistema


Usuarios y grupos
users

equivaleawhoq(listalosusuariosconectados)

groups

equivalea$GROUPS:gruposalosqueperteneceelusuarioactual

chown,chgrp

cambianelpropietarioogrupodeunfichero

useradd,userdel,usermod

crea,borraymodificaunusuario

groupmod

modificaungrupo

id

listaeluid,gidyeuiddelprocesoactual

who

listadeusuariosconectados

listadeusuariosconectadosyprocesosasociados

logame

equivaleawhoami(nombreusuarioactual)

su<usuario>

cambiausuarioefectivo(pordefecto,root)

sudo<cmd>

ejecutacmdcomoroot(en/etc/sudoersseencuentranlosusuariosconeste
privilegio)

passwd

cambialacontraseadeunusuario

ac

estadsticasdetiempodeconexindelusuario

Terminales
tty

muestraelficheroalqueestconectadostdin

stty

configurarterminal
ejemplo:detectarpulsacinsinnecesidaddepulsarENTER
old=$(sttyg)

#guardarlosvaloresactuales

sttyicanon

#dehabilitaelmodocannico(pasaamodoraw)

pulsacion=$(ddbs=1count=12>/dev/null)
stty$old
setterm

atributosdeterminal
boldon/off
cursoroff

dmesg

listademensajesdearranque

Apuntes Bash

38-40

Informacin y estadsticas
uname

tipodesistema(habitualmenteLinux)
a

strace<cmd>

informacinextendidasobreelsistema
trazadelassealesyllamadasalsistemadecmd

nmap<host>|<red> buscapuertosabiertosenunhostounared
du

espaciousadoporficheros(pordefecto,slodirectorios)
a

incluyeficherosenlalista

totalizaalfinal

df

informacindeusodesistemasdeficheros

netstat

informacinsobrelared
r

equivalearoute.Tabladeenrutamiento

uptime

tiempodeconexindelusuarioactual

hostname

$HOSTNAME

hostid

identificadorde32bitdelamquina

Logs
logger

aadeunmensajea/var/log/messages

Procesos
ps

procesosconeuid(usuarioefectivo)igualalusuarioactual
ax

todoslosprocesos

formatoorientadoalusuario

pstree

todoslosprocesosenrbolpadrehijos(todospendendeinit)

top

listadeprocesosporordendecargadeCPU,actualizadaperidicamente
b

noactualizaciones(parascript)

nice

valordecortesadeunproceso

nohup

procesocontinaaunqueelusuarioqueloinicisedesconecte

pidof<nomProg>

pidsdeprocesosasociadosaunprogramaconnombrenomProg

fuser<fich>

procesosqueaccedenaunficheroenunmomento

Apuntes Bash

39-40

k[seal]
cron,crond

enviarlesseal(pordefecto,SIGKILL)

ejecutatareassegnlatemporizacinestablecidaen/etc/crontab

Control de procesos
runlevel

indicaelniveldeejecucindelsistema
0

parado

usuarionico

23

multiusuario

Xwindows

reboot

Red
ifconfig<interface> informacinsobreinterfacedered(pordefecto,todas)
iwconfig

configuracinparawireless

route

equivaleanetstatr.Tabladeenrutamiento

chkconfig

consultayactualizainformacinsobrelosnivelesdeejecucin
list

enumeralosserviciosarrancados

add<nomServicio>

aadenomServicioparaserarrancadoentodoslos
niveles

del<nomServicio>

borranomServicioparanoserarrancadoenningn
niveldeejecucin

tcpdump

snifferdered.Muestraenstdoutinformacinacercadelospaquetesdered
observados

Sistema de ficheros
mount<dispositivo><sistemaFicheros>

montaundispositivosobreunsistemadeficheros

montatodoslosindicadosen/etc/fstab

estableceeltipodesistemadefichero

slolectura

oloop

usadispositivosloopback(porejemploparamontararchivossobre
sistemasdeficheros)

Apuntes Bash

40-40

ejemplo:montareldirectorio/homedelamquinaacademia.orgcompartidomediantenfs
enmidirectorio/compartidoAcademia
mounttnfsacademia.org:/home/compartidoAcademia
ejemplo:montararchivoiso(imagendecd)comodirectorio
mounttiso9660oloop~/miImagenCd.iso/mnt/cdVirtual
mkfs[ttipo]

creaunsistemadeficheros

mke2fs[j]

creaunsistemadeficherosext2(siseleaadej(journaling),esext3)

mkswap

creaunsistemadeficherosswap

swapon,swapoff

activaunsistemadeficherosswap

Potrebbero piacerti anche