9.1 Introducción En este capítulo, vamos a discutir cómo las herramientas que has aprendido hasta ahora se pueden convertir en los scripts reutilizables 9.2 Linux undamentos !b"etivos del examen En este capítulo se har# car$o de los temas de los si$uientes ob"etivos del examen Linux Essentials% &ema &ema '% El (oder de la línea de comandos )peso% 1*+ '.'% olviendo comandos en un script (eso% - escripción% &urnin$ comandos repetitivos en e n $uiones simples. (rincipales /reas de 0onocimiento% edición de texto b#sico scriptin$ #sico shell La si$uiente es una lista parcial de los usados archivos, t3rminos 4 utilidades% 5 bin 5 sh ariables 6r$umentos para los bucles eco Estado de la salida Las cosas que son bueno saber% pico, nano, vi )sólo lo b#sico para par a la creación de secuencias de comandos+ ash 7i mientras, declaraciones de caso leer 4 prueba, 4 8comandos
9.2 Linux Essentials Exam !b"ectives Thi schapt erwi l l c ov ert het opi c sf ort hef ol l owi ngLi nuxEs sent i al sex am obj ec t i v es : Topi c3:ThePoweroft heComm mmandLi ne( wei ght :10) •
3. 3:Tur ni ngComm mmandsi nt oaScr i pt •
Wei ght :4
•
Des c r i pt i on:T ur ni ngr epe t i t i v ec ommandsi nt os i mpl es cr i pt s .
•
KeyKnowl edgeAr eas:
•
•
Bas i ct ex tedi t i ng
•
Bas i cs hel l s c r i pt i ng
Thef ol l owi ngi sapar t i al l i s toft heus edfi l es ,t er ms ,andut i l i t i es : •
•
/ bi n/ s h
•
Var i abl es
•
Ar gume ment s
•
f orl oops
•
echo
•
Exi ts t at us
Thi ngst hatar eni c et ok no w: •
pi c o,nano,v i( onl ybas i c sf orc r eat i ngs cr i pt s )
•
Bash
•
i f ,whi l e,c as es t at ement s
•
r eadandt est ,and[commands
9.' 7cripts de 7hell en una c#scara de nuezn script de shell es un archivo de comandos e"ecutables que se han almacenado en un archivo de texto. 0uando se e"ecuta el archivo, se e"ecuta cada comando. 7hell scripts tienen acceso a todos los comandos de la shell, inclu4endo la ló$ica. (or tanto, un script puede detectar la presencia de un archivo o buscar salida particular 4 cambiar su comportamiento en consecuencia. sted puede construir scripts para automatizar partes repetitivas de su traba"o, lo que libera su tiempo 4 $arantiza la coherencia cada vez que utilice el $uión. (or e"emplo, si e"ecuta los mismos cinco comandos de todos los días, puede convertirlos en un script de shell que reduce su traba"o a un comando.n script puede ser tan simple como un comando %echo :;
sh test.sh ; .5test.sh ?bash% .5test.sh % (ermiso dene$ado bob% tmp > chmod @ x .5test.sh bob% tmp > .5test.sh
En el e"emplo anterior, en primer lu$ar, la secuencia de comandos se e"ecuta como un ar$umento a la c#scara. 6 continuación, el script se e"ecuta directamente desde el shell. Es raro tener el directorio actual en la ruta de bAsqueda binaria )> (6&<+ por lo que el nombre tiene el preB"o :.5: para indicar que se debe e"ecutar desde el directorio actual.El error :(ermiso dene$ado: si$niBca que el $uión no se ha marcado como e"ecutable. n chmod r#pida despu3s 4 el $uión Cunciona. chmod se usa para cambiar los permisos de un archivo, que se explicar# en detalle en un capítulo posterior.
9.' 7hell 7cripts in a Gutshell hel l s c r i pt As i safi l eo fe x ec ut ab l ec omma nd st ha th asbee ns t o r e di nat e x tfi l e .Wh ent h e fi l ei sr u n,ea chc omma ndi sex e c ut e d.Sh el l s c r i p t sha v ea c ce sst oa l l t hec omman dsoft h e s hel l ,i nc l udi ngl ogi c.As cr i ptc ant her ef or et es tf ort hepr es enc eofafil eorl ookf or
par t i c ul arout putandchange i t sbehav i orac cor di ngl y .Youc anbui l ds cr i pt st oaut omat e r epe t i t i v epar t sofy ourwor k ,wh i c hf r eesy ourt i meandens ur escons i s t enc yeac ht i mey ou
u set h es c r i p t .Fo ri n s t a nc e,i fy o ur u nt h es amefi v ec omma nd se v er yda y ,y o uc ant u r n t h em i nt oas he l l s c r i p tt h atr e du ce sy o urwo r kt oon ec omma nd. Ascr i ptcanbeassi mpl easonecommand: echo “Hello, World!”
Thes cr i pt ,test.sh,c ons i s t sofj us tonel i net hatpr i nt st hes t r i ng“ Hel l o,Wor l d! ”t ot he c on so l e . Runni ngasc r i ptc anbedoneei t herb ypas s i ngi tasanar gumentt oy ours he l l orb y r unni ngi tdi r ec t l y : bob:tmp $ sh test.sh
Hello, World! bob:tmp $ ./test.sh
-bash: ./test.sh: Permission denied bob:tmp $ chmod +x ./test.sh bob:tmp $ ./test.sh
Hello, World
I nt hee xampl eabo ve,fi r s t ,t hes cr i pti sr unasanar gumentt ot hes hel l .Nex t ,t hes cr i pti s r undi r ec t l yf r om t hes hel l .I ti sr ar et ohav et hec ur r entdi r ec t or yi nt hebi nar ysear chpat h ( $PATH)s ot henamei spr efi x edwi t h“ . / ”t oi ndi c at ei ts houl dber unoutoft hec ur r ent di r ect or y . Th ee r r o r“ Pe r mi s s i o nd en i e d”me an st ha tt h es c r i p th asno tbe enmar k e da se x ec ut ab l e .A qui c kchmod l at erandt hes cr i ptwor k s.chmod i sus edt oc hanget heper mi s s i onsofafi l e, whi c hwi l l beexpl ai nedi ndet ai l i nal at erchapt er . Ther ear ev ar i oussh el l swi t ht hei ro wnl anguages y nt ax .Ther ef or e ,mor ec ompl i c at ed s cr i pt swi l l i ndi c at eapar t i c ul ars hel l bys pec i f y i ngt heabsol ut epat ht ot hei nt er pr et era st he fi r s tl i ne,pr efi x edb y“ #! ”assho wn: #!/bin/sh echo “Hello, World!”
or #!/bin/bash echo “Hello, World!”
Thet woc har ac t er s ,“ #! ”ar et r adi t i onal l ycal l edt hehas handt hebangr es pec t i v el y ,whi c h l eadst ot hes hor t en edf or m of“shebang” whent he y’ r eus edatt hebegi nni ngofas c r i pt . I nc i dent al l y ,t hes hebang( orc r unc hbang)i sus edf ort r adi t i onal s hel l s cr i pt sandot hert ex t bas edl anguagesl i k ePer l ,Rub y ,andPy t hon.An yt e xtfi l emar k edasex e cut abl ewi l l ber un
undert hei nt er pr et erspeci fi edi nt hefi r s tl i neasl ongast hes c r i pti sr undi r ec t l y .I ft hes c r i pt i si nv ok eddi r ec t l yasanar gumentt oani nt er pr et er ,s uc hassh script orbash script, t hegi v ens hel l wi l l beus ednomat t erwhat ’ si nt hes hebangl i ne. I thel pst obec omec omf or t abl eus i ngat ex tedi t orbef or ewr i t i ngs hel l s cr i pt s ,s i nc ey ouwi l l needt oc r eat efi l esi npl ai nt ex t .T r a di t i onal offic et ool sl i k eLi br eOffic et hatout putfi l e f or mat scont ai ni ngf or mat t i ngandot heri nf or mat i onar enotappr opr i at ef ort hi st as k
9.4 Secuencias de comandos de edición de Shell UNIX tiene muchos editores de texto, los méritos de uno sobre el otro son a menudo objeto de acalorados debates. Dos se mencionan espec!icamente en el plan de estudios "#I $undamentos% &l editor nano 'NU es un editor mu( simple mu( adecuado para la edición de pe)ue*os archi+os de texto. &l &ditor de isual, +i, o su +ersión m-s reciente, I mejoraron +im/, es un editor mu( potente, pero tiene una cur+a de aprendi0aje empinada. Nos centraremos en nano. &scriba test.sh nano ( +er- una pantalla similar a esta% Typenano test.sh andy ou’ l l s eeas cr eens i mi l art ot hi s :
Na noha sf e wf e at u r e s
Nano tiene al1unas caractersticas para ponerse en su camino. Simplemente escriba con el teclado, con las teclas de !lecha para mo+erse ( el botón de borrar 2 retroceso para borrar el texto. 3 lo lar1o de la parte in!erior de la pantalla se puede +er al1unos comandos disponibles para usted, )ue son sensibles al contexto ( cambian dependiendo de lo )ue est-s haciendo. Si usted est- directamente en la m-)uina "inux en s, a di!erencia de la conexión en la red, también puede utili0ar el ratón para mo+er el cursor ( resaltar texto. #ara !amiliari0arse con el editor, comience a escribir un simple script de shell mientras nano en el interior%
Not et hatt hebot t om
en1a en cuenta )ue la opción de la parte in!erior i0)uierda es 5 X Salir )ue si1ni!ica 6control de la prensa ( X para salir6. #resione 7trl ( X juntos ( la parte in!erior cambiar-n t Not et hatt hebot t oml ef topt i oni s^XExi whi c hmeans“ pr es scont r ol andXt oe xi t ” .Pr es s Ct r l andXt oge t herandt hebo t t om wi l l c hange
bo t t om wi l l c hange:
Att hi spoi nt ,y ouc ane xi tt hepr ogr am wi t hout
&n este punto, se puede salir del pro1rama sin 1uardar pulsando la tecla N, o 1uardar primero pulsando 8 para 1uardar. &l +alor predeterminado es 1uardar
el archi+o con el nombre del archi+o actual. #uede pulsar la tecla Intro para 1uardar ( salir.Usted estar- de re1reso en el intérprete de comandos después de 1uardar. ol+er al editor. &sta +e0 presione 7trl ( juntos para 1uardar su trabajo sin salir del editor. "as indicaciones son en 1ran parte el mismo, excepto )ue est-s de +uelta en el editor.&sta +e0, utilice las teclas de !lecha para mo+er el cursor a la lnea )ue tiene 6&l tiempo es6. #ulse 7ontrol ( : dos +eces para cortar las dos ;ltimas lneas en el b;!er de copia. buscar el documento7trl = >, a continuación 7ontrol = ? de b;s)ueda ( reempla0o7trl = ' muestran todos los comandos posibles7trl = 8 la p-1ina 2 hacia arriba 2 abajo7trl = 7 muestran la posición actual en el archi+o ( el tama*o del archi+o 7trl = > search the document 7trl = >, then 7ontrol = ? search and replace 7trl = ' sho@ all the commands possible 7trl = 82 pa1e up 2 do@n 7trl = 7 sho@ the current position in the !ile and the !ileAs si0e 9.B 7onceptos b-sicos de Scriptin1 Cienes tu primera experiencia de scriptin1 anteriormente en este captulo, donde se introdujo un 1uión mu( b-sico )ue corrió un solo comando. &l 1uión comen0ó con la lnea sheban1, diciendo )ue "inux 2 bin 2 bash )ue es ash/ se +a a utili0ar para ejecutar el script. 3parte de la ejecución de comandos, ha( E temas )ue debe !amiliari0arse con% F ariables, )ue contienen in!ormación temporal en el 1uión F 7ondicionales, )ue le permiten hacer cosas di!erentes sobre la base de pruebas )ue escribes F ucles, )ue le permiten hacer la misma cosa una ( otra +e0 9.B.G ariables"as +ariables son una parte cla+e de cual)uier len1uaje de pro1ramación. 3)u se muestra un uso mu( sencilla de +ariables%H 2 bin 2 bash3NI<3" J 6pin1Kino6echo 6
+ariable se le asi1na el contenido de otra +ariableH 2 bin 2 bash3NI<3" J pin1Kino3"' J L 3NI<3"echo 6
9.H.1 ariables
Var i abl esar eak e ypar tofan ypr ogr ammi ngl anguag e.Av er ys i mpl eus eofv ar i abl esi s shownher e: #!/bin/bash
A"A$%pen&'in% echo %"( )a*orite animal is a A"A%
Af t ert hes hebangl i nei sadi r ec t i v et oas si gns omet e xtt oav ar i abl e.Thev ar i abl enamei s ANI MALandt heequal ssi gnas s i gnst hes t r i ng“ pengui n” .Thi nkofav ar i abl el i k eabo xi n whi c hy ouc ans t or et hi ngs .Af t ere xec ut i ngt hi sl i ne,t hebo xc al l ed“ ANI MAL ”c ont ai nst he wo r d“ p en gu i n ” . I ti si mpor t antt hatt her ear enos pac esbet weent henameoft hev ar i abl e,t heequal ss i gn, andt hei t em t obeas s i gnedt ot hev ar i abl e.I fy ouha v eas pac et her e ,y ouwi l l ge tanodd er r ors uc has“ c omman dno tf ound ” .Capi t al i z i ngt henameoft hev ar i abl ei sno tnec es s ar y buti ti saus ef ul c on v ent i ont os epa r at ev ar i abl esf r om c ommandst obee x ec ut ed. Ne xt ,t hes cr i ptec hosas t r i ngt ot hec ons ol e.Thes t r i ngc ont ai nst henameoft hev ar i abl e pr ec ededbyadol l ars i gn.Whent hei nt er pr et ers eest hatdol l ars i gni tr ec ogni z est hati twi l l nt er p ol at i on.Theout bes ubs t i t ut i ngt hec ont ent soft hev ar i abl e,whi c hi scal l edi putoft he s cr i pti st hen“ Myf av or i t eani mal i sapengui n” . Sor emembert hi s :T oa ss i gnt oav ar i abl e,j us tu set henameoft hev ar i abl e.T oac c es st he c ont ent soft hev ar i abl e,pr efi xi twi t hadol l ars i gn.Her e,wes howav ar i abl ebei ng as si gnedt hec ont ent sofanot herv ar i abl e! #!/bin/bash
A"A$pen&'in "H0$A"A echo %"( )a*orite animal is a "H0%
ANI MALc ont ai nst hes t r i ng“ pengui n”( ast her ear enos pac es ,t heal t er nat i v es y nt ax wi t houtusi ngquot esi sshown) .SOMETHI NG i st henassi gnedt hecont ent sofANI MAL ( bec aus eANI MALhast hedol l ars i gni nf r ontofi t ) . I fy ouwant ed,y ouc oul das si gnani nt er pol at eds t r i ngt oav ar i abl e.Thi si squi t ec ommoni n l ar gers c r i pt s ,asy ouc anbui l dupal ar gerc ommandande x ec ut ei t ! Ano t h erwa yt oa ss i g nt oav a r i a bl ei st ou set h eo ut p uto fa no t h erc omma nda st h e c ont e nt soft hev a r i abl eb yenc l os i ngt hec ommandi nbac kt i c k s: #!/bin/bash 1233453136$7p8d7 echo %6o' are in 1233453136%
Thi spat t er ni sof t enus edt opr oc es st e xt .Youmi ghtt ak et e xtf r om onev ar i abl eorani nput fi l ean dp as si tt h r o ug ha no t h erc omma ndl i k esed ora89 t oe xt r ac tc er t ai npar t sandk eep t her es ul ti nav ar i abl e. I ti spos si bl et ogeti nputf r om t heus erofy ours cr i ptandas si gni tt oav ar i abl et hr ought he read command: #!/bin/bash
echo -n %What is (o'r name % read A" echo %Hello A"!%
Readc ana cc eptas t r i ngr i gh tf r om t hek e yboar doraspar tofc ommandr edi r ec t i onl i k ey ou l ear nedi nt hel as tc hapt er . Th er ear es omes pe ci al v a r i ab l e si na dd i t i o nt ot h eo ne sy o us e t .Youc anp as sar g ume nt s t oy ours cr i pt : #!/bin/bash echo %Hello ;%
h Ad ol l a rs i g nf ol l o we db yanu mbe rN c or r es pondst ot heNt ar gumentpas s edt ot hes c r i pt . I fy ouc al l t hee x ampl eabo v ewi t h./test.sh t heout putwi l l be“ Hel l oLi nux ” . The$0 v ar i abl econt ai nst henameoft hes cr i pti t s el f . xi tc odewhi Af t erapr ogr am r uns ,bei tabi nar yoras cr i pt ,i tr et ur nsane c hi sani nt eger be t ween0and255.Youc ant es tt hi st hr ou ght he$ ?v ar i a bl et os eei ft hepr e vi ous c o mma ndc omp l e t e ds u c c es s f u l l y . bob:tmp $ &rep -< root /etc/pass8d bob:tmp $ echo
= bob:tmp $ &rep -< slartibart)ast /etc/pass8d bob:tmp $ echo
;
The&rep c ommandwasus edt ol ookf orast r i ngwi t hi nafil ewi t ht he>< flag,whi chmeans “ qui e t ” .Gr ep,whi l er unni ngi nqui etmode,r et ur ns0i ft hes t r i ngwasf oundand1ot her wi s e. Thi si nf or mat i onc anbeu sedi nac ondi t i onal t oper f or m ana ct i onbas edont heout putof anot hercommand. Li k ewi s ey ouc ans ett hee xi tc odeofy ourowns c r i ptwi t ht heexit command: #!/bin/bash # omethin& bad happened!
exit ;
Th ee x a mp l eab ov es ho wsac omme nt( # ) .An y t h i n ga f t e rt h eh as hma r ki si g no r e dwh i c h c anbeus edt ohel pt hepr ogr ammerl ea v eno t es .The“ e xi t1”r e t ur nsex i tc ode1t ot he c al l er .Thi sev enwor k si nt hes hel l ,i fy our unt hi ss cr i ptf r om t hec ommandl i neandt hen t y pe“ ec ho$?”y ouwi l l s eei tr et ur ns1. Byc on v en t i o n,a ne x i tc od eo f0me an s“ e v er y t h i n gi sOK” .Ex i tc od esgr ea t e rt h an0me an s omeki n do fe r r o rh ap pen ed ,whi c hi ss pe ci fi ct ot h ep r o gr a m.Abo v ey o us a wt ha tg r e p u se s1t omea nt h es t r i n gwa sno tf o un d
9.B.T 7ondicionales3hora )ue usted puede +er ( establecer las +ariables, es el momento de hacer su 1uión do di!erentes !unciones basadas en pruebas, llamada rami!icación. "a sentencia i! es el operador de base para implementar rami!icación.Un b-sico si la declaración es la si1uiente%si al1;ncomando después H Racer esto si al1;ncomando tiene un códi1o de salida de !i&l si1uiente ejemplo se ejecutar- 6al1;ncomando6 en realidad, todo hasta el punto ( coma/ ( si el códi1o de salida es entonces el contenido hasta )ue se lle+ar- a cabo el cierre 6!icción6. Usando lo )ue sabes sobre 1rep, ahora se puede escribir un script )ue hace cosas di!erentes en !unción de la presencia de una cadena en el archi+o de contrase*as%H 2 bin 2 bashsi 1rep P) root 2 etc 2 pass@d después ra0 de eco se encuentra en el archi+o de contrase*asotro ra0 de eco no se encuentra en el archi+o de contrase*as!i3 partir de los ejemplos anteriores, es posible )ue recuerde )ue el códi1o de salida de 1rep es si no se encuentra la cadena. &l ejemplo anterior utili0a esto en una lnea a imprimir un mensaje si ra0 est- en la contrase*a o un mensaje di!erente si no lo es. "a di!erencia a)u es )ue en lu1ar de una 6!icción6 para cerrar el blo)ue i!, ha( una 6cosa6. &sto le permite reali0ar una acción si la condición es +erdadera, ( otro si la condición es !alsa. &l blo)ue else toda+a debe estar cerrada con la palabra cla+e !i.tras tareas comunes son para buscar la presencia de un archi+o o directorio ( para comparar cadenas ( n;meros. &s posible iniciali0ar un archi+o de re1istro si no existe, o comparar el n;mero de lneas en un archi+o de la ;ltima +e0 )ue ejecutó. 6Si6 es claramente el mandato de a(udar a)u, pero C)ué comando usas para hacer la comparaciónQ &l comando de prueba le permite acceder !-cilmente a los operadores de comparación ( prueba de archi+os. #or ejemplo%7omandoDescripciónprobar P! 2 de+ 2 tt(S si existe el archi+oprueba P! 2 De+ 2 tt(S si el archi+o no existe2 si existe el directorio tmp Pd pruebaPx prueba )ue ls sustituir la ubicación de ls lue1o probar si el usuario puede ejecutarprueba G Pe) G si tiene éxito comparación numéricaprueba G Pe) G N P si la comparación !allaprueba G Pne G <-s !-cil, prueba de la desi1ualdad numéricaprueba 6a6 J 6a6 si la comparación de cadenas tiene éxitoprueba 6a6 J 6a6 si las cadenas son di!erentesprueba G Pe) G Po T Pe) T Po es ?% o bien puede ser el mismoprueba G Pe) G Pa T Pe) T Pa es 8% ambos deben ser los mismos&s importante se*alar )ue la prueba se +e en enteros ( de cadena comparaciones di!erente. G ( G son los mismos por comparación numérica, pero no por comparación de cadenas. Siempre ha( )ue tener cuidado de recordar )ué tipo de entrada )ue usted espera.Ra( muchas m-s pruebas, como P1t por ma(or )ue, la manera de probar si un archi+o es m-s reciente )ue el otro, ( muchos m-s. 7onsulte la
p-1ina de manual de prueba para m-s.la prueba es bastante detallado para un comando )ue se usa con tanta !recuencia, por lo )ue es un alias para )ue llamó VWV corchete i0)uierdo/. Si encierra sus condiciones entre corchetes, es lo mismo )ue ejecutar la prueba. #or lo tanto, estas declaraciones son idénticas.si P! test 2 tmp 2 !oo despuési! WP! 2 tmp 2 !oo despuésSi bien es la m-s utili0ada esta ;ltima !orma, es importante entender )ue el corchete es un comando en su propia )ue opera de manera similar a la prueba excepto )ue re)uiere el corchete de cierre.6Si6 tiene una !orma !inal, )ue te permite hacer comparaciones m;ltiples a la +e0 utili0ando 6eli!6 abre+iatura de else i!/.H 2 bin 2 bashi! W6L G6 J 6hola6 después echo 6hola a ti mismo6eli! W6L G6 J 6adiós6 después echo 6a1radable de haberte conocido6 echo 6&spero +ol+er a +erte6otro echo 6(o no entenda )ue6!i&l códi1o anterior se compara el primer ar1umento pasado al 1uión. Si es hola, se ejecuta el primer blo)ue. Si no es as, el script comprueba si es adiós ( echos un mensaje di!erente en tal caso. De lo contrario, se en+a un tercer mensaje. en1a en cuenta )ue la +ariable L G es citado ( el operador de comparación de cadenas se utili0a en lu1ar de la +ersión numérica e)/."os i! 2 eli! 2 pruebas m-s puede lle1ar a ser bastante prolija ( complicada. "a declaración de caso o!rece una !orma di!erente de hacer m;ltiples pruebas m-s !-cil.H 2 bin 2 bashcase 6L G6hola Y hi/ echo 6hola a ti mismo6 3diós/ echo 6a1radable de haberte conocido6 echo 6&spero +ol+er a +erte6 Z/ echo 6(o no entenda )ue6esac"a declaración de caso comien0a con una descripción de la expresión est- probando% 7aso de expresión en la expresión a)u es el coti0ado L G..3 continuación, cada conjunto de pruebas se ejecutan como una coincidencia de patrón terminado por un paréntesis de cierre. &l ejemplo anterior se +e por primera +e0 para 6hola6 o 6hola6 m;ltiples opciones est-n separadas por la barra +ertical Y/, )ue es un operador ? en muchos len1uajes de pro1ramación. 3 continuación )ue son los comandos )ue se ejecutar-n si el patrón de+uel+e +erdadero, )ue se terminan por dos puntos ( comas. &l patrón se repite.&l patrón Z es lo mismo )ue una persona, (a )ue coincide con cual)uier cosa. &l comportamiento de la declaración de caso es similar al i! 2 eli! 2 else en )ue el procesamiento se detiene después de )ue el primer partido. Si nin1una de las otras opciones de jue1o con el Z ase1ura )ue el ;ltimo coincidir-.7on una sólida comprensión de los condicionales usted puede tener sus 1uiones toman acciones sólo si es necesario
9.H.2 0onditionals No wt haty ouc anl ookatands etv ar i abl es ,i ti st i met omak ey ours cr i ptdodi ffer ent anc hi ng.Thei f unc t i onsbas edont es t s ,c al l edbr fs t at ementi st hebas i coper at ort o i mp l e me ntb r a nc h i n g. Abas i ci fs t at ementl ook sl i k et hi s : i) somecommand? then # do this i) somecommand has an exit code o) = )i
Thene xte x ampl ewi l l r un“ s omec ommand”( a ct ual l y , e ve r y t h i ngupt ot hesemi c ol on )andi f t hee xi tc odei s0t hent hec ont ent supunt i l t hec l os i ng“ fi ”wi l l ber un.Us i ngwhaty ouk no w aboutgr ep,y ouc anno w wr i t eas c r i ptt ha tdoesdi ff er entt hi ngsbas edont hepr es enc eofa s t r i ngi nt hepas swor dfi l e: #!/bin/bash
i) &rep -< root /etc/pass8d? then echo root is in the pass8ord )ile else echo root is missin& )rom the pass8ord )ile )i
Fr om pr e vi ousex ampl es ,y oumi ghtr emembert hatt hee xi tc odeofgr epi s0i ft hes t r i n gi s f ound.Thee x ampl eabo v eus est hi si nonel i net opr i ntame ss agei fr oo ti si nt hepas s wor d oradi ffer entmes sagei fi ti s n’ t .Thedi ffer enc eher ei st hati ns t eadofan“ fi ”t oc l os eofft he i fbl oc k,t her e’ san“ el s e” .Thi sl et sy oudooneac t i oni ft hec ondi t i oni st r ue,andanot heri f t hec ondi t i oni sf al s e.Theel s ebl oc kmus ts t i l l bec l os edwi t ht hefik ey wor d. Ot h erc ommo nt a sk sar et ol oo kf o rt hepr e se nc eofafi l eo rd i r e ct or yandt oc omp ar e s t r i ngsandnumber s .Youmi ghti ni t i al i z eal ogfi l ei fi tdoes n’ tex i s t ,orc ompar et henumber ofl i nesi nafi l et ot hel as tt i mey our ani t .“ I f ”i sc l ear l yt hec ommandt ohel pher e,butwhat commanddoyouuset omaket hecompar i son? Th et e s tc o mma ndg i v e sy o ue as yac c e s st oc o mp ar i s o na ndfi l et e s to pe r a t o r s .Fo r exampl e: Command
Descr i pt i on
t est –f/ dev/ t t yS0
0i ft hefil eexi st s
t est!–f/ dev/ t t yS0
0i ft hefil edoesn’ texi st
t es t–d/ t mp
0i ft hed i r ect or yex i s t s
t e s t– x` wh i c hl s `
s u bs t i t u t et h el o c at i o no fl st h ent e s ti ft h eu s erc a ne x e c ut e
t e s t1– eq1
0i fn ume r i cc o mp ar i s o ns u c c ee ds
t es t!1–eq1
NOT–0i ft hec ompar i s onf ai l s
t es t1– ne1
Easi er ,t es tf ornu mer i ci nequ al i t y
t es t“ a”=“ a”
0i ft hes t r i ngc ompa r i s ons uc c eeds
t es t“ a”! =“ a”
0i ft hes t r i ngsar edi ffe r ent
Command
Descr i pt i on
t est1–eq1–o2–eq2 oi sOR:ei t hercanbet hesame t est 1–eq1–a2–eq2 ai sAND:bot hmust bet hesame I ti si mpor t antt onot et hattest l ook sati nt egerands t r i ngc ompar i s onsdi ff er ent l y .01and1 a r et h es a meb ynu me r i cc omp ar i s o n,b utn otb ys t r i n gc o mp ar i s o n.Yo umu s ta l wa y sbe c ar ef ul t or ememberwhatk i ndofi nputy ouex pec t . Ther ear emanymor et est s,suchas>&t f orgr eat ert han,way st ot es ti fonefi l ei snewer t h ant h eo t h er ,a ndma nymo r e .Co ns u l tt h et e s tma np ag ef o rmo r e . test i sf ai r l yver bos ef orac ommandt hatget sus eds of r equent l y ,s ot her ei sanal i asf ori t
c al l ed‘ [ ‘ ( l ef ts quar ebr ac ket ) .I fy ouenc l os ey ourc ondi t i onsi ns quar ebr ack et s ,i t ’ st he sameasr unni ngtest.So,t hes es t at ement sar ei dent i c al . i) test >) /tmp/)oo? then i) @ -) /tmp/)oo? then
Whi l et hel at t erf or mi smos tof t enus ed,i ti si mpor t antt ounder s t andt hatt hes quar e br ac k eti sac ommandoni t sownt hatoper at ess i mi l ar l yt ot es te xc eptt hati tr equi r est he c l os i ngsquar ebr ac k et . “ i f ”hasafi nal f or m,t hatl et sy oudomul t i pl ec ompar i s onsatonet i meus i ng“ el i f ”( s hor tf or el s ei f ) . #!/bin/bash
i) @ %;% $ %hello% ? then echo %hello (o'rsel)% eli) @ %;% $ %&oodb(e% ? then echo %nice to ha*e met (o'% echo % hope to see (o' a&ain% else echo % didnBt 'nderstand that% )i
Thec odeabo vec ompar est hefi r s tar gumentpas sedt ot hes c r i pt .I fi ti shel l o,t hefi r s t bl oc ki sex ec ut ed.I fnot ,t hes cr i ptc hec kst os eei fi ti sgoodby eandec hosadi ffer ent mes s agei fs o.Ot her wi s e,at hi r dmes s agei ss ent .No t et hatt h e$1v a r i abl ei squo t edand t hes t r i ngc ompar i s onoper at ori sus edi ns t eadoft henumer i cv er s i on( eq) .
Thei f / el i f / el s et es t sc anbec omequi t ev e r bo seandc ompl i c at ed.Thecase s t a t e me nt pr o vi desadi ffer entwa yofmak i ngmul t i pl et es t seas i er . #!/bin/bash
case %;% in helloChiD echo %hello (o'rsel)% ?? &oodb(eD echo %nice to ha*e met (o'% echo % hope to see (o' a&ain% ?? ED echo % didnBt 'nderstand that% esac
Thecas es t at ements t ar t soffwi t hades cr i pt i onoft hee xpr es si onbei ngt es t ed:c as e EXPRESSI ON i n.Thee xpr es s i onher ei st hequo t ed$1. Ne xt ,eac hs etoft es t sar ee x ec ut edasapat t er nma t c ht er mi nat edb yac l os i ng par ent hes i s .Thepr ev i ousex ampl efi r s tl ook sf or“ hel l o”or“ hi ” ;mul t i pl eopt i onsar e s ep ar a t e db yt h ev e r t i c al b ar( | )wh i c hi sanORo per at ori nma nypr o gr ammi n gl an gu age s. Fol l o wi ngt hatar et hec ommandst obee x ec ut edi ft hepat t er nr e t ur nst r ue,whi c har e t er mi nat edbyt wosemi c ol ons .Thepat t er nr epeat s . Th e*p at t e r ni st h es amea sane l s eb ec au sei tmat c he san y t h i n g.Th eb eh av i o ro ft h ec as e s t at ementi ssi mi l art ot hei f / el i f / el s es t at ementi nt hatpr oc es si ngs t opsaf t ert hefi r s tmat c h. I fnoneoft heot heropt i onsmat c hedt he*ens ur est hatt hel as tonewi l l mat c h. Wi t has ol i dunder s t andi ngofc ondi t i onal sy ouc anha vey ours c r i pt st ak eac t i onsonl yi f n e c e s s a r y .
9.B.E "oops"oops permiten códi1o )ue se ejecuta repetidamente. #ueden ser de utilidad en numerosas situaciones, como cuando se desea ejecutar los mismos comandos m-s de cada archi+o en un directorio, o repetir al1una acción G +eces. Ra( dos bucles principales en scripts de shell% el de bucle ( el bucle @hile.#ara bucles se utili0a cuando se tiene una colección !inita sobre el )ue desea repetir, como una lista de archi+os, o una lista de nombres de ser+idor%H 2 bin 2 bashS&?ID?&S J 6ser+era Ser+idor Ser+idor76para S en L S&?ID?&S hacer echo 6Racer al1o a L S6hecho&l script establece primero una +ariable )ue contiene una lista separada por espacios de nombres de ser+idores. "a sentencia !or continuación bucles sobre la lista de ser+idores, cada +e0 )ue cambia la +ariable S al nombre del ser+idor actual. "a elección de S !ue arbitraria, pero ten1a en cuenta )ue la S no tiene si1no del dólar, pero los
L S&?ID?&S hace, mostrando )ue L S&?ID?&S se ampliar-n a la lista de ser+idores. "a lista no tiene por )ué ser una +ariable. &ste ejemplo muestra dos maneras m-s para aprobar una lista.H 2 bin 2 bashpara N3<& en Sean [on Isaac Da+id hacer echo 6Rola L N<?&6hechopara S en Z hacer echo 6Racer al1o a L S6hecho&l primer bucle es !uncionalmente el mismo )ue el ejemplo anterior, excepto )ue la lista se pasa al bucle !or directamente en lu1ar de utili0ar una +ariable. Usando una +ariable a(uda a la claridad de la escritura como al1uien puede hacer !-cilmente los cambios a la +ariable en lu1ar de mirar a un bucle.&l se1undo bucle utili0a un Z )ue es un 1lob archi+o. &sto se expandió por el shell para todos los archi+os en el directorio actual.&l otro tipo de la0o, un bucle @hile, opera en una lista de tama*o desconocido. Su trabajo es mantener en marcha ( en cada iteración reali0ar una prueba para +er si debe ejecutar otra +e0. Usted puede pensar en él como 6mientras )ue al1unos condición es +erdadera, hacer cosas.6H 2 bin 2 bashi J mientras )ue WL i P" G hacer echo L i i J L L i = G//hechoecho 6Se ha terminado de contar6&l ejemplo anterior muestra un bucle @hile )ue cuenta de a 9. Una +ariable de contador, i, se iniciali0a a . 3 continuación, un bucle @hile se ejecuta con ser la prueba 6es L i menos de GQ6 en1a en cuenta )ue los usos bucle @hile la misma notación )ue una sentencia i!Dentro del bucle mientras )ue el +alor actual de i se hi0o eco ( lue1o G se a*ade a la misma a tra+és del comando L aritmética// ( se asi1na de nue+o en i. Una +e0 )ue se con+ierte en el G de la sentencia @hile de+uel+e !alse ( el proceso contin;a después del bucle
9.H.' Loops Loopsal l o wc odet obeex ec ut edr epeat edl y .The ycanbeus ef ul i nnumer ou ss i t uat i ons , s u c ha swh eny ouwa ntt or u nt h es a mec omma nd sov e re ac hfi l ei nad i r e c t o r y ,o rr e pe at s omeac t i on100t i mes .Ther ear et womai nl oopsi nshel l s c r i pt s :t hef orl oopandt hewhi l e l oop. Forl oopsar eu sedwheny ouha v eafini t ec ol l ec t i onov erwhi c hy ouwantt oi t er a t e,s uc has al i s toffi l es ,oral i s tofs er v ernames : #!/bin/bash
3F3$%ser*era ser*erb ser*erc% )or in 3F3? do echo %5oin& somethin& to % done
Thes cr i ptfi r s ts et sav ar i abl ec ont ai ni ngas pac es epar at edl i s tofs er v ernames .Thef or s t at ementt henl oopsov ert hel i s tofs er v er s ,eac ht i mei ts et st heSv ar i abl et ot hec ur r ent s er v ername.Thec hoi c eofSwasar bi t r ar y ,butno t et hatt heShasnodol l ars i gnbutt he $ SERVERSd oe s ,s h owi n gt h at$ SERVERSwi l l b ee x pa nd edt ot h el i s to fs e r v e r s .Th el i s t d oe sno th av et obeav a r i a bl e .Th i se x amp l esh owst womo r ewa y st opa s sal i s t .
#!/bin/bash
)or A" in ean Gon saac 5a*id? do echo %Hello A"% done
)or in E? do echo %5oin& somethin& to % done
Thefi r s tl oopi sf unc t i onal l yt hes ameast hepr ev i ousex ampl e,e xc eptt hatt hel i s ti s pas sedt ot hef orl oopdi r ec t l yi ns t eadofus i ngav ar i abl e.Us i ngav ar i abl ehel pst hec l ar i t y oft hes c r i p tass omeonec aneas i l ymak ec hang est ot hev ar i abl er at he rt ha nl ook i ngata l oop. l egl ob.Thi Th es e c on dl o opus e sa*wh i c hi safi sget sex pandedbyt hes hel l t oal l t hefi l es i nt hec ur r entdi r ec t or y . l e Theot he rt y peofl oop,awhi l oop,oper at esonal i s tofunk nowns i z e.I t sj obi st ok eep r unni ngandoneac hi t er at i onper f or m at es tt os eei fi ts houl dr unanot hert i me.Youc an t hi nkofi tas“ whi l es omec ondi t i oni st r ue,dos t uff. ” #!/bin/bash
i$= 8hile @ i -lt ;= ? do echo i i$ i + ;DD done echo “5one co'ntin&”
Thee x ampl eabo v es ho wsawhi l el oopt hatc ount sf r om 0t o9.Ac ount e rv ar i abl e,i ,i s i ni t i al i z edt o0.Thenawhi l el oopi sr u nwi t ht het es tbei ng“ i s$i l es st han10?”Not et hatt he whi l el oopus est hesa meno t at i onasani fs t at ement ! Wi t hi nt hewhi l el oopt hec ur r entv al ueofii sec hoedandt hen1i saddedt oi tt hr ought he$ i t hmet i c ( (ar ) )c o mma ndan da s s i g ne db ac ki n t oi .On c ei b ec o me s10t h ewh i l es t a t e me nt r et ur nsf al s eandpr oc es s i ngc ont i nuesaf t ert hel oop.