Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Bash Scripting 2011
Bash Scripting 2011
Qu vamos a ver?
El intrprete de comandos: Comandos bsicos. Tuberas. Comandos de iltrado. B!s"uedas # e$presiones regulares. %tros comandos. &cripting. %ptimi'aciones.
7ntrprete de comandos
&hells
E$isten muchas shells: sh( csh( )sh( bash( etc. Entorno de traba*o:
Case sensitive: sensible a ma#!sculas +EC,% -. echo/. &int$is: comando arg0 arg1... argn &i un programa no est en el 23T,: .4programa 2rompt:
Comandos bsicos
ls: listar. man: manual. p8d: directorio actual. cd: cambia de directorio. echo: escribe te$to. cat: muestra ichero. more: paginador. ile: muestra tipo de ichero.
touch: crea ichero. rm: borra ichero. m)dir: crea directorio. rmdir: borra directorio. cp: copia icheros. mv: mueve icheros. ln: crea enlaces. date: muestra la echa.
Tuberas
A: &TB7: o entrada estndar 0: &TB%9T o salida estndar 1: &TBECC o salida de error 7maginmonos una re inera:
Detes crudo por A +&TB7:/( consigues gasolina por 0 +&TB%9T/ # bastantes residuos por el >desag?e@ 1 +&TBECC/.
Tuberas
Tuberas
tr a A < fichero.txt
Tuberas:
cat fichero.txt | tr a A
Comandos de iltrado
sort: ordena lneas de icheros de te$to. tr: reempla'a un carcter por otro. head: muestra las : primeras lneas de un ichero. tail: muestra las : !ltimas lneas de un ichero. 8c: cuenta lneas( palabras o caracteres. cut: permite >cortar@ columnas de un ichero en unciIn de un carcter.
B!s"uedas # rege$ps
Comandos de b!s"ueda:
ind: busca icheros. grep: busca patrones en icheros. sed: modi ica patrones. a8): busca # modi ica campos en icheros.
B!s"uedas # rege$ps
grep: busca una cadena o patrIn en icheros # muestra las lneas "ue la contienen.
grep [opciones] patron [fich1 fich2...]
Metacaracteres vlidos:
. (un carcter cualquiera) * (cero o ms ocurrencias del carcter anterior) ^ (principio de lnea) $ (fin de lnea) [a-f] (cualquier carcter del rango) \< \> (principio y fin de palabra)
B!s"uedas # rege$ps
%pciones tpicas:
<c escribe sIlo el n!mero de ocurrencias encontradas. <i ignora ma#!sculas # min!sculas. <l escribe sIlo los nombres de ichero donde ha encontrado el patrIn. <s opera en silencio( sIlo saca mensa*es de error. <v escribe lneas "ue :% contienen el patrIn <8 trata el patrIn como una palabra entera.
B!s"uedas # rege$ps
2atrones
. (un carcter cualquiera) * (cero o ms ocurrencias del carcter anterior) ^ (principio de lnea) $ (fin de lnea) [a-f] (cualquier carcter del rango) [-AD] (caracteres '-', 'A', 'D') [^56] (todos los caracteres excepto '5' y '6') [5^6] (caracteres '5', '^', '6') [[:alnum:]] (todos los caracteres alfanumricos)
B!s"uedas # rege$ps
grep '[345]\{2,4\}' fichero grep 'r\{2\}' fichero (busca dos 'r' seguidas) grep 'er\{2,\}' fichero
expresion_regular \{exact\}
expresion_regular \{min,\}
(busca lineas con al menos dos caracteres 'r' precedidos por una 'e').
B!s"uedas # rege$ps
3lmacena los caracteres "ue concuerdan con la e$presion regular en un registro. &e pueden utili'ar hasta J registros en una e$presiIn regular 2ara re erenciar los registros utili'amos K0 a KJ
E*emplo: listamos lneas con dos caracteres idnticos seguidos: grep LK+.K/K0L ichero
B!s"uedas # rege$ps
Qu es a8)?
38) es un lengua*e de programaciIn utili'ado para manipular te$to. Mos datos se manipulan como palabras +campos/ dentro de una lnea +registro/. 9n comando a8) consiste en un patrn # una accin "ue comprende una o ms sentencias.
B!s"uedas # rege$ps
Qu es a8)?
a8) comprueba cada registro de los icheros indicados en busca de coincidencias con el patrInN si se encuentra alguna se reali'a la acciIn especi icada. a8) puede actuar como iltro tras un pipe o obtener los datos de la entrada estndar si no se especi ica ning!n ichero.
B!s"uedas # rege$ps
E$presiones regulares
Mas e$presiones regulares "uedan delimitadas con el carcter L4L +e*: 4$4/ 3dems de todas las comentadas hasta ahora( a8) puede utili'ar:
4$O4 9na o ms ocurrencias de $ 4$?4 9na o ninguna ocurrencia de $ 4$H#4 Tanto $ como # +string/ 3grupa una cadena para usar con O o ?
B!s"uedas # rege$ps
&entencia print
Es de las ms utili'adas
Referenciando campos:
$0: Registro completo $1: Primer campo del registro $2: Segundo campo del registro ...
B!s"uedas # rege$ps
Ds uncionalidades:
B!s"uedas # rege$ps
Ds uncionalidades:
B!s"uedas # rege$ps
find [path] opciones -name nombre -type (d|f|l|s|...) -maxdepth n -mindepth n -mtime n -exec comando \; ({} indica el fichero)
Opciones tpicas:
9suarios # grupos
useradd: aFade un usuario en el sistema. userdel: elimina un usuario del sistema. usermod: modi ica las propiedades de un usuario. groupadd: aFade un grupo de usuarios en el sistema. groupdel: elimina un grupo del sistema. groupmod: modi ica las propiedades de un grupo. pass8d: modi ica la contraseFa de un usuario. gpass8d: aFade un usuario a un grupo.
2ropietarios # permisos
chmod: modi ica el modo de acceso de un ichero. cho8n: modi ica el propietario de un ichero. chgrp: modi ica el grupo propietario de un ichero. 8ho: muestra usuarios conectados al sistema. 8hoami: muestra el nombre de usuario del usuario actual. id: muestra las propiedades del usuario # grupo actuales. su: cambio de usuario actual.
TestiIn de procesos
top: muestra in ormaciIn de procesador( procesos # memoria. ps: muestra la lista de procesos "ue se estn e*ecutando. pstree: ps en orma de rbol. pgrep: ps O grep. pido : muestra el 27B del proceso "ue solicitemos. )ill: enva una seFal a un proceso +27B/. )illall: enva una seFal a un proceso +nombre/.
TestiIn de procesos
Q: al lan'ar un proceso lo lan'a en segundo plano. bg: manda un proceso a e*ecutarse en segundo plano. g: lleva un proceso a e*ecutarse en primer plano. ctrlO': interrumpe un proceso # lo suspende. ctrlOc: interrumpe un proceso # lo para +seFal U7MM/. *obs: muestra las tareas de la sesiIn actual en segundo plano. nohup: hace "ue un proceso cuelgue de init # redirige su salida a nohup.out. diso8n: hace un nohup de un proceso #a en e*ecuciIn.
Comandos de bac)up
g'ip: compresor estndar b'ip1: compresor ms pontente pero ms lento tar: empa"uetador de icheros +mu# !til/ 'cat: cat sobre archivos comprimidos 'more: more sobre archivos comprimidos 'grep: grep sobre archivos comprimidos
&hell &cripts
&cript . TuiIn. Tareas repetitivas se pueden agrupar en un guiIn # e*ecutarse automticamente +Batch 2rocessing/.
Es sencillo e*ecutar V comandos para crear un bu'In de correo. :o lo es tanto para crear 1A.AAA bu'ones. Es sencillo hacer un bucle "ue se repita 1A.AAA veces N</
&hell &cripts
Con 6- en la primera lnea indicamos "uin debera interpretar el resto de comandos +4bin4sh/. 2osteriormente escribimos los comandos separados por saltos de lnea.
&hell &cripts
Rariables:
9na variable tiene un nombre # un valor( # sirve para dotar de dinamismo a nuestros scripts:
&hell &cripts
Rariables de entorno:
3l arrancar una shell( #a ha# muchas variables de inidas( son las variables de entorno.
2odemos ver su valor con el comando >env@. &i se de ine una variable en una shell( sIlo tiene valor en esa shell( a no ser "ue se e$porte a los programas >hi*o@. export USUARIO=joaquin &i desde esa shell lan'amos un script u otro programa( la variable 9&93C7% contendr >*oa"uin@.
&hell &cripts
Rariables: interactividad
Es posible leer del usuario el valor de una variable( dotando a nuestros scripts de interactividad. cat hola.sh
#!/bin/sh echo Dime tu nombre: read NOMBRE echo Hola $NOMBRE, encantado de conocerte
&hell &cripts
Rariables: argumentos
Es posible pasar los parmetros o argumentos "ue "ueramos # utili'arlos dentro del script.
cat nombre.sh
&hell &cripts
Rariables: argumentos
basename 5A: nombre del script. dirname 5A: ruta al nombre del script. 50 ahora vale lo "ue vala 51( 51 lo "ue vala 5=( etc. 5A no cambia.
&hell &cripts
56: n!mero de argumentos "ue nos han pasado. 5\: todos los argumentos. >5\@ . >50 51 5=...@ 5]: todos los argumentos. >5]@ . >50@ >51@ >5=@... 5^: comando anteriormente e*ecutado. 55: 27B del propio proceso shell.
&hell &cripts
&hell &cripts
(ojo espacios!)
Ejercicio: Obtener el mes anterior al actual con una sola sentencia expr ;-)
&hell &cripts
Condiciones: test I _ `
test >5:%DBCE@ .. >auan@ test 5B7:EC% <e" 0AAA <le/ test < 4etc4pass8d Dodi ican el valor de 5?
+..( -.( E( G( E.( G./ +<e"( <ne( <gt( <lt( <ge( +< ( <d( <M( <r( <8( <$/
&hell &cripts
&hell &cripts
i . E*emplo:
if test $NOMBRE == Juan then echo Hola Juanin, qu tal? elif test $NOMBRE == Pedro then echo Pedreteee, cunto tiempo! else echo No te conozco fi
&hell &cripts
&hell &cripts
case. E*emplo:
case $NOMBRE in Juan) echo Hola Juanin, qu tal? ;; Pedro) echo Pedro, cunto tiempo! ;; *) echo no te conozco; esac
&hell &cripts
&hell &cripts
8hile. E*emplo:
N=1 while [ $N -lt 100 ] do echo Repito, ya voy $N veces N=$(expr $N + 1) sleep 1 # Esperamos 1 segundo done
&hell &cripts
&hell &cripts
N=1 until [ $N -ge 100 ] do echo Repito, ya voy $N veces N=$(expr $N + 1) done
&hell &cripts
or: e*ecuciIn repetitiva asignando a una variable de control valores de una lista. &inta$is:
&hell &cripts
or. E*emplo: for N in Sopa Arroz Pan de ajo do echo Hoy comemos $N done
&hell &cripts
or: la M7&T3 de ine la separaciIn de cada elemento por el valor de la variable 7W& +"ue por de ecto vale \t\n/. E*emplo:
IFS=: echo Directorios en el PATH... for DIR in $PATH do echo $DIR done
&hell &cripts
for N in 1 2 3 4 5 6 7 8 9 10 do echo N ahora vale $N done for N in $(seq 10) do echo N ahora vale $N done
&hell &cripts
select: muestra las opciones especi icadas en M7&T3 # asigna a R3C73BME la opciIn escogida. &inta$is:
&hell &cripts
select: E*emplo:
select OPCION in Doner Kebab Pizza do case $OPCION in Doner Kebab) echo Mmmm... break;; Pizza) echo Slurppp! break;; *) echo No s qu es eso esac done
&hell &cripts
unction:
2odemos modulari'ar los scripts agrupando tareas en unciones. Es necesario "ue una unciIn est de inida 3:TE& de "ue sea llamada. Bentro de una unciIn( 50( 51( 5=( etc. sern los parmetros pasados a la unciIn( no al script en s.
&hell &cripts
unction. E*emplo: #!/bin/sh function suma { echo $(expr $1 + $2) } suma 4 6 suma 3 234
&hell &cripts
source( .
Con source o con >.@ podemos incluir el cIdigo de otro script en el nuestro:
#!/bin/sh source funciones.sh # ah se define suma suma 1 3 suma 12 12312
%ptimi'aciones
$(ls) *
for F in $(ls) == for F in * cat fichero | grep patron grep patron < fichero echo $PATH | cut -d: -f1 cut -d: -f1 <<<$PATH : EE es lo mismo "ue touch. E*: :>> fichero while : ; do echo siempre; done
%ptimi'aciones
%ptimi'aciones
%ptimi'aciones
Blo"ues:
%ptimi'aciones
Blo"ues:
+ /: subshells.
(sleep 3 && echo fin shell1) & (sleep 5 && echo fin shell2) &
Ce erencias
B3&, 2rogramming < 7ntroduction ,%c<T%: http:44888.tldp.org4,%cT%4Bash<2rog<7ntro<,%cT%.html 3dvanced Bash<&cripting Tuide: http:44888.tldp.org4MB24abs4html4 Tua de 3dministraciIn de Cedes con Minu$: http:44es.tldp.org4Danuales<MuC3&4T3CM14garl14 9:7; &ecurit#: http:44es.tldp.org4Danuales<MuC3&4&ET9:7;4uni$sec<1.0<html Uernel ,%cT%: http:44888.tldp.org4,%cT%4Uernel<,%cT%.html
Todas las imgenes son propiedad de sus respectivos dueos*( el resto del contenido est licenciado ba*o Creative Commons by-sa 3.0
* Universidad de Deusto