Está en la página 1de 14

GNU/Linux Introduccin a la Programacin ShellScript

Pedro Guevara Salgado Lus Olascoaga

Universidad de Crdoba Facultad de Ciencias Bsicas e Ingenieras Departamento de Ingeniera de Sistemas y Telecomunicaciones

.. Introduccin a la Pro/ra$acin 0)ell0cri%t


Cada 1e( que e! usuario de! sistema G"#$%inu& a9ian(a sus conocimientos en e! uso de !a s=e!! -as=B o-ser1ara que se pueden rea!i(ar 1arias operaciones a! mismo tiempo pero e&istir7 !a necesidad de introducir 1arios comandos a !a 1e( para !ograr dic=o o-4eti1o. %a programaci*n S=e!! Script permite a!macenar 1arias ordenes en un 9ic=ero para que sean interpretadas una a unaB adem7sB es apropiada para !a administraci*n de nuestro sistema. #n S=e!! Script es un arc=i1o de te&to que contiene una serie de instruccionesB !as cua!es son un con4unto de comandos que e4ecuta !a s=e!! -as= de manera ordenada. %os Scripts no necesitan ser compi!adosB para esto e&iste un programa ayudante o interprete 's=e!! -as=)B para su e4ecuci*n. 3n conc!usi*n un Script es un arc=i1o p!ano que contiene comandos y contiene instrucciones para e1a!uar a!gunas condiciones. Si queremos escri-ir un programa S=e!! Script so!o se requiere contar con un editor de te&tos comoD 1iB emacsB geditB 1im o cua!quier otro. 0 continuaci*n un e4emp!o senci!!o para crear nuestro primer ScriptB con e! o-4eti1o de entender me4or su uti!idadB a medida que 1amos aprendiendo mas de !a programaci*n S=e!!Script. +rimero que todo ac!araremos que en G"#$%inu& !os 9ic=eros no necesitan tener una e&tensi*nB pero por con1enio genera!B si queremos uti!i(aremos !a e&tensi*n .s) para identi9icar nuestros Scripts entre e! resto de arc=i1os que pertene(can a! directorio donde se guarden. 3ste primer programa o S=e!!ScriptB ser7 un senci!!o sa!udo de -ien1enida uti!i(ando e! comando ec=o. +rimero que todo a-rimos e! editor geditB de! entorno de escritorio Gnome e4ecutando e! siguiente comandoD

pedroKpedrogsDLG gedit sa!udo.s=

:am-iFn podemos acceder a! editor a tra1Fs de! menJ 6%licaciones 444 6ccesorios 444 Editor de textos y escri-imos !as !Cneas de c*digo que tendr7 nuestro ScriptB como se 1e en e! siguiente gr79ico.

+ara e4ecutar!o uti!i(o primeramente e! comando -as=B esta es !a ap!icaci*n ayudante que interpreta !os comandos de! arc=i1oB de esta manera re1iso que e! s=e!!script 9unciona correctamenteD

pedroKpedrogsDLG -as= sa!udo.s=

0=ora modi9ico !os permisos de acceso y !e asigno !os permisos de e4ecuci*n a! 9ic=eroD

pedroKpedrogsDLG c=mod M& sa!udo.s=

#na 1e( agregado e! permiso de e4ecuci*nB puedo e4ecutar!o como un programa norma!B gracias a !a ap!icaci*n ayudanteB que de9ino en !a primera !Cnea de! scriptD

pedroKpedrogsDLG .$sa!udo.s=

+ara e4ecutar!o como un programa norma! de! sistemaB escri-iendo Jnicamente su nom-re. +uedo copiar!o en e! directorio /usr/local/bin o $-inB de9inido en !a 1aria-!e de entorno G+E0:D

rootKpedrogsD$=ome$pedroQ cp sa!udo.s= $usr$!oca!$-in

#na 1e( rea!i(ados todos !os pasos anteriores puedo e4ecutar e! script como si se tratara de un comando norma! de! sistemaB simp!emente escri-iendo su nom-re en !a conso!aD

pedroKpedrogsDLG sa!udo.s= WWWWWW #" 632S A0A A3 C_2A8;0 WWWWWW `Cordia! Sa!udoa 3studiantes 3!ecti1a %i-re .... pedroKpedrogsDLG

..1 Jane+o de 5ariables

#na 1aria-!e es un nom-re a! cua! !e asignamos un determinado 1a!orB dic=o 1a!or puede ser numFrico o una cadena de caracteres y pueden ser uti!i(adas en !a programaci*n S=e!!Script. 0 continuaci*n 1eremos e4emp!os que nos enseIen a uti!i(ar !as 1aria-!es en nuestros scripts. Creamos un script que se !!ame 1arunoB que tendr7 e! siguiente c*digoD

Qa$-in$-as= num1X20 num2X5 num3X10 resu!XGR'num1Mnum3)$num2S ec=o V3! resu!tado esD Gresu!V ec=o V V e&it 0

%a primera !Cnea de9ine !a ap!icaci*n ayudanteB !a cua! e4ecutara !as instrucciones de! script. %as siguientes tres !Cneas muestran como se asigna e! 1a!or a !as 1aria-!es 'num1B num2 y num3). Se de-e tener en cuenta que no se pueden de4ar espacios entre e! nom-re de !a 1aria-!e y e! 1a!or asignado 'nom6arX1a!or). 3n !a pr*&ima !Cnea se usa !a e&presi*n GR S para rea!i(ar !a operaci*n aritmFticaB !a cua! se asigna a !a 1aria-!e resu!. 3scri-imos e! resu!tado con !a instrucci*n 'ec=o V3! resu!tado esD Gresu!V). Eay que tener en cuenta que para re9erirnos a! nom-re de una 1aria-!e =ay que co!ocar e! signo < de!ante de su nom-re 'Gnom-re6aria-!e).

0 continuaci*n pro-aremos con otro script a! que !!amaremos 1ardosB para asignar una cadena de te&to a una 1aria-!eD

Qa$-in$-as= 9rase#noXV3! nom-re que escri-i* esD V 9raseAosXV3! usuario que esta usando !a s=e!! esD V usuarioXG'<=oami) ec=o V3scri-a su e! nom-reDV read nom ec=o V V ec=o G9rase#no Gnom ec=o G9raseAos Gusuario ec=o V V e&it 0

%a primera !Cnea como se di4o anteriormente de9ine !a ap!icaci*n ayudanteB !a cua! e4ecutara !as instrucciones de! script. 3n !a segunda y tercera !Cnea se asigna una cadena de te&to a !as 1aria-!es '9rase#no y 9raseAos). %a cuarta !inea asigna a !a 1aria-!e usuarioB e! nom-re de! usuario que esta usando !a s=e!!. 3n !as pr*&imas dos !Cneas se pide que se escri-a una cadena de te&to y con e! comando read podemos capturar !a entrada de! usuario en una 1aria-!e !!amada nom. >ina!mente mandamos a mostrar e! contenido de cada una de !as 1aria-!es con !os comandosD ec)o <(raseUno <no$ y ec=o <(rase os <usuario.

3&isten una serie de 1aria-!es descritas por e! sistema y ser7n a continuaci*nD

<<E 3s e! nJmero de identi9icador de! proceso de! s=e!!. <KE 2esu!tado de !a e4ecuci*n de! comando. Cuando un programa termina su e4ecuci*n retorna un 1a!orB si este es cero '0) e! programa 9ina!i(o con F&itoB de !o contrario arro4ara un numero asociado a una causa especi9ica. <1E +ermite o-tener e! nom-re de! script que se esta e4ecutando o se e4ecuto. <1 )asta <LE Corresponde desde e! primer argumento =asta e! no1enoB con !os que se e4ecuta e! comando. <ME +ara tener e! nJmero de argumentos reci-idos como entrada.

.." Jane+o de ar/u$entos ,%arN$etros-

%os comandos que se e4ecutan en una conso!a sue!en tener argumentos o par7metrosB ta! como se muestra en e! siguiente e4emp!oD

pedroKpedrogsDLG rm -2 $=ome$pedro$prue-a

Si o-ser1amos rm es e! comando para -orrar 9ic=erosB -2 es una opci*n de! comando y !a ruta de! directorio $=ome$pedro$prue-a es un argumento de dic=o comando. 0 continuaci*n 1eremos como pueden nuestros scripts tener opciones y argumentos igua! a !os dem7s comandos de! sistema. 3scri-imos un pequeIo script con !as siguientes !Cneas de c*digoB a! cua! !!amaremos argumentosD

Qa$-in$-as= ec=o V+asar argumentos para ser procesados...V ec=o V V ec=o V3! nom-re de! Script esD G0V ec=o V3! primer argumento esD G1V ec=o V3! segundo argumento esD G2V ec=o V3! "o. de argumentos esD GQV e&it 0

AespuFs de pro-ar e! scriptB dar!e permisos de e4ecuci*n y guardar!o en e! directorio $-in * $usr$!oca!$-inB miremos !a sa!idaD

pedroKpedrogsDLG argumentos pedro 4uan +asar argumentos para ser procesados... 3! nom-re de! Script esD $usr$!oca!$-in$argumentos 3! primer argumento esD pedro 3! segundo argumento esD 4uan 3! "o. de argumentos esD 2 pedroKpedrogsDLG

+odrCamos decir que !os argumentos son 1aria-!es que ingresamos 4unto con e! comando y estas pueden ser procesadas durante !a e4ecuci*n de! script. +or esta ra(*n !a 1aria-!e G0 corresponde a! nom-re de! scriptB !a 1aria-!e G1 a! primer argumento que se pasa y !a 1aria-!e G2 a! segundo y asC sucesi1amente ta! como se menciono en e! apartado anterior.

%a 1aria-!e GQ corresponde a! numero de argumentos seguidos despuFs de! comando. Ae esta manera podemos manipu!ar cada argumento como si 9uera una 1aria-!e in dependienteB *sea G1B G2 ... Gn.

..! D%eradores de co$%aracin

Cuando escri-amos un script es necesario e1a!uar a!gJn tipo de condici*n para que este rea!ice !a operaci*n que deseamos. +or ta! moti1o tenemos !a siguiente ta-!a de operadores para comparar nJmeros y cadenas de caracteres en cua!quier instrucci*n de nuestro scriptD

-eqD gua! -neD Ai9erente -!tD 5enor que -gtD 5ayor que -!eD 5enor o igua! -geD 5ayor o igua!

..* Jane+o de condicionales ,i(-

Con !a ayuda de! condiciona! i9 podemos =acer que !os scripts e1a!Jen condiciones y se comporten de acuerdo a !as necesidades de cua!quier pro-!ema. %a estructura es !a siguienteD

i9 R 3&presi*n S@ t=en instrucci*n 1 instrucci*n 2 instrucci*n 3 instrucci*n " 9i i9 R 3&presi*n S@ t=en instrucci*n instrucci*n e!se instrucci*n instrucci*n 9i

i9 R 3&presi*n 1 S@ t=en instrucci*n instrucci*n e!i9 R 3&presi*n 2 S@ t=en instrucci*n instrucci*n e!se instrucci*n instrucci*n 9i

+ara entender me4or e! uso de !os condiciona!es escri-iremos un script que determine cua! de !os nJmeros pasados como argumentos de nuestro comando es mayor que e! otro. +ara este prop*sito creamos un script que !!amaremos compararD

Qa$-in$-as= ec=o VWWWWWW C85+0202 A8S "#5328S WWWWWWV num1XG1 num2XG2 i9 R Gnum1 -gt Gnum2 S@ t=en ec=o VGnum1 es mayor que Gnum2V e!i9 R Gnum2 -gt Gnum1 S@ t=en ec=o VGnum2 es mayor que Gnum1V e!i9 R Gnum1 -eq Gnum2 S@ t=en ec=o VGnum1 es igua! que Gnum2V e!se ec=o V"o escri-i* ningJn numeroV 9i e&it

3n !as !Cneas 3 y 4 estamos asignando !os 1a!ores de !os dos argumentos que introdu(camos a !as 1aria-!es num1 y num2 respecti1amente. 3n !a !Cnea 5 1a!idamos si e! primer argumento es mayor que e! segundo y escri-imos e! respecti1o mensa4e en !a !Cnea 6. 3n !a !Cnea / 1a!idamos si e! segundo argumento es mayor que e! primero y escri-imos e! respecti1o mensa4e en !a !Cnea .. 3n !a !Cnea 9 1a!idamos si e! primer argumento es igua! que e! segundo y escri-imos e! respecti1o mensa4e en !a !Cnea 10.

%uego e4ecutamos e! script para pro-ar!oD pedroKpedrogsDLG -as= comparar 22 11 WWWWWW C85+0202 A8S "#5328S WWWWWW

22 es mayor que 11 pedroKpedrogsDLG

2ea!icemos otro e4emp!o para !istar !os 9ic=eros de un directorio de! sistemaB siempre que este e&istaB de-emos pasar como mCnimo un argumento 'e! directorio)B entonces escri-imos !o siguiente en nuestro script !!amado !istarD

Qa$-in$-as= directorioXG1 i9 R GQ -ne 1 S@ t=en ec=o VSe necesita e! par7metro OdirectorioPV ec=o V#soD G0 OdirectorioPV e&it 9i i9 R a -e Gdirectorio S@ t=en ec=o V3! directorio Gdirectorio "o e&isteV e!se ec=o V3stos son !os 9ic=eros de! directorio GdirectorioDV !s -! Gdirectorio ec=o V V 9i e&it 0

%a !Cnea 2 captura e! argumento que se pasaB correspondiente a! directorio a !istar en !a 1aria-!e directorio. 3n !a !Cnea 3 se 1a!ida si e! comando que se escri-e '!istar)B esta acompaIado de! argumento que se requiere 'directorio)B de !o contrario en !as !Cneas 4 y 5 se escri-e e! modo de uso correcto para e! comando o script. %a !Cnea . 1a!ida si e! directorio pasado como par7metro no e&isteB si esto es 1erdad en !a !Cnea 9 se escri-e que e! directorio no e&iste. Si ocurre !o contrario a !o descrito en e! punto anterior !Cnea 10 'e!se)B entonces se escri-e un comentario en !a !Cnea 11 y se !ista e! contenido de! directorio con e! comando !s -! como se muestra en !a !Cnea 12.

... Braba+ar con el case

3n programaci*n muc=as 1eces es necesario compro-ar e! 1a!or de una 1aria-!e con case y 1a!idar si coincide con a!gJn 1a!or esperadoB esto es posi-!e so!ucionar!o con e! i9 pero cuando son muc=as !as posi-!es opciones a e1a!uar es me4or !a ayuda de caseB e1itando escri-ir tantos i9. Su estructura de uso es !a siguienteD

Qa$-in$-as= case G1aria-!e in 1a!or1) instrucci*n instrucci*n @@ 1a!or2) instrucci*n instrucci*n @@ 1a!or3) instrucci*n instrucci*n @@ W) instrucci*n instrucci*n @@ esac

+ara entender e! 9uncionamiento de! case escri-iremos un script !!amado menuop que contiene una !ista de opciones y dependiendo !a opci*n escogida e! programa e4ecutara !as instrucciones especi9icas. 3! c*digo de! script es e! siguienteD

Qa$-in$-as= ec=o VWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWV ec=o VW 53"b A3 8+C 8"3S WV ec=o VWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWV ec=o V1. 0-rir e! editor de te&tosV ec=o V2. %istar !os 9ic=ero de! directorio actua!V ec=o V3. 5ostrar sa!udo de ;ien1enidaV ec=o V4. Sa!ir de! +rogramaV ec=o VHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHV ec=o V V ec=o VSe!eccione una opci*nDV read op case Gop in 1) gedit e&it 0 @@ 2) !s -! e&it 0 @@ 3) sa!udo.s= e&it 0 @@

4) e&it 0 @@ W) ec=o V"o se!ecciono ninguna opci*nV e&it 1 @@ esac

Aesde !a !Cnea 2 =asta !a 11 son comentarios que mostraran !a apariencia de nuestro programa cuando se e4ecute. %a !Cnea 12 'read op)B permite capturar e! 1a!or de !a opci*n a e1a!uar en e! case. 3n !a !Cnea 13 'case Gop in)B se e1a!Ja dic=a opci*n y dependiendo cua! sea e! casoB e4ecutara !as instrucciones necesarias. Si toma !a opci*n 1 se e4ecutan !as !Cneas 14 a !a 1/ y se a-re e! editor de te&tos de! entorno gnome. Si toma !a opci*n 2 se e4ecutan !as !Cneas 1. a !a 21 y se !istan !os 9ic=eros de! directorio actua!. Si toma !a opci*n 3 se e4ecutan !as !Cneas 22 a !a 25 y se a-re e! programa sa!udo.s= 'este 9ue e! primer script que se =i(o). Si toma !a opci*n 4 se e4ecutan !as !Cneas 26 a !a 2. y se sa!e de! programa. Si no escogi* ninguna opci*n 1a!ida se e4ecutan !as !Cneas 29 a !a 32.

..: Oucles ,(or y C)ile-

0dem7s de !a sinta&is estudiada =asta a=ora e&isten en !a programaci*n s=e!!script -!oques de programa conocidos como -uc!es que permiten e4ecutar cic!os de comandos siempre que se cump!a una condici*n. %os -uc!es tienen una 9unci*n simi!ar a !a de cua!quier otro !engua4e de programaci*nB pero permiten que un script e4ecute ciertas *rdenes si se cump!e una condici*nB permitiendo que e! script =aga !o que e! programador desea. %os -uc!es mas uti!i(ados son e! 9or y e! <=i!e.

..:.1 Por 9or variable in lista8ele$entos@ do comandos comandos done

1aria-!e es e! nom-re que tendr7 !a 1aria-!e que contro!ara e! cic!oB esta 1aria-!e no esta precedida de G. !ista-e!ementos contiene !a !ista de e!ementos a recorrerB esta !ista puede ser una 1aria-!e que contenga dic=os e!ementos y estar7 precedida de G. %os comandos se e4ecutaran tantas 1eces dependiendo de! nJmero de e!ementos de !a !ista.

0 continuaci*n escri-iremos un s=e!!script que recorre e! directorio de tra-a4o de! usuario y muestra en panta!!a e! !istado de 9ic=eros con e&tensi*n odt.

Qa$-in$-as= ec=o V34emp!o cic!o 9or...V 9or i in GE853$W.odt@ do ec=o Gi done

3! siguiente script -orra !os arc=i1os de te&to de un determinado directorioB e! cua! ser7 pasado como par7metro por e! usuario. %os 9ic=eros se -orraran si e! usuario !o deseaD

Qa$-in$-as= ec=o V34emp!o 2 cic!o 9or...V directorioXG1 i9 R GQ -ne 1 S@ t=en ec=o VSe necesita e! par7metro OdirectorioPV ec=o V#soD OcomandoP OdirectorioPV e&it 9i 9or i in Gdirectorio$W.t&t@ do rm -i Gi done e&it 0

%a !Cnea 3 captura e! directorio dentro de! cua! se recorrer7 !a !ista de 9ic=eros. 3n !a !Cnea 4 se 1eri9ica que e! directorio en donde se -orraran !os 9ic=eros =aya sido pasado como argumento. %a !Cnea 9 recorre '9or i in Gdirectorio$W.t&t@ do) todos !os 9ic=eros con e&tensi*n .t&t que =ay dentro de! directorio. %a !Cnea 10 e!iminara cada uno de estos 9ic=erosB siempre que e! usuario con9irme su e!iminaci*n.

..:." Q)ile

8tro -uc!e uti!i(ado en !a programaci*n s=e!!script es e! cic!o <=i!eB este se uti!i(a para que se e4ecuten una serie de comandos o instrucciones si se cump!e una determinada condici*n. Su estructura de uso es !a siguienteD

<=i!e R 3&presi*n S@ do comandos comandos done

+ara entender me4or e! 9uncionamiento de! <=i!e rea!i(aremos un pequeIo script que repita 1arias 1eces un mensa4e pasado como argumento. %a cantidad de 1eces que se repetir7 e! mensa4e tam-iFn sea pasada como argumento.

Qa$-in$-as= cantidadXG1 mensa4eXG2 contadorX1 i9 R GQ -ne 2 S@ t=en ec=o VSe necesita !os par7metros OcantidadP Omensa4ePV ec=o V#soD G0 OcantidadP Omensa4ePV e&it 9i <=i!e R Gcontador -!e Gcantidad S@ do ec=o Gmensa4e contadorXce&pr Gcontador M 1c done

3n !as !Cneas 2 y 3 se capturan !os 1a!ores de !os argumentosD cantidad de 1eces a repetir y e! mensa4e respecti1amente. %a !Cnea 4 se inicia una 1aria-!e contador en unoB para contro!ar e! cic!o <=i!e. 3n !a !Cnea 5 se 1a!ida que se pasen !os dos par7metros requeridos '!a cantidad y e! mensa4e)B de !o contrario en !as !Cneas 6 y / se muestra !a 9orma de uso de! comando. %a !Cnea 10 e1a!Ja de que e! contador sea menor o igua! que !a cantidad de 1eces a repetir e! mensa4e. Si se cump!e !a condici*n anterior !a !Cnea 11 manda a escri-ir e! mensa4e tantas 1eces sea necesario. %a !Cnea 12 incrementa e! contador en uno cada 1e( que se entra a! cic!o.

..& 6ctividades

n1estigar so-re e! uso de! comando testB rea!i(ar 1arios e4emp!os 'mCnimo 5) y documentar!os. n1estigar so-re otras e&presiones para e1a!uar condiciona!esB di9erentes a !as e&puestas en e! modu!o ':ipos de compro-aciones entre 9ic=eros y directorios). 3studiar e! uso de 9unciones en !a programaci*n s=e!!scriptB rea!i(ar des e4emp!os pr7cticos y documentar!os. 3studiar e! cic!o unti! rea!i(ar dos e4emp!os pr7cticos y documentar!os. 3!a-orar un pequeIo s=e!! scriptB que permita sa-er cua!es son !os ser1icios e4ecutados dentro de un determinado run!e1e!. 2ea!i(ar un script que !iste !a in9ormaci*n de !os arc=i1os contenidos en !os directorios de tra-a4o de cada uno de !os usuarios norma!es creados en !e sistema. 3scri-ir un s=e!!script que a!macFn en un 9ic=ero p!ano !a in9ormaci*n re9erente a todos !os paquetes insta!ados en tu sistema.

También podría gustarte