Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Bash Scripts PDF
Bash Scripts PDF
Nota importante: El presente seminario se oferta dentro del plan de formacin para personal informtico de la Universidad de Sevilla para el ao 2006 y toda su documentacin asociada est bajo licencia Creative Commons con reconocimiento !ttp:""creativecommons#or$"licenses"by"2#%"deed#es&# '( edicin: Curso 0)*%% +ro$ramacin ,van-ada en S!ell. octubre 2#00)# 2( edicin: Curso 0%*0/ +ro$ramacin ,van-ada en S!ell. abril 2#00%# Esta )( edicin divide el curso en 2 seminarios: '# Seminario 060') +ro$ramacin ,van-ada en S!ell l0nea de comandos&. septiembre 2#006# 2# Seminario 060%) +ro$ramacin ,van-ada en S!ell s!ellscripts&. septiembre 2#006#
1NDICE
1. Introduccin.................................................................................4 '#'# 1a l0nea de mandatos########################################################################2 '#2# Edicin y ejecucin de un $uin########################################################2 '#)# 3ecomendaciones de pro$ramacin#################################################% 2. Expansiones.................................................................................7 2#'# E4pansin de llaves###########################################################################5 2#2# E4pansin de tilde#############################################################################/ 2#)# E4pansin de parmetro o de variable##############################################6 2#2# Sustitucin de mandato###################################################################'0 2#%# E4pansin aritm7tica#######################################################################'' 2#6# Sustitucin de proceso####################################################################'' 2#5# 8ivisin en palabras########################################################################'2 2#/# E4pansin de fic!ero#######################################################################'2 3. Programacin estructurada.......................................................14 )#'# 1istas de mandatos##########################################################################'2 )#'#'# 1istas condicionales##################################################################'% )#2# Estructuras condicionales y selectivas###########################################'% )#2#'# Estructuras condicionales#########################################################'% )#2#2# Estructura selectiva##################################################################'5 )#)# 9ucles##############################################################################################'/ )#)#'# 9ucles $en7ricos#######################################################################'6 5#)#2# 9ucles condicionales :mientras; y :!asta;###############################20 )#)#)# 9ucle de seleccin interactiva##################################################2' 4. Funciones...................................................................................22 5. Caractersticas especia es..........................................................25 %#'# +ro$ramas interactivos###################################################################2% %#2# Control de trabajos##########################################################################26 %#)# <nt7rprete de uso restrin$ido##########################################################2/ !. "e#erencias................................................................................2$
/& I% r*)-cci$%
Un caso especial es el de las l0neas =ue comien-an por la almo!adilla #&. =ue se consideran comentarios# >ambi7n puede insertarse un comentario en mitad de una l0nea. a la derec!a de una orden#
# Esto es un comentario ls -al # lista el contenido del directorio actual
+ueden a$ruparse varias rdenes en la misma l0nea separadas por el punto y coma ;&. =ue se ejecutan siempre en secuencia# ,simismo. si un mandato es muy lar$o o en$orroso. puede usarse el carcter de escape \& para continuar escribi7ndolo en la l0nea si$uiente#
cd /var/log; grep i error * find /tmp /var/tmp ! user root type f \ -perm +2 print
E4iste una manera especial para ejecutar un $uin. precedi7ndolo por el si$no punto. =ue se utili-a para e4portar todas las variables del pro$rama al entorno de ejecucin del usuario para ms informacin sobre las variables de entorno revisar el Cap0tulo 2&# El si$uiente ejemplo ilustra el modo de ejecutar
apac ectl start . miprofile source miprofile ! E$ecuci%n normal de un gui%n. ! E$ecuci%n e#portando las variables. ! E"uivalente a la l,nea anterior.
Un :script; puede @y debe@ comen-ar con la marca #! para especificar el camino completo y los parmetros del int7rprete de mandatos =ue ejecutar el pro$rama# Esta marca puede usarse para ejecutar cual=uier int7rprete instalado en la m=uina 9,S?. 9S?. +E31. ,AB. etc#&# El si$uiente cuadro muestra un pe=ueo ejemplo de $uin 9,S?#
!!/bin/bas
! e$emplo-. informe de la capacidad de la cuenta ec o /0suario. '01E2/ ec o /3apacidad de la cuenta./ du s '+45E ! suma total del directorio del usuario
<ncluir comentarios para los blo=ues o mandatos importantes. =ue re=uieran cierta aclaracin# ,$re$ar comentarios y ayudas sobre la ejecucin del pro$rama# 8epurar el cdi$o para evitar errores. procesando correctamente los parmetros de ejecucin# Co desarrollar un cdi$o e4cesivamente enrevesado. ni complicado de leer. aun=ue 7sto !a$a a!orrar l0neas de pro$rama# Utili-ar funciones y las estructuras de pro$ramacin adecuadas para evitar repetir cdi$o reiterativo# ms
1os nombres de variables. funciones y pro$ramas deben ser descriptivos. pero sin confundirse con otros de ellos. ni con los mandatos internos o e4ternosD no deben ser ni muy lar$os ni muy cortos# >odos los nombres de funciones y de pro$ramas suelen escribirse en letras minEsculas. mientras =ue las variables acostumbran a definirse en mayEsculas#
.& E2p"%si*%es&
Como se !a observando en el seminario anterior. la l0nea de comandos se divide en una serie de elementos =ue representan cierto si$nificado en la semntica del int7rprete# 1a expansin es un procedimiento especial =ue se reali-a sobre dic!os elementos individuales# 9,S? dispone de / topos de e4pansiones. =ue se$En su orden de procesado son F2G: Expansin de arbitrarias# a%es: modifica la e4presin para crear cadenas
Expansin de ti de: reali-a sustituciones de directorios# Expansin de par&metro ' %aria( e: tratamiento $eneral de variables y parmetros. incluyendo la sustitucin de prefijos. sufijos. valores por defecto y otros operaciones con cadenas# )ustitucin de mandato: procesa el mandato y devuelve su salida normal# Expansin num7rico# aritm*tica: sustituye la e4presin por su valor
)ustitucin de proceso: comunicacin de procesos mediante tuber0as con nombre de tipo cola H<HI&# +i%isin en pa a(ras: separa la l0nea de mandatos resultante en palabras usando los caracteres de divisin incluidos en la variable IFS# Expansin de #ic,ero: permite buscar patrones con comodines en los nombres de fic!eros#
3*r#" *
[Pre]{C1,C2[,...]}[Suf]
Descripci$% El resultado es una lista de palabras donde se le aade a cada una de las cadenas de las llaves y separadas por comas un prefijo y un sufijo opcionales.
Descripci$% Directorio personal del usuario indicado. Si no se expresa nada $HOME. Directorio actual ($PWD). Directorio anterior ($OLDPWD).
~+ ~-
Es recomendable definir un alias en el perfil de entrada del usuario para cambiar al directorio anterior. ya =ue la sinta4is del comando es al$o en$orrosa# +ara ello. aadir la si$uiente l0nea al fic!ero de confi$uracin ~/.bash !#
alias cda=>cd <->
Descripci$% Se hace referencia a otra variable y se obtiene su valor (e2p"%si$% i%)irec "). Se devuelve el parmetro si !ste es nulo" se obtiene el 0"l*r p*r )e6ec *. Si el parmetro es nulo se le "si+%" el 0"l*r p*r )e6ec * y se expande. Se obtiene el parmetro si es nulo se manda un #e%s"4e )e err*r. Se devuelve el 0"l*r "l er%" i0* si el parmetro no es nulo. V"l*r )e s-(c")e%" del parmetro" desde el punto inicial hasta el final o hasta la lon#itud indicada. Devuelve los nombres de variables $ue empie%an por el prefijo. El "#"7* en caracteres del parmetro o en elementos de una matri%. Se elimina del valor del parmetro la m&nima (o la mxima) comparaci'n del patr'n" comen%ando por el principio del parmetro. Se elimina del valor del parmetro la m&nima (o la mxima) comparaci'n del patr'n" buscando por el final del parmetro. En el valor del parmetro se reempla%a por la cadena indicada la primera comparaci'n del patr'n (o todas las comparaciones).
${Parm"-Val}
${Parm"#Val}
${Parm"$Cad}
${Parm"+Val}
${Parm(Patrn} ${Parm((Patrn}
${Parm/Patrn/Cad} ${Parm//Patrn/Cad}
9,S? proporciona unas potentes !erramientas para el tratamiento de cadenas. sin embar$o la sinta4is puede resultar en$orrosa y re=uiere de e4periencia para depurar el cdi$o# +or lo tanto. se recomienda crear
$uiones =ue resulten fciles de comprender. documentando claramente las rdenes ms complejas# Unos ejemplos para estudiar:
! 1i el -er par&metro es nulo7 asigna el usuario "ue lo e$ecuta. 010)2?4='6-.-@A oami@8 ! 1i no est& definida la variable 34B05C17 el anc o es de DE. )C3+4='634B05C1.-DE8 ! 1i no e#iste el -er par&metro7 pone mensa$e de error y sale. . '6-.F/Error. 'E fic ero/ ! 4btiene la e#tensi%n de un fic ero G"uita EI*='6J?3+E24!!*.8 asta el puntoH.
! Kuita la e#tensi%n LrpmM al camino del fic ero. 2(5='6J?3+2(5N.rpm8 ! 3uenta el nO de caracteres de la variable 3B)PE. 3)2)3*E2E1='6!3B)PE8 ! 2enombra el fic ero de enero a Jebrero. C0EP4='6)C*?Q04/enero/febrero8 ! )Rade nuevo elemento a la matriS GmatriS[tamaRo]=elementoH. matriS['6!matriS[*]8]=/nuevo/
Descripci$% Sustituci'n literal del mandato y sus parmetros. Sustituci'n de mandatos permitiendo caracteres de escape.
Cuando la sustitucin de mandatos va en una cadena entre comillas dobles se evita =ue posteriormente se ejecute una e4pansin de fic!eros#
'0
3*r#" *
ic! ,)Lista* "escr,)Lista* ic! -)Lista* "escr-)Lista*
Descripci$% (a lista de 'rdenes escribe en el fichero para $ue !ste pueda ser le&do por otro proceso. )uando otro proceso escribe en el fichero" el contenido de !ste se pasa como parmetro de entrada a la lista de 'rdenes.
el int7rprete reali-a las sustituciones y @antes de ejecutar la orden@ divide la l0nea en las si$uientes palabras#
LduM L- sM L/ ome/ramonM
'2
3*r#" *
%
Descripci$% E$uivale a cual$uier cadena de caracteres" incluida una cadena nula. E$uivale a cual$uier carcter *nico. E$uivale a cual$uier carcter $ue apare%ca en la lista. +ueden incluirse ran#os de caracteres separados por #ui'n (-). Si el primer carcter de la lista es ." se comparan los caracteres $ue no formen parte de ella.
$ &Lista'
')
Descripci$% Ejecuta el mandato en ,- plano. El proceso tendr menor prioridad y no debe ser interactivo.. .uber&a. /ediri#e la salida de la primera orden a la entrada de la se#undo. )ada mandato es un proceso separado. Ejecuta varios mandatos en la misma l&nea de c'di#o. Ejecuta la ,0 orden si la 10 lo hace con !xito (su estado de salida es 2). Ejecuta la ,0 orden si falla la ejecuci'n de la anterior (su c'di#o de salida no es 2). Ejecuta la lista de 'rdenes en un subproceso con un entorno com*n. 3lo$ue de c'di#o ejecutado en el propio int!rprete. +osibilita escribir listas de 'rdenes en ms de una l&nea de pantalla. Se utili%a para ejecutar mandatos lar#os.
Man1 6 Man2
Man1 66 Man2
)Lista*
Ka se !a comentado previamente la sinta4is de al$unas de estas combinaciones de mandatos# Sin embar$o. el si$uiente ep0$rafe presta atencin especial a las listas de rdenes condicionales#
'2
Descripci$% Es r-c -r" c*%)ici*%"l si#ple4 se ejecuta la lista de 'rdenes si se cumple la expresi'n. En caso contrario" este c'di#o se i#nora.
'%
7? Expresin1; <h;8 D/9=>;E; [ ;/7? Expresin2; <h;8 %lo&ue2; ... ] [;/s; %lo&ue'; ] ?7
Es r-c -r" c*%)ici*%"l c*#ple4"4 el formato completo condicional permite anidar varias 'rdenes" adems de poder ejecutar distintos blo$ues de c'di#o" tanto si la condici'n de la expresi'n es cierta" como si es falsa.
,un=ue el formato de codificacin permite incluir toda la estructura en una l0nea. cuando 7sta es compleja se debe escribir en varias. para mejorar la comprensin del pro$rama# En caso de teclear la orden compleja en una sola l0nea debe tenerse en cuenta =ue el carcter separador ;& debe colocarse antes de las palabras reservadas: <h;8. ;/s;. ;/7? y ?7# ?ay =ue resaltar la versatilidad para teclear el cdi$o de la estructura condicional. ya =ue la palabra reservada <h;8 puede ir en la misma l0nea =ue la palabra 7?. en la l0nea si$uiente sola o conjuntamente con la primera orden del blo=ue de cdi$o. lo =ue puede aplicarse tambi7n a la palabra ;/s;&# +uede utili-arse cual=uier e4presin condicional para evaluar la situacin. incluyendo el cdi$o de salida de un mandato o una condicin evaluada por la orden interna test# Este Eltimo caso se e4presa colocando la condicin entre corc!etes formato: & Condicin 'H# J7anse al$unos sencillos ejemplos de la estructura condicional simple e4tra0dos del :script; /etc/rc.d/rc.sysinit # Ctese la diferencia en las condiciones sobre la salida normal de una orden @e4presada mediante una sustitucin de mandatos@ y a=uellas referidas al estado de ejecucin de un comando si la orden se !a ejecutado correctamente o si se !a producido un error&#
! Ba condici%n m&s simple escrita en una l,nea. ! si 2E10B*XEV entonces rc=7? & $FESGLT -@< H '; <h;8 !#E; ?7 ! ! Ba condici%n doble. ! si la variable +41*C)5E es nula o vale LGnoneHMV entonces ... 7? & -2 I$HOSTJAMEI -9 I$HOSTJAMEI # I)898;*I '; <h;8 HOSTJAME#/9!a/h9s< ?7 ! ! 3ombinaci%n de los 2 tipos de condiciones. ! si e#iste el fic ero /fastboot o la cadena LfastbootM est& ! en el fic ero /proc/cmdlineV entonces ... 7? & -? /?as<b99< ' 66 @ ;0 -7= I?as<b99<I /0 9!/!1B/78; \ C-/B;:/8>//; <h;8 ?as<b99<#K;s ?7
Ibs7rvese los ejemplos para las estructuras condicionales complejas. basados tambi7n en el pro$rama de confi$uracin /etc/rc.d/rc.sysinit #
'6
! Estructura condicional comple$a con 2 blo"ues. ! si e#iste el fic ero especificado7 se e$ecutaV si no7 se da ! el valor LnoM a la variable CE*c42:?CQ 7? & -? /;<!/sKs!98?7@/8;<L9 M '; <h;8 . /;<!/sKs!98?7@/8;<L9 M ;/s; JETWOFNIJO#89 ?7 ! Estructura anidada. ! si rc=EV entonces ...V si no7 si rc=-V entonces ...V en caso ! contrarioV no se ace nada. 7? & I$ !I # IHI '; <h;8 s>!!;ss I$STFIJOI ;!h9 ;/7? & I$ !I # IEI '; <h;8 0ass;B I$STFIJOI ;!h9 ?7
Descripci$% Es r-c -r" selec i0" #9l iple4 si la variable cumple un determinado patr'n" se ejecuta el blo$ue de c'di#o correspondiente. )ada blo$ue de c'di#o acaba con 5;;6. (a comprobaci'n de patrones se reali%a en secuencia.
1as posibles opciones soportadas por la estructura selectiva mEltiple se e4presan mediante patrones. donde puede aparecer caracteres comodines. evalundose como una e4pansin de fic!eros. por lo tanto el patrn para representar la opcin por defecto es el asterisco %&# 8entro
'5
de una misma opcin pueden aparecer varios patrones separados por la barra vertical 6&. como en una e4presin l$ica I# Si la e4presin =ue a comprobar cumple varios patrones de la lista. slo se ejecuta el blo=ue de cdi$o correspondiente al primero de ellos. ya =ue la evaluacin de la estructura se reali-a en secuencia# Ibs7rvese el si$uientes ejemplos:
! 1egan el valor de la variable 0*3. ! - si es LyesM o LtrueM7 ... ! - si es LnoM o LfalseM7 ... !as; I$GTPI 78 K;s6< >;* PLOPNFLAOS#I$PLOPNFLAOS --><!I; PLOPNDEF#I$PLOPNDEF )><!*I; ;; 896?a/s;* PLOPNFLAOS#I$PLOPNFLAOS --/9!a/<71;I; PLOPNDEF#I$PLOPNDEF )/9!a/<71;*I; ;; ;sa!
3.3. *ucles.
1os bucles son estructuras reiterativas =ue se ejecutan repetitivamente. para no tener =ue teclear varias veces un mismo blo=ue de cdi$o# Un bucle debe tener siempre una condicin de salida para evitar errores provocados por bucles infinitos# 1a si$uiente tabla describe las 2 rdenes especiales =ue pueden utili-arse para romper el modo de operacin t0pico de un bucle# Or)e%
b ;aM
Descripci$% R-p -r" i%#e)i" " )e -% (-cle (debe evitarse en pro#ramaci'n estructurada para impedir errores de lectura del c'di#o).
'/
!98<78>;
S"l * " l" c*%)ici$% )el (-cle (debe evitarse en pro#ramaci'n estructurada para impedir errores de lectura del c'di#o).
1os si$uientes puntos describen los distintos bucles =ue pueden usarse tanto en un $uin como en la l0nea de mandatos de 9,S?#
1a si$uiente tabla describe los formatos de los bucles iterativos $en7ricos de tipo :para cada;& interpretados por 9,S?# :-cle
?9 Var [78 Lista]; B9 %lo&ue B98; F9 B98; ))Exp1;)Exp2;)Exp***
Descripci$% :-cle i er" i0*4 se ejecuta el blo$ue de mandatos del bucle sustituyendo la variable de evaluaci'n por cada una de las palabras incluidas en la lista. :-cle i er" i0* )e es il* C4 se eval*a) Exp1" mientras) Exp2 )sea cierta se ejecutan en cada iteraci'n del bucle el blo$ue de mandatos y) Exp*) (las 7 expresiones deben ser aritm!ticas).
B9 %lo&ue
'6
Descripci$% :-cle i er" i0* =#ie% r"s>4 se ejecuta el blo$ue de 'rdenes mientras $ue la condici'n sea cierta. (a expresi'n de evaluaci'n debe ser modificada en al#*n momento del bucle para poder salir. :-cle i er" i0* =h"s ">4 se ejecuta el blo$ue de c'di#o hasta $ue la condici'n sea cierta. (a expresi'n de evaluaci'n debe ser modificada en al#*n momento del bucle para poder salir.
,mbos bucles reali-an comparaciones inversas y pueden usarse indistintamente. aun=ue se recomienda usar a=u7l =ue necesite una
20
condicin ms sencilla o le$ible. intentando no crear e4presiones ne$ativas# J7ase el si$uiente ejemplo:
! 5ientras aya par&metros "ue procesar7 ... Lh7/; & $# !# H ' ; B9 0 9!;ssB7 I$EI sh7?< B98;
E4ercici* 3&55 convertir este bucle Lh7/; en un bucle >8<7/ y en uno ?9 de estilo C#
i=e A ile [ 'i -ge E ] V do if [ -f /var/log/9syms.'i ] V t en mv /var/log/9syms.'i /var/log/9syms.'GG'i+-HH fi i='GG'i--HH done
Descripci$% :-cle )e selecci$% i% er"c i0"4 se presenta un men* de selecci'n y se ejecuta el blo$ue de c'di#o correspondiente a la opci'n ele#ida. El bucle se termina cuando se ejecuta una orden b ;aM. (a variable PSQ se usa como punto indicativo.
2'
8& 3-%ci*%es&
Una funcin en 9,S? es una porcin de cdi$o declarada al principio del pro$rama. =ue puede reco$er parmetro de entrada y =ue puede ser llamada desde cual=uier punto del pro$rama principal o desde otra funcin. tantas veces como sea necesario# El uso de funciones permite crear un cdi$o ms comprensible y =ue puede ser depurado ms fcilmente. ya =ue evita posibles errores tipo$rficos y repeticiones innecesarias# 1os parmetros recibidos por la funcin se tratan dentro de ella del mismo modo =ue los del pro$rama principal. o sea los parmetros posicionales de la funcin se corresponden con las variables internas 'H. $E. etc# El si$uiente cuadro muestra los formatos de declaracin y de llamada de una funcin# Decl"r"ci$%
[?>8!<798] 'om(re uncin )* { %lo&ue ... [ } ;<> 8 [Valor] ] ...
LL"#")"
'om(re uncin)[Parmetro1)...]
1a funcin ejecuta el blo=ue de cdi$o encerrado entre sus llaves y @al i$ual =ue un pro$rama@ devuelve un valor num7rico# En cual=uier punto del cdi$o de la funcin. y normalmente al final. puede usarse la clusula ;<> 8 para terminar la ejecucin y opcionalmente indicar un cdi$o de salida# 1as variables declaradas con la clusula /9!a/ tienen un mbito de operacin interno a la funcin# El resto de variables pueden utili-arse en cual=uier punto de todo el pro$rama# Esta caracter0stica permite crear funciones recursivas sin =ue los valores de las variables de una llamada interfieran en los de las dems# En el ejemplo del si$uiente cuadro se define una funcin de nombre salida. =ue recibe ) parmetros# El principio del cdi$o es la definicin de la funcin la palabra ?>8!<798 es opcional& y 7sta no se ejecuta !asta =ue no se llama desde el pro$rama principal# ,simismo. la variable *5(Q2E( se declara en el pro$rama principal y se utili-a en la funcin manteniendo su valor correcto#
22
!/bin/bas ! comprus - comprueba la e#istencia de usuarios en listas y en ! el arc ivo de claves Gnormal y C?1H. ! 0so. comprus F Y cadena ! F. ayuda. ! 2am%n Q%meS - 1eptiembre -.UUD. ! 2utina de impresi%n. ! (ar&metros. ! - - te#to de cabecera. ! 2 - cadena a buscar. ! Z - arc ivo de bas"ueda. salida GH 6 if egrep /'2/ 'Z X'*5(Q2E( 2X/dev/nullV t en ec o / '-./ cat '*5(Q2E( fi 8 !! (24Q2)5) (2?C3?()B !! (24Q='Gbasename 'EH *5(Q2E(=/tmp/grep'' T?2B?1*)1=/ ome/cdc/listas if [ /#'*/ = /#F/ ] t en ec o / 0so. '(24Q F Y cadena (rop%sito. '(24Q. ;as"ueda de usuarios. cadena. e#presi%n regular a buscar. / e#it E fi if [ '! -ne - ]V t en ec o /'(24Q. (ar&metro incorrecto. 0so. '(24QH F Y cadena F. ayuda/ X^2 e#it fi ec o for i in 'T?2B?1*)1/*.listaV do salida /'-/ /'Gbasename 'i Y sed >s/.lista//>H/ /'i/ done salida /'-/ /passAd/ //etc/passAd/ [ -e /'*5(Q2E(/ ] ^^ rm -f '*5(Q2E(
E4ercici* 8&/5 desarrollar en 9,S? una funcin =ue reciba un Enico parmetro. una cadena de caracteres. y muestre el Eltimo carcter de dic!a cadena# 8ebe tenerse en cuenta =ue el primer carcter de una cadena tiene como 0ndice el valor 0# E4ercici* 8&.5 pro$ramar una funcin 9,S? =ue reciba una cadena de caracteres y =ue la imprima centrada en la pantalla# >ener en cuenta =ue 2)
el anc!o del terminal puede estar definido en la variable de entorno 34B05C1. en caso contrario usar un valor por defecto de /0 columnas#
22
2%
M"%)" *
;aB [-0 +Cadena+] [Var1 ...]
Descripci$% Asi+%" l" e% r")" " 0"ri"(les4 lee de la entrada estndar y asi#na los valoras a las variables indicadas en la orden. +uede mostrarse un mensaje antes de solicitar los datos. Si no se especifica nin#una variable" FEPLR contiene la l&nea de entrada.
;!h9 [-8])Cadena
M-es r" -% #e%s"4e4 manda el valor de la cadena a la salida estndar con la opci'n n no se hace un salto de l&nea. M-es r" -% #e%s"4e 6*r#" e")*4 e$uivalente a la funci'n printf del len#uaje )" manda un mensaje formateado a la salida normal" permitiendo mostrar cadena y n*meros con una lon#itud determinada.
0 78<?
ormato)Parm1 ...
Como ejercicio se propone e4plicar paso a paso el funcionamiento del bucle anterior y los valores =ue se van asi$nando a las distintas variables en cada iteracin#
26
1os procesos asociados a una tuber0a tienen identificadores +<8& propios. pero forman parte del mismo trabajo independiente# 1a si$uiente tabla describe las instrucciones asociadas con el tratamiento de trabajos# M"%)" *
Mandato)5
Descripci$% E4ec-ci$% e% .A pl"%*4 lan%a el proceso de forma desatendida" con menor prioridad y con la posibilidad de continuar su ejecuci'n tras la desconexi'n del usuario. Re *r%" " e4ec- "r e% .A pl"%*4 contin*a la ejecuci'n desatendida de un procesos suspendido. Re *r%" " e4ec- "r e% /er pl"%*4 vuelve a ejecutar el proceso asociado al trabajo indicado de forma interactiva. M-es r* l*s r"("4*s e% e4ec-ci$%" indicando el n- de trabajo y los +8D de sus procesos. M"%)" -%" se7"l " pr*ces*s * r"("4*s" para indicar una excepci'n o un error. +uede especificarse tanto el n- de seal como su nombre. P"r" l" e4ec-ci$% )el pr*ces*" hasta $ue se recibe una seal de continuaci'n. C"p -r" )e se7"l4 cuando se produce una determinada seal (interrupci'n) en el proceso" se ejecuta el mandato asociado. (as seales especiales EI?* y E22 se capturan respectivamente al finali%ar el 5script6 y cuando se produce un error en una orden simple. Esper" h"s " B-e er#i%e -% pr*ces* * r"("4*4 detiene la ejecuci'n del proceso hasta $ue el proceso hijo indicado hay finali%ado su ejecuci'n.
b@ (',-ra(a.o
?@ (',-ra(a.o
U9bs
s>s0;8B
La7< [PI"1Y(-ra(1]
25
! 1e elimina el fic ero temporal si en el programa aparecen las Z seRales E GfinH7 -7 27 Z y -e. < a0 A 1 -? ${FIPHTEMP} ; ;37<A H E C Q EV ... ! 4rdena de forma independiente las listas de fic eros de ! usuarios7 espera a finaliSar ambos procesos y compara ! los resultados. )!a< a/>1HQ.sa/ 0 9?HQ.sa/ 0asHQ.sa/ 6 s9 < 6 >87= - >s>HQ* 5 )!a< a/>1HW.sa/ 0 9?HW.sa/ 0asHW.sa/ 6 s9 < 6 >87= - >s>HW* 5 La7< B7?? >s>HQ >s>HW
9,S? restrin$ido modifica las si$uientes caracter0sticas Co se puede usar la orden !B#
F2G
Co se pueden modificar las variables 1+EBB. ()*+. ECP ni ;)1+_ECP# Co se pueden ejecutar mandatos indicando su camino. slo se ejecutarn a=uellos =ue se encuentren en los directorios especificados por el administrador## Co se pueden especificar caminos de fic!eros como ar$umento del mandato :.;# Co se pueden aadir funciones nuevas en los fic!eros de inicio# Co se admiten redirecciones de salida# Co se puede reempla-ar el int7rprete 39,S? no se puede ejecutar la orden ;3;!&# Co se pueden aadir o =uitar mandatos internos# Co se puede modificar el modo de operacin restrin$ido#
2/
6& Re6ere%ci"s&
'# 9# Ho4. C# 3amey: :9,S? '&; p$inas de manuales de 9,S? v2#%b&;# 2#002# 2# C# 3amey. 9# Ho4: :9as! 3eference Lanual. v2#%b;# Hree SoftOare Houndation. 2#002# )# LiPe M. trad# M# 3odr0$ue- ,lboric!: :+ro$ramacin en 9,S? @ CILI de <ntroduccin;# 2#000# 2# L# Cooper: :,dvanced 9as!*Scriptin$ Muide. v2#';# 1inu4 8ocumentation +roject. 2#00)# %# 3# L# Mme- 1abrador: :,dministracin ,van-ada de Sistemas 1inu4 )( edicin&;# Secretariado de Hormacin del +,S Universidad de Sevilla&. 2#002# i# +royecto MCU#: !ttp:""OOO#$nu#or$" ii# >!e 1inu4 8ocumentation +roject >18+&: !ttp:""OOO#tldp#or$" iii# +royecto ?ispa1inu4 18+*ES&: !ttp:""OOO#!ispalinu4#es"
26