unix - laurel.datsi.fi.upm.es · es decir, deb e tener abierta una cuen ta en el sistema. usuario t...

38

Upload: tranhanh

Post on 10-Feb-2019

215 views

Category:

Documents


0 download

TRANSCRIPT

UNIX, Shell y S riptsFran is o Rosales Gar ��aDepartamento de Arquite tura y Te nolog��a de Sistemas Inform�ati osFa ultad de Inform�ati aUniversidad Polit�e ni a de MadridFebrero 2003

�Indi e General1 El Entorno UNIX 12 Uso del Shell 153 Programa i�on de S ripts 27

i

ii

Cap��tulo 1El Entorno UNIXEn este apartado intentaremos ha ernos una idea de u�ales son las ara ter��sti as y los on eptos b�asi os que se manejan en el entorno UNIX.>Qu�e es UNIX?Es sin lugar a dudas uno de los sistemas operativos m�as extensos y potentes que hay. Susprin ipales virtudes son:Multiusuario En una m�aquinaUNIX pueden estar trabajando simult�aneamente mu hosusuarios. Cada usuario tendr�a la impresi�on de que el sistema es suyo en ex lusiva.Multipro eso Cada usuario puede estar eje utando simult�aneamente mu hos pro esos.Cada pro eso se eje uta independientemente de los dem�as omo si fuese el �uni oen el sistema. Todos los pro esos de todos los usuarios son eje utados on urren-temente sobre la misma m�aquina, de forma que sus eje u iones avanzan de formaindependiente. Pero tambi�en podr�an omuni arse entre si.Multiplataforma El n�u leo del sistema operativo UNIX est�a es rito en m�as de un 95%en lenguaje C. Gra ias a ello ha sido portado a m�aquinas de todos los tama~nos yarquite turas. Los programas desarrollados para una m�aquina UNIX pueden serllevados a ualquier otra f�a ilmente.<C�omo es UNIX!Desde el punto de vista del usuario, hay que resaltar las siguientes ara ter��sti as:Sensible al tipo de letra. Distingue entre may�us ulas y min�us ulas . No es lo mismo !!unix que Unix que UNIX.Fi heros de on�gura i�on textuales. Para fa ilitar su edi i�on sin ne esidad de herra-mientas so�sti adas.Para usuarios NO torpes. Otros Sistemas Operativos someten ada a i�on \peligrosa"(Ej. rees ribir un � hero) al onsentimiento del usuario.En UNIX, por defe to, se entiende que el usuario sabe lo que quiere, y lo que elusuario pide, se ha e, sea peligroso o no.

1

Lo borrado es irre uperable. Es un ejemplo del punto anterior. Hay que tener uida-do. Como veremos m�as adelante existe la posibilidad de que el usuario se proteja des�� mismo en este tipo de mandatos.<C�omo es Linux!POSIX. Es una versi�on de UNIX que umple el est�andar Portable Operating SystemInterfa e.Libre. Se distribuye bajo li en ia GNU, lo que impli a que se debe distribuir on todosu �odigo fuente, para que si alguien lo desea, lo pueda modi� ar a su antojo one esidad.Evolu iona. Por ser libre, est�a en permanente desarrollo y mejora, por programadoresvoluntarios de todo el mundo.Gratis. Al in re��ble pre io de 0 euros.ContenidosEn este ap��tulo se presenta el entorno UNIX desde el punto de vista de un usuario delmismo. El objetivo es que el usuario se sienta m��nimamente onfortable en UNIX.Veremos, en este orden:1. Usuarios y Grupos2. Sesi�on3. Mandatos4. Pro esos5. �Arbol de Fi heros6. Des riptores de � hero7. Int�erprete de mandatos8. Con�gura i�on9. Xwindows

2

1.1 Usuarios y GruposPara que una persona pueda utilizar un determinado sistema UNIX debe haber sidopreviamente dado de alta omo usuario del mismo, es de ir, debe tener abierta una uentaen el sistema.UsuarioTodo usuario registrado en el sistema se identi� a ante �el on un nombre de usuario (loginname) que es �uni o. Cada uenta est�a protegida por una ontrase~na (password) que elusuario ha de introdu ir para a eder a su uenta. Internamente el sistema identi� a a ada usuario on un n�umero �uni o denominado UID (User Identi�er).GrupoPara que la administra i�on de los usuarios sea m�as �omoda estos son organizados engrupos. Al igual que los usuarios, los grupos est�an identi� ados en el sistema por unnombre y por un n�umero (GID) �uni os. Cada usuario pertene e al menos a un grupo.PrivilegiosLas opera iones que un usuario podr�a realizar en el sistema estar�an delimitadas en fun i�onde su identidad, esto es por la pareja UID-GID, as�� omo por los permisos de a eso al� hero o re urso al que desee a eder.SuperusuarioDe entre todos los usuarios, existe uno, denominado \superusuario" o root que es el en- argado de administrar y on�gurar el sistema.Es aquel que tiene omo UID el n�umero 0 ( ero). El superusuario no tiene restri ionesde ning�un tipo. Puede ha er y desha er lo que quiera, ver modi� ar o borrar a su antojo.Ser superusuario es una labor deli ada y de responsabilidad.La administra i�on de un sistema UNIX es ompleja y exige amplios ono imientos delmismo.1.2 Sesi�onUna sesi�on es el periodo de tiempo que un usuario est�a utilizando el sistema. Como sabe-mos, ada usuario tiene una uenta que estar�a protegida por una ontrase~na o password.Ahora siga los siguientes pasos para entrar y salir del sistema.�� ��login: myname T 1.1Para entrar al sistema introduz a su nombre de usuario o login name.�� ��passwd: ******* T 1.2Si ya ha puesto una ontrase~na deber�a usted introdu irla ahora, para que el sistemaveri�que que usted es quien di e ser.

3

�� ��prompt> T 1.3Al entrar en el sistema se arran a un programa que nos servir�a de int�erprete demandatos. Nos presenta un mensaje de apremio.�� ��logoutT 1.4 Para terminar una sesi�on deber�a usar este mandato o bien �� ��exit .1.3 MandatosTodos los sistemas operativos tienen mandatos que fa ilitan el uso del sistema. Su formageneral es: mandato [op iones℄ [argumentos...℄Los ampos est�an separados por uno o m�as espa ios. Algo entre or hetes [ ℄ esop ional. La nota i�on ... indi a uno o varios. Las op iones generalmente omenzar�anpor un - (menos).A lo largo de esta presenta i�on se ir�a soli itando que usted reali e numerosaspr�a ti as, observe el omportamiento del sistema o onteste preguntas...p Ahora debe usted entrar en el sistema omo se indi �o en el apartado anterior.T 1.5 !! Observe que UNIX distingue entre may�us ulas y min�us ulas.T 1.6 ? Conteste, >sabr��a usted terminar la sesi�on?T 1.7 ...en mu hos asos se sugerir�a que eje ute iertos mandatos...�� ��who am iT 1.8 Obtenga informa i�on sobre usted mismo.�� ��dateT 1.9 Conoz a la fe ha y hora.�� �� alT 1.10 Visuali e un alendario del mes a tual....se dar�an m�as expli a iones para ampliar sus ono imientos...La mayor��a de los mandatos re ono en las op iones -h o --help omo peti i�on deayuda sobre �el mismo....y se soli itar�a que reali e m�as pra ti as...�� ��date -hT 1.11 Aprenda que op iones admite este mandato.? >Qu�e d��a de la semana fue el d��a en que usted na i�o?T 1.12 ...as�� mismo, durante esta presenta i�on iremos introdu iendo un resumen dealgunos mandatos que se onsideran m�as importantes.Si desea informa i�on ompleta sobre algo, deber�a usar el mandato man.

4

man [what℄ Manual PagesVisualiza una opia ele tr�oni a de los manuales del sistema. Es seguro que nos asaltar�aa menudo la duda de omo usar orre tamente alg�un mandato o ualquier otra osa.Deberemos onsultar el manual.Los manuales se dividen en se iones:1 Mandatos (Ej. sh, man, at).2 Llamadas al sistema (Ej. open, umask).3 Fun iones de librer��a (Ej. printf, fopen).4 Dispositivos (Ej. null).5 Formato de � heros (Ej. passwd).6 Juegos.7 Mis el�anea.8 Mandatos de Administra i�on del Sistema.�� ��man -h T 1.13Busque ayuda breve sobre el mandato man.�� ��man man T 1.14Lea la do umenta i�on ompleta del mandato man.�� ��man [1-8℄ intro T 1.15En aso de on i to, si ejemplo existe en diferentes se iones la misma hoja demanual, deber�a expli itar la se i�on en la que bus ar.La hoja intro de ada se i�on informa de los ontenidos de la misma.Algunos mandatos �utilesA ontinua i�on se itan algunos de los mu h��simos mandatos disponibles en UNIX. Sine esita m�as informa i�on sobre alguno de ellos, onsulte el manual.pwd Visualiza i�on del dire torio a tual de trabajo. d Cambio del dire torio a tual de trabajo.mkdir Crea i�on de dire torios.rmdir Elimina i�on de dire torios.e ho Muestra el texto que se indique por su salida.env Muestra el valor de las variables de entorno.ls Listado del ontenido de un dire torio. at Visualiza i�on del ontenido de un � hero.5

pi o Un sen illo editor de � heros.vi El editor de � heros m�as extendido en entorno UNIX.ema s El editor de � heros m�as potente disponible.rm Elimina i�on de � hero. p Copiar � heros.mv Mover o renombrar � heros.w Contar las palabras y l��neas de un � hero.grep B�usqueda de una palabra en un texto.sort Ordena i�on de � heros.find B�usqueda de � heros que umplen determinadas ara ter��sti as. hmod Cambio de los permisos de un � hero.sleep Simplemente espera que trans urra los segundos indi ados.id Muestra la identidad del usuario que lo eje uta.1.4 Pro esosCando usted invo a un mandato, el � hero eje utable del mismo nombre es eje utado.Todo programa en eje u i�on es un pro eso. Todo pro eso de identi� a por un n�umero�uni o en el sistema, denominado PID (Pro ess Identi�er).Con urren iaEn todo momento, ada pro eso a tivo de ada usuario del sistema, esta ompitiendo onlos dem�as por eje utar. El sistema operativo es el que mar a a qui�en le to a el turno en ada momento.Todo esto su ede muy muy deprisa, on el resultado de que ada pro eso avanza en sueje u i�on sin notar la presen ia de los dem�as, omo si fuera el �uni o pro eso del sistema,pero en realidad todos est�an avanzando simult�aneamente. A esta idea se le denomina on urren ia.�� ��psT 1.16 Permite ver una instant�anea de los pro esos en el sistema. Admite multitud deop iones.�� ��topT 1.17 Permite observar la a tividad de los pro esos en el sistema on ierta periodi idad.

6

Jerarqu��a de pro esosTodos los pro esos del sistema se organizan en una jerarqu��a padre{hijo(s) que tiene omoan estro �ultimo al pro eso denominado init uyo PID es 1.Todo pro eso tiene tambi�en aso iado un n�umero que identi� a a su pro eso padre, esel PPID.�� ��pstree T 1.18Permite ver una instant�anea de la jerarqu��a de pro esos en el sistema. Admitemultitud de op iones.1.5 �Arbol de Fi herosExiste una �uni a estru tura jer�arqui a de nombres de � hero, es de ir, no existe el on epto de \unidad". En UNIX los dispositivos se \montan".Dire torio ra��zLa ra��z de la jer�arqui a de nombres es el denominado dire torio ra��z y se denota on el ar�a ter / (dividido por) no por el \ (ba kslash).Dire torio HOMENada m�as entrar en el sistema, el usuario es situado en el denominado dire torio HOMEde su uenta.Cada uenta tiene su propio HOME, que es reado por el administrador del sistemaal abrirle la uenta al usuario.Este dire torio pertene e al usuario orrespondiente. Por debajo de �el podr�a rear uantos subdire torios o � heros quiera.Tipos de objetoPara averiguar qu�e es o qu�e hay ontenido bajo un nombre de � hero puede usar el mandatofile.Existen (b�asi amente) 3 tipos de \objetos", a saber:Dire torios: Es un ontenedor uyas entradas se re�eren a otros � heros y/o dire torios.El uso de los dire torios da lugar a la jerarqu��a de nombres. Todo dire torio ontienesiempre las siguientes dos entradas:. (punto) Se re�ere al mismo dire torio que la ontiene... (punto punto) Se re�ere al dire torio padre de este, es de ir, a su padre en lajerarqu��a.Fi heros normales: Est�an ontenidos en los dire torios. Contienen se uen ias de bytesque podr��an ser �odigos de programas, datos, texto, un fuente en C o ualquier otra osa.

7

Fi heros espe iales: Son omo � heros normales, pero no ontienen datos, sino que sonel interfaz de a eso a los dispositivos perif�eri os tales omo impresoras, dis os, elrat�on, et , et .Cada dispositivo, existente o posible, se haya representado por un � hero espe ialque se en uentra bajo el dire torio /dev.UNIX trata estos � heros espe iales (y por lo tanto a los dispositivos) exa tamenteigual que trata a los � heros normales, de forma y manera que para los programas,los unos y los otros son indistinguibles.pwd Print Working Dire toryPermite averiguar u�al es el dire torio en que nos en ontramos en ada momento, al u�aldenominamos dire torio a tual de trabajo.�� ��pwdT 1.19 Visuali e su dire torio a tual de trabajo.!! Observe que se muestra el amino absoluto (desde el dire torio ra��z) de su dire torioT 1.20 HOME.!! Observe que las omponente de un amino se separan entre s�� on el ar�a ter /T 1.21 (dividido por) y no por el \ (ba kslash). d [dir℄ Change Dire toryCon este mandato ambiamos de un dire torio a otro. Admite omo argumento el nombredel dire torio al que queremos ambiar.Existen tres asos espe iales que son de utilidad.�� �� d Invo ado sin argumento, nos devuelve dire tamente a nuestro HOME.�� �� d .El dire torio de nombre . (punto) ha e referen ia siempre al dire torio a tual detrabajo. Realmente no nos va a ambiar de dire torio.�� ��pwdT 1.22 Observe que permane emos en el mismo dire torio.Como veremos m�as adelante, el dire torio . resulta �util para referirnos a � herosque \est�an aqu�� mismo".�� �� d ..Todo dire torio ontiene siempre una entrada de nombre .. (punto punto) que ha ereferen ia siempre al dire torio padre del dire torio a tual.�� ��pwdT 1.23 Observe que as endemos al dire torio padre.

8

�� �� d ..T 1.24 Repita la opera i�on hasta llegar al ra��z.�� ��pwdT 1.25 Observe que no se puede ir m�as all�a del dire torio ra��z.�� �� d T 1.26>A qu�e dire torio hemos ido?ls [-opt℄ [dirs...℄ List Dire tory ContentsEste mandato nos presenta informa i�on sobre los � heros y dire torios ontenidos en el(os)dire torio(s) espe i� ado(s).Si no se indi a ning�un dire torio, informa sobre el dire torio a tual de trabajo.Este mandato admite antidad de op iones que on�guran la informa i�on obtenida.Entre ellas las m�as usadas son, por este orden:-l Formato \largo". Una l��nea por � hero o dire torio on los ampos: permisos, propie-tario, grupo, tama~no, fe ha y nombre.-a Informa tambi�en sobre los nombres que omienzan por . (punto), que normalmenteno se muestran.-R Des iende re ursivamente por ada subdire torio en ontrado informando sobre sus ontenidos.Si ne esita explorar m�as op iones, onsulte el manual.�� ��ls T 1.27Observe que su dire torio HOME pare e estar va ��o.�� ��ls -a T 1.28Pero no lo est�a. Al menos siempre apare er�a las entradas . y ...!! Es posible que aparez an otros nombres que on �� ��ls no vio. T 1.29Este mandato evita mostrar aquellas entradas que omienzan por el ar�a ter punto.Podr��amos de ir que los � heros o dire torios uyo nombre omienza por un puntoest�an "o ultos", pero se pueden ver si usamos la op i�on -a.Suelen ser � heros (o dire torios) de on�gura i�on.�� ��ls -la T 1.30Si queremos ono er los detalles del "objeto\ aso iado a ada entrada de un dire to-rio, usaremos la op i�on -l.? >A qui�en pertene en los � heros que hay en su HOME? T 1.31>Qu�e tama~no tienen?>Cu�ando fueron modi� ados por �ultima vez?�� ��ls /home T 1.32Observe el HOME de otros usuarios de su sistema.Inspe ione el ontenido de sus dire torios.9

�� ��ls -la / T 1.33Muestra el \tron o" del �arbol de nombres.�� ��man 7 hierT 1.34 Lea una des rip i�on ompleta de la jerarqu��a del sistema de � heros UNIX que est�ausando.�� ��ls -??? /binT 1.35 Obtenga el ontenido del dire torio /bin ordenado de menor a mayor el tama~no delos � heros.!! Observe que apare e un � hero de nombre ls. Ese es el � hero que usted est�aT 1.36 eje utando ada vez que usa el mandato ls.Esos � heros son s�olo una parte de los usted podr��a eje utar, hay mu hos m�as.? >A qui�en pertene e el � hero /bin/ls?T 1.37 !! Sus permisos permiten que usted lo eje ute.T 1.381.6 Des riptores de � heroLos pro esos manejan � heros a trav�es de los denominados des riptores de � hero. Porejemplo, el resultado de abrir un � hero es un des riptor. Las posteriores opera iones demanejo (le tura, es ritura, et .) de este � hero re iben omo par�ametro el des riptor.Desde el punto de vista de nuestro programa, un des riptor no es m�as que un n�umeroentero positivo (0, 1, 2, ...).Des riptores est�andarLos tres primeros des riptores de � hero son los denominados \est�andar", y se onsideraque siempre est�an disponibles para ser usados.Normalmente estar�an aso iados al terminal pero podr��an estar aso iados a un � heroo a ualquier otro objeto del sistema de � heros, pero este es un detalle que no ha depreo uparnos a la hora de programar.Los programas que se omporten de forma \est�andar" los utilizar�an ade uadamente.Entrada est�andar. Es la entrada prin ipal al programa. Los programas que se ompor-tan de forma est�andar re iben los datos que han de pro esar leyendo de su entradaest�andar (des riptor de � hero n�umero 0).Salida est�andar. Es la salida prin ipal del programa. Los programas que se omportande forma est�andar emiten sus resultados es ribiendo en su salida est�andar (des riptorde � hero n�umero 1).Error est�andar. Es la salida para los mensajes de error del programa. Si un programaque se omporta de forma est�andar ha de emitir un mensaje de error deber�a ha erloa trav�es de su error est�andar (des riptor de � hero n�umero 2).

10

1.7 Int�erprete de mandatosLa intera i�on del usuario on el sistema UNIX puede ser a trav�es de un interfaz gr�a� o,pero lo m�as om�un es que sea a trav�es de un interfaz textual, esto es, a trav�es del di�alogo on un int�erprete de mandatos.En UNIX se denomina shell ( on ha) al int�erprete de mandatos, esto es, el programa apaz de interpretar y poner en eje u i�on los mandatos que el usuario te lea. No existeun �uni o shell sino mu hos.�� ��ls -l /bin/*sh T 1.39Los � heros que apare en son los diferentes shell disponibles. Quiz�as aparez a alg�unotro � hero. Quiz�as aparez an enla es simb�oli os (otro tipo de objeto del sistema de� heros).Se distinguen fundamentalmente en la sintaxis que re ono en y en las fa ilidades quepropor ionan para su uso intera tivo y para usarlos omo lenguaje de programa i�on de\guiones" de mandatos (s ripts).sh Es el denominado Bourne Shell. Es el primer shell que se desarroll�o para UNIX, yes el preferido para la programa i�on de s ripts. sh El "C"shell. Se llama as�� porque la sintaxis que re ono e se aproxima a la del lenguajeC. Tambi�en es uno de los primeros shell desarrollados para UNIX, y se ha preferidopara uso intera tivo.bash Bourne Again Shell, es una versi�on m�as evolu ionada del sh, m�as apta para el usointera tivo.t sh Versi�on mejorada del sh, on m�as fa ilidades para el uso intera tivo omo ompletarnombres de � hero y edi i�on de l��nea de mandatos.otros Existen otros mu hos: ksh, zsh, r , et . (para gustos, olores).Los m�as omunes para uso intera tivo son el t sh y el bash.Ya hemos estado usando el shell, de he ho que si est�a usted en su uenta, enton es !!est�a usted eje utando uno de ellos en este momento.1.8 Variables de entornoAdem�as de los argumentos que indi amos en su invo a i�on, ada mandato que eje ute-mos re ibir�a una serie de parejas "nombre=valor", que son las denominadas variables deentorno.Las variables de entorno son pasadas de pro eso padre a pro eso hijo por un me anismode heren ia.Las variables del entorno se utilizan para on�gurar iertos omportamientos de lospro esos. Por poner algunos ejemplos itaremos las siguientes:HOME Su valor es el nombre del dire torio ra��z de nuestra uenta en el sistema.

11

PATH Enumera un onjunto de dire torios donde se lo alizar�a los eje utables que invo-quemos.TERM Indi a el nombre o tipo del terminal que estemos usando.USER Indi a el nombre del usuario que somos.SHELL Es el nombre ompleto del int�erprete de mandatos que estemos usando.Existen otras mu has m�as variables de entorno, y podr��amos situar en el entorno ualquier otra informa i�on que sea de nuestro inter�es.Podremos visualizar las variables de entorno existentes ha iendo uso del mandato env.Variable de entorno PATHPara entender el omportamiento del shell es onveniente profundizar en la misi�on de lavariable de entorno PATH.Cuando le pedimos al shell que eje ute un mandato, este lo bus ar�a en los dire toriosindi ados en la variable de entorno PATH y s�olo en ellos. Es onveniente que la variablePATH se re�era al menos a los dire torios m�as omunes, esto es, /bin, /usr/bin y/usr/lo al/bin.Por razones de seguridad, es altamente re omendable que el dire torio a -tual "." NO est�e in luido en la variable PATH.1.9 Fi heros de texto eje utablesSi un � hero de texto tiene permisos de eje u i�on (man hmod) y su primera l��nea reza#! eje utable , podremos eje utar dire tamente este � hero, y su ontenido ser�a le��do heinterpretado por el eje utable. De esta manera podemos rear nuestros propios � herosde mandatos eje utables, que denominamos \guiones" (s ripts).p Es riba un � hero uya primera l��nea sea #! /bin/ at , y luego a~nada las l��neasT 1.40 de texto de desee. Dele permisos de eje u i�on y eje �utelo.Como podr�a observar, un � hero de texto eje utable no tiene porqu�e estar ne esaria-mente aso iado a un shell, sino que puede aso iarse a ualquier mandato que haga uso desu entrada est�andar.Adem�as en la primera l��nea podemos a~nadir op iones del mandato (una op i�on omom�aximo, aunque puede ser ompuesta).p Modi�que el � hero anterior para que al ser eje utado uente las l��neas y las palabrasT 1.41 de s�� mismo, pero no los ara teres. Para ello onsulte el manual sobre el mandatow .Este me anismo, de � heros de texto eje utables nos permitir�a la realiza i�on de � herosde mandatos, que ser�an interpretados por el shell de nuestra ele i�on.

12

1.10 XwindowsHasta ahora hemos experimentado el uso deUNIX desde un interfaz textual, esto es, desdeun terminal. Existe un entorno gr�a� o muy potente llamado X windows o simplemente X.Para arran arlo podemos usar el mandato �� ��startx .

13

14

Cap��tulo 2Uso del ShellEn este apartado exploraremos el uso intera tivo del int�erprete de mandatos. Vamos a veralgunas ara ter��sti as b�asi as del shell que nos ser�an de mu ha utilidad.El promptCuando el usuario entra en su uenta a trav�es de un terminal, el sistema arran a un nuevoint�erprete de mandatos aso iado a di ho terminal. Un shell arran ado de esta maneraest�a en modo intera tivo y nos informar�a de ello mostrando en el terminal un prompt omensaje de apremio. Un shell est�a a nuestro servi io.En este do umento se muestran los di�alogos on el shell de la siguiente manera:� �$ El prompt ser�a el s��mbolo $.2.1 Estado de termina i�onTodo mandatoUNIX debe terminar devolviendo un valor que permita identi� ar su estadode termina i�on. Un valor distinto de 0 indi a que o urri�o un error de alg�un tipo, mientrasque un valor 0 indi a que fun ion�o omo se esperaba. En el aso del shell el mandatointerno exit permitir�a terminar indi ando el valor de termina i�on.exit 0 # Termina i�on orre ta.Se debe es ribir �odigo esperando que otros lo usen, por lo tanto, hay que asegurarsede devolver un estado de termina i�on signi� ativo.2.2 Primer y segundo planoHasta ahora hemos venido arran ando mandatos que \toman el ontrol del terminal"hasta que terminan. Se di e de ellos que eje utan en primer plano (foreground). Podemossoli itar la eje u i�on de varios mandatos en primer plano invo ando ada uno en una l��neadiferente, pero tambi�en podr��amos ha erlo separ�andolos on el ar�a ter ';'.�� ��sleep 3; ls /; sleep 3; who T 2.1Observe omo se eje uta un mandato despu�es del anterior en estri ta se uen ia.

15

En UNIX es posible soli itar la eje u i�on de mandatos en segundo plano (ba kground)poniendo el ar�a ter & al �nal de los mismos. El mandato se eje utar�a en on urren ia on otros mandatos que eje utemos en primer o segundo plano a ontinua i�on.�� ��sleep 3 & ls / & sleep 3 & who &T 2.2 Observe omo se eje utan on urrentemente y la salida de los mandatos se mez la.2.3 Redire i�onEn UNIX podemos redirigir la entrada est�andar, salida est�andar y/o error est�andar delos mandatos.Esta es una ara ter��sti a muy muy �util, ya que, sin ne esidad de modi� ar en absolutoun mandato podemos usarlo para que tome su entrada de un � hero en vez de tener quete learla.De igual manera en vez de que la salida del mandato aparez a en la pantalla, podr��amosenviarla a un � hero para usarla on posterioridad.La sintaxis orre ta para realizar redire iones es a~nadir al �nal del mandato la redi-re i�on on la siguiente nota i�on:�� ��mandato < fi heroEn su eje u i�on, el mandato usar�a fi hero omo entrada, leer�a de �el y no del te lado.�� ��mandato > fi heroEn su eje u i�on, la salida del mandato ser�a enviada a fi hero y no a la pantalla. Sifi hero no existiera on anterioridad, ser�a reado autom�ati amente, pero si existe,ser�a previamente trun ado a tama~no ero.�� ��mandato >> fi heroA~nade la salida del mandato al �nal del � hero indi ado.�� ��mandato 2> fi heroLos mensajes de error que un mandato pueda generar tambi�en pueden ser redirigidosa un � hero, pero normalmente preferimos que se visuali en por la pantalla.�� ��mandato 2>&1Redirige la salida de error a donde quiera que est�e dirigida la salida est�andar.p Obtenga en un � hero de nombre todos los fi heros un listado en formato largoT 2.3 de todo el �arbol de � heros re orri�endolo re ursivamente desde el dire torio ra��z.Dado que este mandato puede llevar un rato en eje utar, lo arran amos en segundoplano, para poder seguir realizando otros mandatos.�� ��ls -l todos los fi herosT 2.4 Compruebe que tama~no del � hero est�a aumentando.!! Apare er�an en pantalla s�olo los mensajes de error que el mandato produ e al noT 2.5 poder a eder a iertos dire torios.

16

�� ��grep login name < todos los fi heros > mis fi herosT 2.6 Use el mandato grep para �ltrar las l��neas del � hero de entrada que ontienen eltexto indi ado, en este aso su nombre de usuario. Deje el resultado en un � herode nombre mis fi heros.2.4 Se uen iaPipelineEn UNIX podemos redirigir la salida est�andar de un mandato dire tamente a la entradaest�andar de otro. Con ello onstruimos se uen ias de mandatos que pro esan el resultadodel anterior y emiten su resultado para que sea pro esado por el siguiente mandato de lase uen ia.Esto lo onseguimos separando los mandatos on el ar�a ter \|" (pipe).Esta es es una fa ilidad muy poderosa de UNIX, ya que, sin ne esidad de � herosintermedios de gran tama~no podemos pro esar grandes antidades de informa i�on.�� ��ls -la /home | grep login name T 2.7Obtiene un listado en formato largo de todos los dire torios de uentas y �ltra aque-llas l��neas que ontienen nuestro nombre de usuario.!! No se rea ning�un � hero intermedio. T 2.8p Obtenga el listado \todos sus � heros" de la se i�on anterior, one tando el re- T 2.9sultado al mandato grep para quedarse s�olo on sus � heros. Mande el resultado aun nuevo � hero de nombre MIS fi heros. P�ongalo as��, on may�us ulas, para noma ha ar el � hero nombrado as�� pero en min�us ulas.Re uerde invo ar el mandato on & para poder seguir ha iendo otras osas.p Cuando hayan terminado de eje utar los mandatos, ompruebe las diferen ias entre T 2.10los � heros de nombre mis fi heros y MIS fi heros. Para ello utili e el mandatodiff, onsultando el manual si es ne esario.Se uen ias ondi ionalesEs tambi�en posible separar mandatos o se uen ias on los siguientes s��mbolos:&& Soli itamos que el mandato o se uen ia a la dere ha del s��mbolo s�olo se eje ute si elde la izquierda termin�o orre tamente.|| Soli itamos que el mandato o se uen ia a la dere ha del s��mbolo s�olo se eje ute si elde la izquierda termin�o in orre tamente.�� ��true && e ho "El anterior termin�o bien" T 2.11�� ��false || e ho "El anterior termin�o mal" T 2.12

17

2.5 Meta ara teresLos meta ara teres (wild ards) son ara teres omod��n. Con su uso podemos ha er refe-ren ia a onjuntos de � heros y/o dire torios, indi ando la expresi�on regular que asa onsus nombres.? Comod��n de ar�a ter individual.* Comod��n de tira de ero o m�as ara teres.~ Abreviatura del dire torio home.~user Abreviatura del dire torio home de user.[ab ℄ Casa on un ar�a ter del onjunto espe i� ado entre los or hetes.[x-y℄ Casa on un ar�a ter en el rango espe i� ado entre los or hetes.[^...℄ Niega la sele i�on indi ada entre los or hetes.fstr,. . . g Agrupa i�on. Casa su esivamente ada tira.p Obtenga un listado en formato largo, de los � heros de los dire torios /bin yT 2.13 /usr/bin/ que ontengan en su nombre el texto sh.p Obtenga un listado en formato largo, de los � heros del dire torio /dev que o-T 2.14 mien en por tty y no terminen en d��gito.2.6 Uso intera tivoUn buen shell para uso intera tivo ofre e servi ios que le fa ilitan la tarea al usuario. Estosigni� a que existen m�ultiples ombina iones de te las aso iadas on alguna fun ionalidadespe ial. Para ono erlas ompletamente deber�a onsultar el manual.Edi i�on de l��neaPodemos mover el ursor ( ) sobre la l��nea de mandatos que estamos te leando on ! , borrar antes y sobre el ursor on Ba kspa e y Del , ir al ini io y al �nal on Ini ioy Fin , et .!! Observe que pasa si intenta editar una l��nea m�as larga que la pantalla.T 2.15 Hist�ori o de mandatosSi ha e po o que te leamos un mandato no es pre iso volverlo a te lear. Basta on bus arloha iendo uso de las e has del te lado " y # .El mandato interno history nos informa de todos los mandatos que hemos usado�ultimamente.�� ��historyT 2.16 Visuali e los mandatos que hasta ahora ha realizado en su shell.

18

!! Observe que history guarda los mandatos anteriores de una sesi�on otra.T 2.17 �� ��!! T 2.18Repite el �ultimo mandato.�� ��!5 T 2.19Repite el mandato que o upa la posi i�on 5 en la historia.Fin de datosLa ombina i�on de te las Ctrl D en una l��nea va ��a indi a \�n de datos".Si la pulsamos y hay alg�un programa leyendo del terminal, entender�a que no hay m�asdatos y terminar�a normalmente.�� �� at T 2.20Es un mandato que lo que lee de su entrada lo es ribe en su salida. Es riba variasl��neas de datos para observar su omportamiento.Como est�a leyendo del terminal, para que termine normalmente, deber�a indi arle\�n de datos".�� ��$ Ctrl D T 2.21El shell tambi�en es un programa que lee de su entrada estandard. Ind��quele \�n dedatos".!! El shell entender�a que no hay m�as datos, terminar�a normalmente y por lo tanto T 2.22nos sa ar�a de la uenta.Si ha sido as�� y este omportamiento no le agrada, hay una forma de on�gurar elshell para evitar que su eda. M�as adelante la veremos.Control de trabajosEnUNIX podemos arran ar mandatos para que se eje uten en segundo plano (ba kground)poniendo el ar�a ter & al �nal de la l��nea.Tambi�en, desde su shell puede suspender el trabajo que est�a en primer plano (fore-ground), rearran ar trabajos suspendidos, dejarlos en segundo plano, matarlos, et .Ctrl C Pulsando esta ombina i�on de te las uando tenemos un programa orriendo enprimer plano, le mandaremos una se~nal que "lo matar�a".Ctrl Z El programa en primer plano quedar�a suspendido y volveremos a ver el prompt delshell.�� ��jobs Este mandato interno nos informa de los trabajos en urso y de su estado. Podremosreferirnos a uno on reto por la posi i�on que o upa en esta lista.�� ��fg Eje ut�andolo, el �ultimo pro eso suspendido volver�a a primer plano. Para referirnosal segundo trabajo de la lista de trabajos usaremos �� ��fg %2 .�� ��bg Eje ut�andolo, el �ultimo pro eso suspendido volver�a a eje utar, pero en segundoplano! Es omo si lo hubi�eramos arran ado on un & detr�as.19

�� ��kill Este mandato interno permite enviarle una se~nal a un pro eso, on lo que, normal-mente, lo mataremos.p Arranque varios pro esos en ba kground, por ejemplo varios �� ��sleep 60 & , y aT 2.23 ontinua i�on onsulte los trabajos a tivos.p Arranque un pro eso en primer plano, por ejemplo �� �� at y susp�endalo. ConsulteT 2.24 los trabajos a tivos. Vuelva a ponerlo en primer plano y luego m�andele una se~nalque lo mate.? >C�omo lo matar��a si se en uentra en segundo plano?T 2.25 Completar nombres de � heroSi tenemos un nombre de � hero es rito \a medias" y pulsamos el tabulador (7!), el t shintentar�a ompletar di ho nombre. Si lo que pulsamos es la ombina i�on Ctrl D , nosmostrar�a la lista de nombres que empiezan omo �el.Tambi�en fun iona para nombres de mandato.p Es riba �� ��ls . s7! y luego intente �� ��ls . s Ctrl D , observe la diferen ia.T 2.26Control de s roll de terminalDenominamos terminal al onjunto pantalla/te lado o a la ventana a trav�es de la ualdialogamos on el shell.Ctrl S Congela el terminal. No mostrar�a nada de lo que nuestros programas es riban, niatender�a a lo que te leemos.Si por des uido pulsamos Ctrl S podr��amos pensar que el sistema se ha quedado olgado, pero no es as��.Ctrl Q Des ongela el terminal. Lo que los programas hubiesen es rito mientras la pantallaestuvo ongelada, as�� omo lo que hubi�esemos te leado, apare er�a en este momento.El uso om�un de la pareja Ctrl S Ctrl Q es para ontrolar la salida de programasque emiten mu has l��neas.�� ��Ctrl S ls -laT 2.27 Observe que, de momento, nada de lo que hemos te leado apare e en el terminal.� �Ctrl QT 2.28 Ver�a omo el mandato que te leamos apare e y se eje uta on normalidad.�� ��ls -laR /T 2.29 El resultado de este mandato son demasiadas l��neas de texto. Juegue on Ctrl SCtrl Q a parar y dejar orrer la pantalla.�� ��Ctrl CT 2.30 Cuando se anse, mate el trabajo.

20

2.7 Algunos mandatos �utilesless [files...℄ On S reen File BrowserFiltro para la visualiza i�on por pantalla de � heros. Es una versi�on mejorada del l�asi omandato more.Si lo usamos indi ando un onjunto de � heros, podremos pasar al siguiente y alanterior on :n y :p respe tivamente.Con este mandato s�olo podremos ver los � heros, pero no modi� arlos, m�as adelanteveremos alg�un editor.�� ��less * fi heros T 2.31Visuali e el ontenido de los � heros que existen ya en su HOME que terminan por\ � heros".�� ��ls * T 2.32Observe que el meta ara ter * no alude a los � heros uyo nombre empieza porpunto.passwd Change User PasswordUNIX protege el a eso a las uentas de los usuarios mediante una palabra lave.Las uentas del sistema, sus ontrase~nas y resto de informa i�on, est�an registradas enel � hero /et /passwd.�� ��less /et /passwd T 2.33Visuali e el ontenido del � hero de ontrase~nas.Este � hero ontiene la informa i�on sobre las uentas de usuario que hay en susistema.Compruebe que existe una uenta on su nombre de usuario.�� ��man 5 passwd T 2.34Estudie u�al es el ontenido del � hero de ontrase~nas.Un usuario puede ambiar su palabra lave ha iendo uso del mandato passwd. Esmuy importante que la ontrase~na no sea trivial, ni una fe ha, ni una matr�� ula de o he,tel�efono, nombre propio, et .�� ��passwd T 2.35<Si no tiene un buen password, �ambielo ahora mismo! p orig dest Copy FilesObtiene una opia de un � hero o bien opia un onjunto de � heros al dire torio indi ado.Admite variedad de op iones, que no vamos a des ribir en este do umento (si tienedudas, onsulte el manual).Interesa desta ar que este es un mandato peligroso, dado que (por defe to) ha elo que le pedimos sin onsultar, lo u�al puede suponer que ma haquemos � heros que yaexistan. Para que nos onsulte deberemos usarlo on la op i�on -i.21

�� �� p /et /passwd ~ T 2.36Copie en su HOME el � hero /et /passwd.!! Visuali e que su ontenido es realmente una opia del original.T 2.37 p Copie el � hero . shr sobre el que ahora tiene en su uenta on el nombre passwd.T 2.38 ? >Le ha onsultado p antes de rees ribir? >Se ha modi� ado el � hero?T 2.39 p Intente las mismas opera iones usando la op i�on -i.T 2.40rm files... Remove FilesBorrar � heros. Para ver sus op iones onsulte el manual.Tambi�en es un mandato peligroso. En este aso, rm no s�olo ha e lo que le pedimossin onsultar, sino que en UNIX no existe manera de re uperar un � hero (o dire -torio) que haya sido borrado. Por lo tanto se ha e impres indible usarlo on la op i�on-i.p Intente borrar el � hero passwd de su uenta on �� ��rm -i passwd . Conteste queT 2.41 no.p Borre el � hero passwd que ahora tiene en su uenta.T 2.42 !! Observe que efe tivamente ha sido eliminado.T 2.43 p Intente borrar el � hero /et /passwd.T 2.44 ? >Puede ha erlo? >Porqu�e?T 2.45mv orig dest Move (Rename) FilesCambia el nombre de un � hero o bien mueve un � hero o onjunto de � heros a undire torio.Tambi�en es un mandato peligroso, porque podr��a \ma ha ar" el(os) � hero dedestino sin pedirnos on�rma i�on. Se debe usar on la op i�on -i.p Intente mover el � hero /et /passwd a su HOME.T 2.46 p Intente mover alg�un � hero de su uenta (uno que no le valga) al dire torio /et .T 2.47 ? >Puede ha er estas opera iones? >Porqu�e?T 2.48 p Cambie de nombre al � hero mis fi heros a MIS fi heros.T 2.49 ? >Pudo ha erlo? >Le onsult�o?T 2.50

22

mkdir dir Make Dire toryCrea un nuevo dire torio. Por supuesto, si ya existe un � hero o dire torio on di honombre dar�a un error.Los dire torios que usted ree ser�an suyos. S�olo podr�a rear � heros o dire torios enaquellos dire torios donde usted tenga permiso de es ritura.p Cree en su uenta un subdire torio de nombre subarbol.T 2.51 p Visuali e su ontenido on ls -la. T 2.52p Cree otros subdire torios m�as profundos, pero sin ha er uso del d. T 2.53�� ��ls -laR ~ T 2.54Visuali e el ontenido a tual de su HOME re ursivamente.rmdir dir Remove Dire toryBorra un dire torio. Por supuesto el dire torio debe estar va ��o.p Intente borrar un dire torio no va ��o, Ej. subarbol. T 2.55? >Puede ha erlo? T 2.56p Visuali e el ontenido de subarbol. T 2.57p Elimine los dire torios m�as profundos, y vaya as endiendo, hasta onseguir eliminar T 2.58el dire torio subarbol.2.8 Con�gura i�onCada usuario puede on�gurar el omportamiento de su uenta editando onvenientemente iertos � heros presentes en su HOME que dependen de qu�e shell use usted.El � hero de on�gura i�on que es de nuestro inter�es en este momento es:.bashr Se eje uta siempre que el usuario arran a un nuevo bash.. shr Se eje uta siempre que el usuario arran a un nuevo sh o t sh.Dado que estos � heros s�olo se leen al arran ar el shell, para que los ambios quehagamos en ellos tengan efe to, deberemos bien salir de la uenta y volver a entrar o bienha er uso del mandato interno sour e para que su shell lea e interprete el ontenido del� hero.Mandatos peligrososEn UNIX, si se borra un � hero o un dire torio no hay forma de re uperarlo.Adem�as, los mandatos obede en iegamente a quien los usa, y no onsultan. Para evitarmeter la pata es onveniente usar iertos mandatos de forma que onsulten antes de a tuar.Para ello, vamos a usar el mandato interno alias, para protegernos de los mandatosproblem�ati os.

23

Fin de datosEvitaremos que el shell termine a la pulsa i�on Ctrl D pidi�endole que lo ignore.�� ��aliasT 2.59 Eje utando este mandato observar�a que alias est�an en fun ionamiento.Los alias modi� an \al vuelo" los mandatos que queremos eje utar, justo antes deser �nalmente eje utados.�� ��pi o fileT 2.60 Es un editor de uso muy sen illo. �Uselo para realizar la siguiente modi� a i�on en el� hero de on�gura i�on de su shell.Es oja entre la versi�on de la izquierda, si usted usa el t sh o el sh, o la de la dere hasi usa el bash. A~nada al �nal del � hero de on�gura i�on indi ado las siguientesl��neas: . shr alias p ' p -i'alias mv 'mv -i'alias rm 'rm -i'set ignoreeof.bashr alias p=' p -i'alias mv='mv -i'alias rm='rm -i'IGNOREEOF=10�� ��sour eT 2.61 Re uerde que debe pedirle a su shell que lea e interprete el ontenido del � hero de on�gura i�on, para que tenga onstan ia de la modi� a i�on que a aba de ha er.�� ��aliasT 2.62 Observar�a si los alias que ha estable ido est�an en fun ionamiento.Ctrl DT 2.63 Compruebe si esta se uen ia ha e terminar su shell.

24

2.9 Explorando el mandato lnCon este mandato podremos rear \enla es", esto es, rear otros nombres que se re�erana un � hero ( o dire torio) ya existente.�� ��ln ... T 2.64Cree un enla e f��si o (hard link) del � hero /et /passwd en su uenta.�� ��ln -s ... T 2.65Cree un enla e simb�oli o (symboli link) del � hero /et /passwd en su uenta.�� ��ls -l T 2.66Observe los atributos (permisos, propietario, n�umero de enla es, et .) de los enla esque a aba de rear.!! >Tiene usted permiso para es ribir sobre di hos enla es? Intente es ribir en ellos, T 2.67por ejemplo redirigiendo sobre ellos la salida de otro mandato.�� ��rm ... T 2.68Ahora borre los enla es que re�o. >Puede ha erlo? >C�omo es posible? De unaexpli a i�on razonable.2.10 Explorando el mandato findExplore en profundidad las op iones de este mandato. Para ello onsulte el manual yreali e los siguientes ejer i ios.�� ��find ... -name ... T 2.69Lo ali e todos los � heros del sistema uyo nombre termina en sh. Guarde el resul-tado en un � hero de nombre signi� ativo.NOTA: use omillas simples para evitar la expansi�on de los meta ara teres.�� ��find ... -ls T 2.70Repita la opera i�on anterior, pero ahora obtenga un listado que detalle los atributosde los � heros en ontrados.�� ��find ... -mtime ... T 2.71Lo ali e todos los � heros del sistema que han sido modi� ados en los 3 �ultimos d��as.Guarde el resultado en un � hero de nombre signi� ativo.�� ��find ... -user ... T 2.72Lo ali e todos los � heros del sistema que le pertene en. Guarde el resultado en un� hero de nombre signi� ativo.�� ��find ... -and ... T 2.73Lo ali e todos los � heros del sistema que han sido modi� ados en los 3 �ultimos d��asy le pertene en. Guarde el resultado en un � hero de nombre signi� ativo.�� ��find ... -type T 2.74Lo ali e todos los � heros del sistema que no son � hero ni dire torio ni � heroespe ial (orientados a ara ter o a bloque). Guarde el resultado en un � hero denombre signi� ativo.

25

2.11 Explorando el mandato sortExplore en profundidad las op iones de este mandato. Para ello onsulte el manual yreali e los siguientes ejer i ios.�� ��ls -lRaT 2.75 Obtenga un listado detallado de todos los � heros de su uenta. Guarde el resultadoen un � hero de nombre MIOS.�� ��sort ...T 2.76 Ordene las l��neas del � hero MIOS, alfab�eti amente.�� ��sort ...T 2.77 Ordene las l��neas del � hero MIOS, por tama~no del � hero, de memor a mayor.�� ��ls -S ...T 2.78 Intente obtener el mismo resultado usando dire tamente el mandato ls.�� ��sort ...T 2.79 Ordene las l��neas del � hero MIOS, por fe ha del � hero, del m�as antiguo al m�asmoderno.2.12 Explorando se uen ias de mandatos�� ��sort ... | head ...T 2.80 Combine el mandato anterior on el mandato head en una se uen ia para quedarnoss�olo on las 4 primeras l��neas.�� ��sort ... | tail ...T 2.81 Combine el mandato anterior on el mandato tail en una se uen ia para quedarnoss�olo on las 4 �ultimas l��neas.p Combine los mandatos find, sort y head para omponer una se uen ia de man-T 2.82 datos uyo resultado sea un listado que detalle los atributos de los 10 � heros (nodire torios) del sistema on mayor n�umero de enla es.p De forma similar, y ombinando tambi�en el mandato ut omponga una se uen iaT 2.83 de mandatos uyo resultado sea s�olo en nombre de los 10 � heros de tama~no mayoren el sistema, uno por l��nea.p De forma similar, omponga una se uen ia de mandatos uyo resultado sea s�oloT 2.84 en nombre de los 10 � heros de m�as ant��guos del sistema.

26

Cap��tulo 3Programa i�on de S riptsEn este apartado usaremos el Bourne Shell para programar � heros de mandatos (s ripts),pero en o asiones, para probar un mandato omplejo o un s ript sen illo, lo usaremos deforma intera tiva.Simplemente eje utaremos el mandato sh y este nos devolver�a el ar�a ter $ que esprompt ara ter��sti o del sh. Para salir de nuevo al sh pulsaremos Ctrl-D o bien usaremosel mandato interno exit.Ejemplouser�hostname>user�hostname> psPID TTY STAT TIME COMMAND1154 p1 S 0:02 - sh2556 p1 R 0:00 psuser�hostname> e ho Mi PID es $$Mi PID es 1154user�hostname> dateThu Jul 30 18:20:37 CEST 1998user�hostname> who am ihostname.domain!user ttyp1 Jul 30 11:23 (:0.0)user�hostname> sh$$ psPID TTY STAT TIME COMMAND1154 p1 S 0:02 - sh2561 p1 S 0:00 sh2562 p1 R 0:00 ps$ e ho $$2561$ ^Duser�hostname>

27

3.1 ComentariosTanto el programa en su onjunto omo ada una de sus partes o fun iones deben estarbien do umentados, a base de omentarios que lari�quen qu�e ha e y �omo lo ha e.Los omentarios son ualquier texto, omenzando on el ar�a ter almohadilla (#) yterminando al �nal de la l��nea. Esto se eje uta. # Esto no.3.2 Variables y EntornoEl shell propor iona variables uyo valor son tiras de ara teres. El nombre de una va-riable podr�a ontener letras, d��gitos y el ar�a ter ' ', pero no puede empezar por ' '. Lasmin�us ulas y las may�us ulas se onsideran distintas.Para dar valor a una variable es ribiremos variable=valor , sin espa ios en blan o!Para obtener el valor de una variable usaremos la nota i�on $variable o $fvariablegsi a ontinua i�on del nombre de la variable viene letra o d��gito.El entorno es un sub onjunto de las variables del shell que son heredadas por todo pro- eso derivado de este. Una variable puede ser a~nadida al onjunto de variables de entorno on el mandato export variable . Las variables de entorno pueden ser visualizadas onel mandato env.Ejer i io 3.1.Es riba el mandato identidad on el siguiente ontenido y eje �utelo:#! /bin/sh# identidad# Identifi a al usuario usando las variables de entorno.e ho Usted es el usuario \"$USER\".Como podr�a observar el sh lee, interpreta y eje uta el ontenido del � hero. Estepeque~no programa ha e uso adem�as de la variable de entorno USER.Ejer i io 3.2.Ampl��e el programa anterior para que visuali e una des rip i�on ompleta del usuarioy la m�aquina bas�andose en la informa i�on ontenida en el entorno.3.2.1 Variable PATHCuando le pedimos al shell que eje ute un mandato, lo intentar�a en ontrar entre susmandatos internos y entre las fun iones que tengamos de�nidas. Si no se en uentra, lobus ar�a en el onjunto de dire torios indi ados en la variable de entorno PATH y s�olo enellos.Dado que un s ript puede fallarle a alguna persona si tiene un PATH diferente o in- ompleto, se re omienda in luir en una orre ta espe i� a i�on de esta variable de entorno.PATH=/usr/bin:/binEjer i io 3.3.Experimente on el siguiente mandato en PATH:

28

#!/bin/sh -x# en_PATH# Experimento sobre la variable PATH.# El valor de esta variable afe ta a la# lo aliza i�on de los mandatos que usamos.PATH=""; ls # No se en uentra.PATH=""; /bin/ls # SI se en uentra.PATH=/bin; ls # SI se en uentra.Observe que la op i�on -x del shell permite "depurar"nuestro programa.3.2.2 Variables espe ialesLa denominadas variables espe iales, no pertene en al entorno. Es el shell quien les davalor.$0 Nombre del s ript.$9 Par�ametro del s ript o fun i�on en la posi i�on indi ada (1 a 9).$# N�umero de par�ametros posi ionales o argumentos.$* Lista de argumentos.$� Lista de argumentos. Pero "$�" no es una tira de ara teres, sino opia exa ta dela lista de argumentos$$ Identi� ador del propio pro eso shell.$? Valor devuelto por el �ultimo mandato eje utado.$! Identi� ador del �ultimo pro eso lanzado en segundo plano.Ejer i io 3.4.Codi�que el siguiente mandato argumentos que visualiza el valor de todas las varia-bles espe iales relativas a los argumentos. Experimente la diferen ia entre "$�", $�,"$*" y $*.#! /bin/sh# argumentos args...# Experimento sobre variables espe iales relativas a argumentos.e ho '"$�"' vale "$�", y si lo re orro obtengo:for ARG in "$�"; do e ho __${ARG}__; donee ho '$�' vale $�, y si lo re orro obtengo:for ARG in $�; do e ho __${ARG}__; donee ho '"$*"' vale "$*", y si lo re orro obtengo:

29

for ARG in "$*"; do e ho __${ARG}__; donee ho '$*' vale $*, y si lo re orro obtengo:for ARG in $*; do e ho __${ARG}__; doneEje �utelo on los siguientes argumentos.argumentos 1 "Dos 2" "3 III" 'Cuatro ****'Conteste >D�onde y u�ando se expanden los omodines de 'Cuatro ****'?Conteste >Porqu�e es pre isa la nota i�on $fARGg?Ejer i io 3.5.El mandato interno shift desplaza los par�ametros posi ionales un lugar a la izquier-da, perdi�endose el antiguo valor de $1, que pasar�a a valer lo que val��a $2, et . yde rementa $#.A~nada al �nal del mandato argumentos un �ultimo re orrido del siguiente modo:e ho Y si voy desplazando los par�ametros on "shift" obtengo:while [ $# -ne 0 ℄ # Equivalente a... until test $# -eq 0do e ho __${1}__shiftdone3.3 El mandato testEs uno de los mandatos m�as usados en shell s ripts, est�udielo en profundidad puede serlemuy util man test . Puede ser un mandato interno del shell o ser un mandato externo.ls -l /usr/bin/[ /usr/bin/testPuede usarse de dos maneras: test expression o [ expression ℄ . Observe quesus argumentos (as�� omo el ar�a ter ℄) deben estar onvenientemente separados por es-pa ios.Un buen shell s ript debe veri� ar que los argumentos on los que ha sido invo ado (sies pre iso alguno) son orre tos, y si no lo son debe indi arle al usuario la forma orre tade utiliza i�on. Para veri� ar el n�umero de argumentos usaremos el mandato test.Ejer i io 3.6.Ampl��e el siguiente mandato test test para que reali e todos los posibles test de unoo dos argumentos.#!/bin/sh# test_test arg1 [arg2℄# Usa el mandato test(1) de todas las formas posibles# sobre 1 o 2 argumentos.

30

test_as_file(){ for opt in b d e f gdo test -$opt "$1" && : TRUE || : falsedone}if [ $# -eq 2 ℄then set -x # A tivamos el modo depura i�on.test_as_file "$1"test_as_file "$2"...elif [ $# -eq 1 ℄then ...else ...fiEje �utelo on. . . "" , /dev/ onsole , . , 2 02 , "1 -lt 3" , et .Conteste >$1 ha e referen ia al mismo par�ametro uando se usa en el programa prin ipalque uando se usa dentro de una fun i�on?Conteste >Porqu�e es pre isa la nota i�on entre omillada "$1"?Conteste >Que signi� a la nota i�on mandato && mandato || mandato ?Conteste : es un mandato interno. >Para qu�e sirve? (man sh y busque :).Conteste set es un mandato interno. >Para qu�e sirve?

3.4 Fun ionesUsando el Bourne Shell podemos ha er uso de grupos de mandatos, agrupados entre llaves'fg' all�� donde podr��amos haber usado un mandato simple.Las fun iones en Bourne Shell son simplemente el resultado de ponerle un nombre �uni oa un onjunto de mandatos agrupados mediante llaves. Son una de las ara ter��sti as m�aspoderosas del sh y es ne esario a ostumbrarse a usarlas.fun tion() {# Conjunto de mandatos# que implementan la fun i�onreturn 0 # termina i�on orre ta}�� En una fun i�on los par�ametros posi ionales $1, $2, et . son los argumentos de lafun i�on (no los argumentos del s ript).31

� Una fun i�on puede ser usada de igual modo que se puede usar un mandato externo.� Una fun i�on devolver�a su propio estado de termina i�on usando la senten ia return.Si se usa exit dentro de una fun i�on, se estar�a terminando el s ript ompleto, nosolo la fun i�on.return 0 # Termina i�on orre ta� Las fun iones son ideales para en apsular una determinada labor. Se pueden redirigirsu entrada, salida o error, one tarlas por pipes, et .� Las fun iones del Bourne Shell pueden ser re ursivas!Ejer i io 3.7.Es riba el mandato �arbol que re iba omo argumentos una lista de � heros y/o di-re torios e imprima los nombres ompletos de ada � hero y re orra ada dire toriode forma re ursiva en profundidad.� El resultado debe ser un nombre ompleto de � hero por l��nea, onvenientementeendentado ( on tabuladores) para indi ar la profundidad de la re ursi�on.� Utili e una fun i�on re ursiva de nombre sub arbol que re iba omo primer ar-gumento una tira de tabuladores, omo segundo el nombre del dire torio que seest�a explorando en este momento y a ontinua i�on ualquier n�umero de nom-bres de � hero o dire torio a evaluar.� Para obtener el ontenido de un dire torio utili e `ls -A1 $DIR`.3.5 Entrada, salida y error est�andarLa entrada, salida y error est�andar son los des riptores de � hero 0, 1 y 2. Cada uno tieneuna misi�on on reta y deben ser usados onvenientemente.Error Los mensajes de error deben apare er en el est�andar error y no en la salida est�andar.e ho Fi hero de onfigura i�on inexistente. >&2A ve es, por est�eti a, interesar�a silen iar posibles mensajes de error generados porlos mandatos que usamos. Lo onseguiremos dirigiendo la salida de error de di homandato a /dev/null.expr $NUM 2> /dev/null || reintentarSalida La salida est�andar es para los mensajes que van dirigidos al usuario o a otros pro esos.e ho -n "Desea rearlo?[s℄ "Entrada La entrada est�andar es para re oger la respuesta de los usuarios o la salida de otrospro esos.read RESPUESTACWD=`pwd`

32

Intera tivo Es posible que la entrada est�andar no est�e aso iada al terminal (haya sido redirigida)y no haya un usuario al ual onsultar. Si es pre iso nuestros programas pueden teneresto en uenta y omportarse de forma distinta seg�un est�en siendo usados de formaintera tiva o no tty -s .in-situ Podemos in orporar en nuestro propio s ript el texto que queremos que sea la entradaa un mandato. at << 'Fin ayuda'Las l��neas de texto siguientes, hasta una que literalmente re e Fin ayuda ser�an laentrada al mandato. Si la mar a de "�n de do umento in-situ"presenta alg�un quotingel texto ser�a literal, si no ser�an expandidas las variables y los mandatos entre omillasinversas.Ejer i io 3.8.Es riba el mandato reto que retar�a al usuario a que adivine un n�umero (por ejemploel PID del pro eso). Para ello leer�a los valores num�eri os que el usuario te lee yresponder�a indi ando si el n�umero se reto es mayor, menor o igual, en uyo asoterminar�a.� Para omparar los valores num�eri os haga uso del mandato test.� El programa s�olo debe admitir ser usado de forma intera tiva.� El programa debe llamar al usuario por su nombre ha iendo uso de la variableUSER.� Debe evitar morir si el usuario le manda una se~nal desde te lado. Para ello apturar�a las se~nales SIGINT y SIGQUIT (man 7 signal) ha iendo uso delmandato interno trap.� Si el usuario responde al reto on Ctrl-D (�n de datos), el programa pedir�a una on�rma i�on positiva antes de terminar.3.6 Manipula i�on de tiras de ara teresInternamente el shell ofre e po os me anismos para manipular tiras de ara teres, si biensiempre se puede ha er uso de mandatos externos apa es de manipular � heros de textode forma so�sti ada. ase La senten ia ase permite lo alizar patrones sen illos en tiras de ara teres. Se usapor ejemplo para analizar los par�ametros de entrada de los shell s ripts y re ono erop iones. ase $1 in0) e ho Cero ;;1|2|3|4) e ho Positivo ;;-[1234℄) e ho Negativo ;;*.*) e ho De imal ;;*) e ho Otra osa ;;esa

33

read El mandato interno read lee una l��nea de su entrada est�andar y asigna valor a lasvariables que se le pasan omo argumentos. La l��nea se divide por los ara teres quese onsideran separadores de ampo que normalmente son el tabulador y el espa io.set El mandato interno set. Si le pasamos una lista de argumentos, los separa por los ara teres que se onsideran separadores de ampo y los asigna omo valores a lospar�ametros posi ionales $1, $2, et . y a tualiza $#.Adem�as, el mandato set sirve para a tivar op iones del propio shell, omo el mododepura i�on, modo verbose, et . Consulte el manual.IFS El onjunto de ara teres que el shell onsidera separadores de ampo son los que ontiene la variable de entorno IFS (Input Field Separator). Cambiando el valor deesta variable podemos dividir l��neas por los ara teres que queramos.IFS=':' read field 1 field 2 rest < fileIFS=', ' set "1,2,3,4 5.6"Observe en el ejemplo anterior la forma de asignar valor a una variable en la mismal��nea en la que se invo a al mandato, sin separarlos por ;. Usando esta sintaxis lamodi� a i�on del valor de la variable s�olo afe ta a di ha invo a i�on, y no es perma-nente.Ejer i io 3.9.Do umente ade uadamente el siguiente �odigo. Para ello, onsulte el manual hastaentender �omo se onsigue el valor ade uado en ada aso.#!/bin/sh -x# hora# Experimento manipula i�on de tiras de ara teres.TIME=`date | ut - 12-19`TIME=`date | ut -d\ -f4`TIME=`date | sed 's/.* .* .* \(.*\) .* .*/\1/'`TIME=`date | awk '{print $4}'`TIME=`set \`date\`; e ho $4`TIME=`date | (read u v w x y z; e ho $x)`TIME=`date +%T`

Ejer i io 3.10.Es riba el mandato adivina que tendr�a que intentar adivinar el valor de un par�ametronum�eri o que s�olo el usuario ono e, pregunt�andole osas que s�olo debe responder onsi o no.� El programa s�olo debe admitir ser usado de forma intera tiva.� El programa debe presentar un men�u de los on eptos que sabe adivinar (edad,altura, et .) y leer la op i�on que el usuario sele ione. Para identi� ar la op i�onutili e la senten ia ase.34

� Es riba la fun i�on auxiliar pregunta si que re iba omo argumentos el texto deuna pregunta, se lo presente al usuario, lea su respuesta (usando el mandatointerno read) y on un ase ompruebe si la respuesta es a�rmativa. Si lo esterminar�a bien, sino terminar�a mal.� Es riba la fun i�on auxiliar di otom��a que ontrole dos valores num�eri os menory mayor que representan un rango, y pregunte al usuario sobre el valor mediodel rango, de forma que se pueda redu ir el rango a la mitad. Para al ular elvalor medio utili e el mandato externo expr.

35