Está en la página 1de 15

Introduccion a Shell Script

Antonio Becerro Martinez. 2005.

INTRODUCCION A

S !"" SCRI#T

Introduccion a Shell Script

Antonio Becerro Martinez. 2005.

$. INTRODUCCION.
Shell que significa en Castellano concha es el interprete de comandos del sistema. Es una interfaz de texto de altas prestaciones, que sirve fundamentalmente para tres cosas: administrar el sistema operativo, lanzar aplicaciones (e interactuar con ellas) como entorno de programaci!n. "nu#$inux se administra editando ficheros configuraci!n. Como norma general, se encuentran en: %etc, dentro de direcciones espec%ficos para cada aplicaci!n. &or e'emplo, "ilo ($inux $oader) se configura editando el fichero: %etc%lilo%lilo.con&. $os programas, se e'ecutan escri(iendo el nom(re del e'ecuta(le, si este se encuentra en el path (ruta por defecto para los mismos, normalmente: %u'r%(in) o escri(iendo el nom(re del e'ecuta(le precedido por: .%, desde el directorio donde se encuentren. )odo esto, es (ien conocido por cualquier usuario de Shell. *o tan conocidas son sus capacidades como entorno de programaci!n. $os programas de Shell no necesitan compilarse. $a Shell los interpreta linea a linea. +e les suele conocer como Shell' Script' pueden ser desde sencillas ordenes hasta comple'as series de instrucciones para el arranque del propio sistema operativo. En general, tienen una sintaxis (astante clara suponen un (uen punto de partida para dar los primeros pasos en el mundo de la programaci!n. ,o no so ning-n experto programador. .e hecho, esto aprendiendo ahora mismo. Es un mundo apasionante, pero un poco oscuro a veces. Entonces, si no so un especialista en el tema, /Como me atrevo a escri(ir so(re ello0 1ueno, tengo mis motivos. 2er3n, me considero un (uen comunicador, creo que mi forma de contar las cosas puede ser -til a los dem3s. Ello me anima a preparar tutoriales como estos, a pu(licarlos en 4nternet.

2. )Co*o 'e edita un 'cript de Shell+


El enfoque de este tra(a'o es pr3ctico. En lugar de mostrar el funcionamiento de cada comando, vamos a ver e'ercicios concretos que sean apropiados para la administraci!n de nuestro sistema. $os 'cript' de Shell son extremadamente -tiles. Es (uena idea escri(ir aquellas necesidades que tengamos luego editar 'cript' que realicen este tra(a'o por nosotros. 5 estas alturas, a es hora de preguntarse que es exactamente un 'cript. Es un archivo de texto, que contiene una serie de comandos para 'hell, que el sistema e'ecuta ordenadamente, de arri(a a(a'o. &ara editarlos, tan solo hace falta un editor de textos, como !*ac', o ,i. +e guardan con extensi!n: .'h se e'ecutan desde la Shell mediante el comando: 'h no*(re de 'cript.'h. $os 'cript', se comportan de igual manera que los comandos de la 'hell. 1ueno, a va siendo hora de que pasemos a la pr3ctica. El primer paso para tra(a'ar con una Shell es e'ecutar una 'hell. Esto que parece una perogrullada tiene su raz!n de ser. En algunas distri(uciones de -nu%"inu. mu enfocadas al usuario fin3l, la 'hell est3 (astante escondida. *ormalmente, se llama: 6onsole, terminal, terminal de 7, o algo similar. +e suele incluir en el men- 8 de /de, en el apartado sistema. 9tra opci!n es utilizar una consola virtual. :ediante: Ctrl alt &$, o &2, o &0 hasta &1, podemos utilizar entornos 'hell, sin interfaz gr3fica. Es importante sa(er, que los programas (asados en el entorno 2, l!gicamente no funcionan. $a Shell m3s utilizada en -nu%"inu. es Ba'h, aunque existen otras, como 3'h o C Shell. Este tutorial est3 enfocado a Ba'h.

0. #ASAMOS A "A ACCION.


+upongamos que evitamos el arranque autom3tico del escritorio gr3fico. Esto es (astante simple. +olamente ha que cam(iar de nom(re o comentar el fichero: 4d*, 3d* o .d*. Esto depende de nuestro sistema. /d* est3 vinculado a /de, -d* a -no*e, 2d* a cualquiera de ellos. $os programas que inician el sistema operativo son tam(i;n scripts. +e encuentran en el directorio: %etc%init.d. <echo esto, el sistema arranca en modo de texto. para lanzar el servidor gr3fico: 'tart. ruta al e'critorio 55 6 n7*ero de ni8el de e9ecuci:n

Introduccion a Shell Script

Antonio Becerro Martinez. 2005.

5parte de /de -no*e, son (astante utilizados ;indo;*a3er, ice;* enli4hte*ent, entre otros. +i una vez e'ecutado el escritorio, a(andonamos la sesi!n, volvemos a la linea de comandos. .esde aqu%, podemos preparar nuestros 'cript'. 2eamos algunas ideas. &odr%amos hacer uno que mostrase un men- para e'ecutar el escritorio que queramos. 2eamos, lo podemos llamar e'critorio.'h. $o editamos, este es el contenido:

clear echo <M!NU= echo <>>>>= echo <$. Iniciar echo <2. Iniciar echo <0. Iniciar echo <@. Iniciar

3de.= -no*e.= ?indo;*a3er.= enli4hte*ent.=

echo <!li4e opci:n= read entrada$ ca'e Aentrada$ in $B 'tart. 3de CC 2B 'tart. 4no*e CC 0B 'tart. ;indo;*a3er CC @B 'tart. enli4hte*ent CC e'ac

, ahora veamos como funciona. El comando clear (primera linea), limpia la pantalla. El comando echo muestra lo que escri(amos a continuaci!n entre comillas do(les. $as linea dos a la ocho dan lugar a un men-, que sirve para escoger el escritorio que queramos lanzar. &ara ello, el usuario tiene que escri(ir un numero, entre = >. 5 continuaci!n, vemos el comando read. Este, lee la respuesta del usuario, la guarda como la varia(le: entrada$. 5hora se utiliza la estructura ca'e. Esta, permite realizar de una forma (astante sencilla, varios i& anidados. $a estructura i& &i, consiste en evaluar condiciones: si tal cosa es de tal forma, entonces haz esto. En caso contrario esto otro. :ediante ca'e nos ahorramos (astante texto. $a sintaxis es la que se puede ver en el e'emplo. Empieza por ca'e A8aria(le in. $uego, en la siguiente linea: $B Es para referirse al valor: $ , que en este caso es iniciar /de. El resto son las entradas para los dem3s escritorios. Cada una de ellas termina o(ligatoriamente con los caracteres: CC ?inalmente, para cerrar la estructura se escri(e: e'acD que no es otra cosa sino ca'e, escrito al rev;s. *o es mu complicado. .e esta forma, se pueden hacer muchas cosas. &or e'emplo, un script que nos sirva para apagar la m3quina, re(otarla, etc. .e hecho, si solemos utilizar mucho la consola, unos cuantos scripts de este tipo, nos evitar3 el estar escri(iendo siempre lo mismo. 2eamos otro e'ercicio diferente. Es una calculadora. Es mu simple, solo sa(e sumar, restar, multiplicar dividir. &ero tam(i;n es mu f3cil de escri(ir de utilizar. 4lustra (ien el uso de varia(les.

Introduccion a Shell Script

Antonio Becerro Martinez. 2005.

echo <'oE -nu%Cal= echo <Tu *e dice' lo Fue Fuiere' calcular E Eo te doE el re'ultado= echo <Introduce el pri*er 8alor= read 8alor$ echo < Introduce el operador. #uede' e'co4er entre6 G 5 H %= read operador echo < Introduce el 'e4undo 8alor= read 8alor2 echo <!l re'ultado e'6= 'leep 2 e.pr A8alor$ Aoperador A8alor2 'leep $ echo <4racia' por 'u tie*poI= $as tres primeras lineas son, por as% decirlo, de presentaci!n. En la cuarta linea ha un read, llamado 8alor$. Es una varia(le, que va a introducir desde el teclado el usuario. .espu;s, es necesario sa(er que operaci!n se quiere realizar (suma, resta, multiplicaci!n o divisi!n). &ara ello ha un nuevo read, llamado operador para que el usuario pueda escoger. .espu;s, tenemos el segundo valor de la operaci!n llamado 8alor2. El comando 'leep lo -nico que hace es esperar un poco de tiempo para que de la sensaci!n de que el programa esta pensando poco antes de dar el resultado. $a operaci!n matem3tica propiamente dicha se realiza en la linea ==. El comando es: e.pr. Como puede verse, opera directamente con los valores que ha an tomado las tres varia(les implicadas. Este tipo de estructura, es mu f3cil de comprender (por eso forma parte del e'ercicio) pero no es completamente funcional. Como veremos m3s tarde, ha otras formas de programar una calculadora. El ma or pro(lema que presenta esta, es la operaci!n multiplicaci!n. El s%m(olo: H no es v3lido, porque est3 reservado para el sistema operativo. 2eamos ahora otro e'emplo. +e llama: tri8ial.'h, es el t%pico 'uego de preguntas respuestas. +olo tiene dos preguntas, pero es suficiente para ver como funciona. Est3 construido, so(re la estructura i& &i. El programa conoce la respuesta correcta eval-a la respuesta del usuario. +i acierta una pregunta se lo dice pasa con la siguiente pregunta. +i acierta todas las preguntas le da el titulo de magister del universo. JI%(in%(a'h clear echo KBien8enido' a -nuTri8ial.K 'leep 2 echo KSoE el tLpico 9ue4o de pre4unta' E re'pue'ta'.K 'leep 2 echo KSi acierta' toda' la' pre4unta'D te concedere el titulo de *a4i'ter del uni8er'o.K echo K)Co*o 'e lla*a(a el ulti*o e*perador Ro*ano de occidenteD claudioD teodo'io o ro*ulo.K read re'pue'ta$ i& te't Are'pue'ta$ > ro*ulo then echo KRe'pue'ta correcta.K el'e echo K"o 'ientoD la re'pue'ta correcta e'6 ro*ulo.K &i 'leep 2 echo K#a'e*o' a la 'i4uiente pre4unta. )MuN cNle(re &ilo'o&o -rie4o tu8: por di'cipulo a Ale9andro Ma4noD plat:nD ari'totele' o zenon+K read re'pue'ta2 i& te't Are'pue'ta2 > ari'totele'

Introduccion a Shell Script

Antonio Becerro Martinez. 2005.

then echo Kre'pue'ta correcta.K el'e echo K"o 'ientoD la re'pue'ta correcta e'6 Ari'totele'.K &i i& te't Are'pue'ta$ > ro*ulo te't Are'pue'ta2 > ari'totele' then echo K!re' un peFueOo *a4i'ter del uni8er'o.K &i Como puede apreciarse, la estructura i& &i, la estructura ca'e hacen cosas (astante similares. $levan a ca(o una acci!n en funci!n de un valor del usuario. En general, ca'e se considera una evoluci!n de i& &i, a que permite el mismo resultado, escri(iendo menos c!digo. +in em(argo, el uso de i& &i es perfectamente correcto. $a evaluaci!n de las condiciones se realiza mediante el comando te't. Este, comprue(a si la varia(le es igual al valor que le ha amos indicado. &or supuesto, te't puede hacer muchas m3s cosas, como comparar si un n-mero es ma or o menor que otro, etc. 5l fin3l del script, se eval-an dos varia(les a la vez. Es necesario escri(irlas en dos lineas diferentes. 5 continuaci!n, vamos a hacer algo diferente. +e trata de una especie de mini(ase de datos para nuestra colecci!n particular de pel%culas. +e llama 8ideo(a'e.'h. $o primero que tenemos que hacer es un script que genere un fichero de texto que contenga nom(res de directores, nom(res de peliculas, a@o de producci!n productora. Cada linea son los datos de una pel%cula. 2iene a ser lo que se llama un registro. *uestro segundo script, es un cliente de este fichero de texto, con capacidad para realizar (usquedas seg-n varios criterios. 2eamos el c!digo: J%(in%'h clear echo K,ID!OBAS!K echo K>>>>>>>>>K echo K!SCO-!R CRIT!RIO D! BUSMU!DAK echo K$.5 Bu'Fueda por director.K echo K2.5 Bu'Fueda por productora.K echo K0.5 Bu'Fueda por titulo.K echo K@.5 Bu'Fueda por aOo.K echo K5.5 Salir.K read criterio ca'e Acriterio in $B echo K)Cual e' el no*(re del director+K read director 4rep Adirector %ho*e%antonio%(a'ePpeli'%(a'e2.t.t read pau'a %ho*e%antonio%(a'h5'cript%peli(u'.'h CC 2B echo K)Cual e' el no*(re de la productora+K read productora 4rep Aproductora %ho*e%antonio%(a'ePpeli'%(a'e2.t.t read pau'a %ho*e%antonio%(a'h5'cript%peli(u'.'h CC 0B echo K)Cual e' el titulo de la pelicula+K read titulo

Introduccion a Shell Script

Antonio Becerro Martinez. 2005.

4rep Atitulo %ho*e%antonio%(a'ePpeli'%(a'e2.t.t read pau'a %ho*e%antonio%(a'h5'cript%peli(u'.'h CC @B echo K!n Fue aOo 'e produ9o la pelicula+K read ano 4rep Aano %ho*e%antonio%(a'ePpeli'%(a'e2.t.t read pau'a %ho*e%antonio%(a'h5'cript%peli(u'.'h CC 5B CC e'ac $a estructura es ca'e. 5 estas alturas, a estamos familiarizados con ella. 4ntroduce un par de elementos nuevos. El primero de ellos, es que desde este script se llama a un script de nom(re: peli(u'.'h, es decir se llama a si mismo. Esto es, para que cuando el usuario pulse la tecla intro se vuelva a repetir el programa. &roduce la sensaci!n de volver atr3s. $a varia(le pau'a, detiene el programa hasta que el usuario pulse alguna tecla. &or -ltimo, la opci!n 'alir se logra escri(iendo: 5B, sin a@adir ning-n tipo de orden. El sistema interpreta que el script ha terminado nos devuelve a la linea de comandos. $as (usquedas se llevan a ca(o so(re un fichero de texto simple llamado: (a'e2.t.t, el comando para filtrar la informaci!n es: 4rep. 2eamos ahora el fichero de texto que contiene los datos: heroe' &uera de or(ita $QQQ ti* allen drea*;or3' 'i*one 2002 al pacino ne; line produccion' ni8el $0 $QQQ roland e**erich colu*(ia el tercer ho*(re $Q@R carol reed circulo 9uan nadie $Q@5 &ran3 capra circulo Como se ha comentado antes, este fichero se crea pelin.'h. 2eamos su contenido: edita mediante otro script. +e llama

J%(in%'h clear echo <,ID!OBAS!= echo < >>>>>>>>= echo <NU!,O R!-ISTRO !N CURSO= 'leep 2 echo <5DIR!CTOR6= read director 'leep $ echo <5#!"ICU"A6= read pelicula 'leep $ echo <5ASO D! #RODUCCION6= read ano 'leep $ echo <5#RODUCTORA6= read productora echo <Adirector Apelicula Aano Aproductora= TT%ho*e%antonio%(a'ePpeli'%(a'e2.t.t $a parte interesante es la -ltima linea. An echo envia por la salida las cuatro varia(les en uso. :ediante: TT la salida no va a la pantalla (salida estandar) sino a un fichero llamado: (a'e2.t.t. En caso de no existir, lo crea. +i existe a@ade los datos nuevos. +i utilizamos: T sustituir%amos la informaci!n antigua por la nueva.

Introduccion a Shell Script

Antonio Becerro Martinez. 2005.

.e la misma manera, podr%amos escri(ir 'cript' para organizar una (i(lioteca, reci(os (ancarios o cualquier otra cosa. )am(i;n se podr%a ampliar este programa con m3s opciones. &or e'emplo, una entrada para un c!digo alfanum;rico la dotar%a de verdadera funcionalidad. :ediante este c!digo podemos identificar los o('etos que queramos clasificar localizarlos f%sicamente. *o he incluido m3s opciones porque no aportan nada m3s, desde el punto de vista did3ctico. Ana vez que se comprende la t;cnica, cualquiera puede escri(ir sus propios programas. Continuemos adelante. 5l principio hemos visto una calculadora, capaz de sumar, restar dividir correctamente, pero que falla(a con la multiplicaci!n. 2eamos ahora el c!digo de una calculadora capaz de operar correctamente tam(i;n con la multiplicaci!n. echo JJJJJJJJJJJJJJJJJJJJJJJJ echo J O"AI SOU -NUCA" ,2 J echo JJJJJJJJJJJJJJJJJJJJJJJJ echo echo Introduce el pri*er 8alor6 read 8alor$ echo KIntroduce operadorD puede ele4ir 'u*a GD re'ta 5D *ultiplicacion H E di8i'ion %.K read ope echo Introduce 'e4undo 8alor6 read 8alor2 re'ultado>Ve.pr A8alor$ KAopeK A8alor2V echo Re'ultado>Are'ultado $a estructura ha cam(iado un poco. $a idea es la misma, pero est3 me'or construida. $a -ltima linea muestra en pantalla la varia(le: re'ultado. Esta, esta asignada en el propio programa se corresponde con: Ve.pr A8alor$ <Aope= A8alor2V. El pro(lema de la multiplicaci!n se resuelve f3cilmente inclu endo la varia(le operador entre comillas do(les. $a estructura de este 'cript es interesante, a que se puede aplicar a otro tipo de operaciones simplemente cam(iando el valor de la varia(le re'ultado.

@. !2#R!SION!S R!-U"AR!S.
$as expresiones regulares son patrones que afectan a una cadena de caracteres. +on mu -tiles para seleccionar con gran precisi!n elementos de un fichero. +e utilizan mucho en los scripts, son la parte m3s dif%cil de entender. 2eamos un e'emplo. $o primero, creamos un fichero de texto llamado e.pre con el siguiente contenido: co'a' ""U8ia (icho li(ro (icha ult ca'a lanaa li*o co'a' cor(ata li(ro' *adre a'no tipo talon ani*al her*ano 8i'ion &al'o (arco 8erdu4o nido al*a o'o ti4re

5hora vamos utilizar 4rep para (uscar la cadena cosas dentro del fichero expre. 2eamos, escri(imos: 4rep co'a' e.pre. 9(tenemos: li(ro co'a' co'a' ca'a tipo li(ro' &al'o ani*al o'o 8erdu4o

Como el fichero e.pre tiene cinco columnas, cuando 4rep selecciona la cadena cosas, nos muestra las filas completas en las que se encuentre. 5hora vamos a hacer uso de expresiones regulares para lograr selecciones m3s precisas. <Wco'a'= hace que 4rep (usque la linea que

Introduccion a Shell Script

Antonio Becerro Martinez. 2005

comience por cosas. Esto es consecuencia del metacaracter: W. $as expresiones regulares son precisamente caracteres especiales (llamados metacaracteres) que influ en de una manera particular
en la cadena de texto que referencian. <agamos la prue(a. Escri(imos: 4rep <Wco'a'= e.pre. El resultado es:

co'a'

ca'a

li(ro'

ani*al

8erdu4o

Es importante no escri(ir ning-n car3cter previo a la primera columna de pala(ras al editar el fichero e.pre. *o es correcto utilizar la (arra espaciadora ni ta(uladores. 4rep los tomar3 por caracteres en este caso, como ninguna linea empieza por cosas no mostrar3 resultado alguno. 2eamos otro e'emplo. +upongamos que queremos filtrar todos los su(directorios del directorio: %u'r. &ara ello escri(imos: 9(tenemos: dr;.r5.r5. $0 dr;.r5.r5. 2$ dr;.r;.r;. Y dr;.r;.r;. 2 dr;.r5.r5. 2 dr;.r;.r;. 5 dr;.r;.r;. QR dr;.r;.r;. $20 dr;.r;.r;. $2 dr;.r5.r5. @ dr;.r;.r;. 2 dr;.r5.r5. $00 dr;.r;.r;. 5 l' 5la %u'r X 4rep Wd root root 01Y Sep $5 00651 . root root @YY Sep 2@ $@600 .. root root $Q2 Au4 $0 $R6$5 2$$R1 root root 5@1Q1 Sep $5 206$0 (in root root $0Y@ Sep $5 0$62R 4a*e' root root $20 Au4 $0 $R60Y i5Y15'u'e5linu. root root $2Y1@ Sep Y 00602 include root root @Q1@Y Sep $5 206$0 li( root root 00@ Sep R 0065R local root root Q1 Sep $5 00651 *an root root QQY@ Sep Y 00600 '(in root root 0@1@ Sep $5 206$5 'hare root root $10 Au4 21 0060Q 'rc

El comando 4rep ha seleccionado -nicamente aquellos ficheros que comienzan por la letra d. $a primera columna, comenzando por la izquierda son los permisos. El primer car3cter indica el tipo de fichero. d significa directorio. 1ien, esta forma de proceder va a ser nuestra estrategia para administrar el sistema. filtraremos los ficheros de configuraci!n del sistema en (usca de la informaci!n que necesitemos para despu;s hacer algo con ella. Continuemos. +i escri(imos:
4rep <W...A= e.pre

9(tenemos: ult En este caso, hemos seleccionado solamente aquella linea que empiece por una pala(ra de tres caracteres. +i la expresi!n regular fuese: W....A, entonces seleccionariamos pala(ras de cuatro caracteres. 1asta, con escri(ir tantos puntos como caracteres tenga la pala(ra que queramos seleccionar. 9tro e'emplo: 4rep <Wo'Zoa[= e.pre 9(tenemos: (icho (icha li*o cor(ata a'no talon 8i'ion (arco al*a ti4re

-rep ha seleccionado las lineas que contienen (icho o (icha. 2eamos otras posi(ilidades: 4rep <ZA5\[ ZA5\[H= e.pre 9(tenemos:
""U8ia lanaa *adre her*ano nido

Introduccion a Shell Script

Antonio Becerro Martinez. 2005

$o que 4rep ha hecho ahora es seleccionar la -nica linea que empieza por consonantes. 5hora vamos a (uscar las lineas que terminan por el car3cter: e. Escri(imos: 9(tenemos: (icha 4rep ]eA] e.pre cor(ata talon (arco ti4re

&or -ltimo, pro(emos a (uscar aquella linea donde se repite el car3cter: a. Escri(imos: 4rep <a^_2D^`= e.pre 9(tenemos: ""U8ia lanaa *adre her*ano nido

Como no se trata de pro(ar todas cada una de las expresiones, he preparado el siguiente listado. Es (uena idea practicar utilizando cada una de las expresiones ver el resultado.
#ATRON (icho W(icho (ichoA W(ichoA (ichZao[ (iZWaeiou[o (i.o W....A W^. WZW.[ (ichoA <H(icho=H Za5z[ Za5z[H ZW05Qa5z[ ZA5\a5z[ ZA.5[ (icho X (icha b' X ar(Bu'to ^c(i (i^T a^_2D^` R!#R!S!NTA "a cadena (icho "a cadena (icho al co*ienzo de una linea "a cadena (icho al &inal de una linea "a cadena (icho &or*ando una 7nica linea "a' cadena' (icha E (icho "a tercera letra no e' una 8ocal *in7'cula "a tercera letra e' cualFuier caracter CualFuier linea Fue conten4a cuatro caractere' cuale'Fuiera CualFuier linea Fue co*ience por un punto CualFuier linea Fue no co*ience por un punto (ichoD (icho'D (icho''D (icho'''D etc (icho con o 'in co*illa' do(le' Una o *a' letra' *in7'cula' CualFuier caracter Fue no 'ea ni n7*ero ni letra *aE7'cula. CualFuier letraD 'ea *aE7'cula o *in7'cula. CualFuier caracter Fue 'ea AD . o 5 Una de la' pala(ra' (icho o (icha "a' pala(ra' 'u'to o ar(u'to CualFuier pala(ra Fue co*ience por (i CualFuier pala(ra Fue ter*ine en (i Do' o *a' ae' en una *i'*a &ila.

Introduccion a Shell Script

Antonio Becerro Martinez. 2005

Como se ve, el mundo de las expresiones regulares no es tan oscuro como parece al principio. :3s adelante, intentaremos aplicar nuestros nuevos conocimientos a la edici!n de scripts. 5hora vamos a ver otros temas.

1. "OS dI"TROS.
$os comandos que sirven para filtrar informaci!n se denominan filtros. Ano de los m3s conocidos es 4rep. +in em(argo, existen otros. 2amos a ver en primer lugar el filtro cut. &ermite cortar columnas o campos de un fichero de texto enviarlos a la salida est3ndar. $a opci!n 5c es para cortar columnas 5& para cortar campos. $a opci!n 5d se utiliza para indicar que car3cter hace de separaci!n entre campos, es decir el delimitador. +i no se indica nada, el delimitador es el ta(ulador. &ara que cut sepa que campos o columnas tiene que cortar ha que indicarlo con una lista. Esta lista tiene tres formatos posi(les: $52 $5 $D 2 Ca*po' o colu*na' de $ a 2. Ca*po o colu*na $ toda la linea. Ca*po' o colu*na' $ E 2.

2eamos unos e'emplos. &ara ello editamos un fichero de texto llamado amigos con el siguiente contenido: ANT601Y0$$2 S!261RYQ@50 COM60@5@02R ,IM6@5022RY DAO65@1YQ00 Escri(imos en la consola: cut 5c $50 a*i4o' 9(tenemos: ANT S!2 COM ,IM DAO

Es decir, hemos cortado las tres primeras letras de cada linea del fichero personas. 5hora vamos a intentar algo un poco m3s dif%cil. 2amos a cortar campos individuales. El car3cter delimitador del fichero amigos, es 6, +i escri(imos: cut 5d ]6] 5& $ a*i4o' 9(tenemos: ANT S!2 COM ,IM DAO

9 sea el primer campo. +i escri(imos: cut 5d ]6] 5& 2 a*i4o' 9(tenemos el segundo campo: 01Y0$$2 1RYQ@50 0@5@02R @5022RY 5@1YQ00

Introduccion a Shell Script

Antonio Becerro Martinez. 2005

5hora vamos a ver un e'emplo m3s -til. 2amos a filtrar el fichero passBd, que se encuentra en # etc vamos a seleccionar los usuarios que utilizan el interprete de ordenes (ash. $o primero para ver el contenido del fichero escri(imos: cat %etc%pa'';d. 9(tenemos: root6.60606root6%root6%(in%(a'h (in6.6$6$6(in6%(in6%(in%(a'h dae*on6.62626Dae*on6%'(in6%(in%(a'h lp6.6@6R6#rintin4 dae*on6%8ar%'pool%lpd6%(in%(a'h *ail6.6Y6$26Mailer dae*on6%8ar%'pool%client*Fueue6%(in%&al'e ne;'6.6Q6$06Ne;' 'E'te*6%etc%ne;'6%(in%(a'h uucp6.6$06$@6Uni.5to5Uni. Co#E 'E'te*6%etc%uucp6%(in%(a'h 4a*e'6.6$26$006-a*e' account6%8ar%4a*e'6%(in%(a'h *an6.6$06126Manual pa4e' 8ie;er6%8ar%cache%*an6%(in%(a'h at6.6256256Batch 9o(' dae*on6%8ar%'pool%at9o('6%(in%(a'h ;;;run6.6006Y6??? dae*on apache6%8ar%li(%;;;run6%(in%&al'e &tp6.6@06@Q6dT# account6%'r8%&tp6%(in%(a'h 4d*6.6506$56-no*e Di'plaE Mana4er dae*on6%8ar%li(%4d*6%(in%(a'h po't&i.6.65$65$6#o't&i. Dae*on6%8ar%'pool%po't&i.6%(in%&al'e ''hd6.6R$6156SS dae*on6%8ar%li(%''hd6%(in%&al'e ntp6.6R@61550@6NT# dae*on6%8ar%li(%ntp6%(in%&al'e 8dr6.6$006006,ideo Di'3 Recorder6%8ar%'pool%8ideo6%(in%&al'e no(odE6.61550@6155006no(odE6%8ar%li(%no(odE6%(in%(a'h antonio6.6$00$606antonio (ecerro *artinez6%ho*e%antonio6%(in%'h Escri(imos: cat %etc%pa'';d X 4rep (a'h X cut 5d ]6] 5& $DR 9(tenemos: root6%(in%(a'h (in6%(in%(a'h dae*on6%(in%(a'h lp6%(in%(a'h ne;'6%(in%(a'h uucp6%(in%(a'h 4a*e'6%(in%(a'h *an6%(in%(a'h at6%(in%(a'h &tp6%(in%(a'h 4d*6%(in%(a'h no(odE6%(in%(a'h

<emos utilizado, en primer lugar cat para pasar el fichero pa'';d por la salida est3ndar, depu;s mediante un pipeline (pipe o tu(er%a) lo hemos filtrado con 4rep seleccionando solamente aquellas lineas que contienen la cadena (ash. ?inalmente, nos quedamos con los campos = C. .e'amos cut, pasamos al comando tr. Es un filtro que se emplea como traductor, generalmente para convertir de min-sculas a ma -sculas viceversa. $o primero editamos un fichero de texto de nom(re gnu que tenga el siguiente contenido: -nu%linu. e' un 'i'te*a operati8o MU! #R!S!NTA UN -RAN dUTURO Escri(imos en la consola: 9(tenemos: tr ZA5\[ Za5z[ c 4nu 4nu%linu. e' un 'i'te*a operati8o Fue pre'enta un 4ran &uturo

Introduccion a Shell Script

Antonio Becerro Martinez. 2005

<emos convertido todos los caracteres entre 5 si queremos hacer lo contrario escri(imos: 9(tenemos: tr Za5z[ ZA5\[ c 4nu

D en sus hom!logos entre a

z. $!gicamente,

-NU%"INU2 !S UN SIST!MA O#!RATI,O MU! #R!S!NTA UN -RAN dUTURO 5hora vamos a ver como sustituir caracteres. Escri(imos: tr ZA5\[ 4 c 4nu 9(tenemos: 4nu%linu. e' un 'i'te*a operati8o 444 44444444 44 4444 444444 )odas las ma -sculas han sido sutituidas por el car3cter 4. *aturalmente, podemos modificar el rango de caracteres implicados si en lugar de utilizar: ZA5\[ utilizamos: ZA5M[, es decir que solo se van a convertir en el car3cter 4, las ma -sculas entre la A la M. &ro(emos: tr ZA5M[ 4 c 4nu 9(tenemos: 4nu%linu. e' un 'i'te*a operati8o MU4 #R4S4NT4 UN 4R4N 4UTURO

)am(i;n podemos utilizar las t;cnicas de sustituci!n para eliminar determinados caracteres. +e utiliza la opci!n 5d. 2eamos: tr 5d ZA5\[ c 4nu 9(tenemos: nu%linu. e' un 'i'te*a operati8o

Como era de esperar, todas las consonantes han sido eliminadas. Conviene se@alar, que tr no afecta para nada al fichero de entrada, que como recordaremos se llama gnu. $o toma, lo procesa, env%a el resultado al monitor. El original no es modificado en ning-n caso. &or -ltimo, vamos a ver el filtro tee. )iene como misi!n (ifurcar la salida de una orden enviando los resultados simultaneamente a la salida est3ndar (monitor) a un fichero. +u sintaxis es: tee Z5a[ archi8ob'B $a opci!n 5a significa append o sea a@adir. Con esta opci!n la salida a un fichero no so(reescri(e la informaci!n sino que la a@ade al final del fichero de texto. Este filtro es -til en algunos casos.

R. BUC"!S.
5parte de lo que hemos visto hasta ahora, existen tres construcciones conocidas como iteraciones o (ucles. +on ;hile, until &or. +irven para e'ecutar ciclos de comandos si se cumple una condici!n. Empecemos en primer lugar por ;hile. +u sintaxis es: ;hile condicion do orden done

Introduccion a Shell Script

Antonio Becerro Martinez. 2005

;hile eval-a la condici!n. +i esta es correcta, entonces e'ecuta el o los comandos especificados. +i no es correcta, salta a la siguiente orden que ha a despu;s de la pala(ra reservada done. Correcto, quiere decir que el c!digo devuelto por la condici!n sea E. Es conveniente rese@ar que en este caso se vuelve a iterar, es decir que se repite la construcci!n ;hile. &or ello nos referimos a este tipo de construcciones como iteraciones, sentencias de control de flu'o o (ucles. 2eamos un e'emplo: JJJJJJJJJJJJJJJJJJJJJJJJJJJ J #RO-RAMA D! !e!M#"O J J D! "A S!NT!NCIA D! CONTRO" J J D! d"UeO ? I"! J JJJJJJJJJJJJJJJJJJJJJJJJJJJ a>@2 ;hile Z Aa 5le 50 [ do echo Contador > Aa a>Ve.pr Aa G $V done $a varia(le a tiene el valor @2. +i se cumple la condici!n: Z Aa 5le 50 [, se e'ecuta el comando echo Contador > Aa. Es decir, si a es menor o igual que 50 (cosa que es evidentemente cierta) muestra en la pantalla Contador > @2. &ero no termina ah% la cosa. Como la condici!n ha sido cumplida, ;hile vuelve a iterar. .e(a'o del comando echo ha una linea para dar una valor nuevo a la varia(le a. +e trata de: a>Ve.pr Aa G $V, que simplemente quiere decir que el valor de a sea incrementado en una unidad. 1ueno, ;hile har3 precisamente esto hasta llegar a 50. El programa terminar3 a que cualquier n-mero ma or no cumplir3 la condici!n dada, por que no existe ning-n otro comando despu;s de done. $a construcci!n until es mu similar a ;hile. .e hecho, comparte la misma sintaxis. $a diferencia consiste en que el c!digo de retorno de la condici!n de(e ser falso (distinto de E) para iterar. +i es verdadero saltar3 a el comando que va a a continuaci!n de done. 2eamos un e'emplo: JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ J #RO-RAMA D! !e!M#"O J J D! "A S!NT!NCIA D! CONTRO" D! J J d"UeO UNTI" J JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ until Z Aa > halQ000 [ do echo KBien8enido' a #ro4ra*a$. #ara continuar e'cri(e contra'eOaK read a done echo Kcontra'eOa correctaK $a condici!n es que la varia(le a sea igual a la cadena halQ000. En caso contrario, vuelve a iterar. +i el usuario escri(e la cadena correcta, entonces la sentencia de control de flu'o termina. En este caso, continua con el comando echo <contra'eOa correcta= a que se encuentra despu;s de done. ?inalmente, vamos a estudiar el (ucle &or. +u sintaxis es como sigue: &or 8aria(le in li'ta do ordene' done Es diferente a ;hile until. En la construcci!n &or no ha que cumplir ninguna condici!n. &orD

Introduccion a Shell Script

Antonio Becerro Martinez. 2005

simplemente utiliza como varia(le la primera cadena de una lista, e'ecutando las ordenes que le indiquemos a continuaci!n. En la siguiente iteraci!n utilizar3 la siguiente cadena de la lista, as% sucesivamente. 2eamos un e'emplo: JJJJJJJJJJJJJJJJJJJJJJJJJJJ J #RO-RAMA D! !e!M#"O J J D! "A S!NT!NCIA D! CONTRO" D! J J d"UeO dOR J JJJJJJJJJJJJJJJJJJJJJJJJJJJ &or a in antonio e8a &ernado 9o'e(a 9ulio do *ail Aa c te.to.t.t done El programa es (astante sencillo.)oma nom(res de usuarios del sistema que se le proporcionan en una lista (antonio e8a &ernando 9o'e(a 9ulio) les env%a un correo utilizando como contenido del mismo el fichero te.to.t.t. , esto es todo. Espero que todo esto le sirva para dar sus primeros pasos en el mundo de la programaci!n, como a m% mismo me est3 sirviendo.

5ntonio 1ecerro :artinez (ecerrodelinuxF ahoo.es 5lco(endas GEEH

IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII +e permite la copia del articulo completo en cualquier formato, a sea sin 3nimo de lucro o con fines comerciales, siempre cuando no se modifique su contenido, se respete su autor%a esta nota se mantenga.

También podría gustarte