You are on page 1of 15

lntroduccion a Shell Script Antonio Becerro Martinez. 2005.

lNTRODUCClON A
SHELL SCRlPT
lntroduccion a Shell Script Antonio Becerro Martinez. 2005.
1. lNTRODUCClON.
Shell que sgnfca en Casteano "concha" es e nterprete de comandos de sstema. Es una
nterfaz de texto de atas prestacones, que srve fundamentamente para tres cosas: admnstrar
e sstema operatvo, anzar apcacones (e nteractuar con eas) y como entorno de
programacn. Gnu/Lnux se admnstra edtando fcheros confguracn. Como norma genera, se
encuentran en: }etc, dentro de dreccones especfcos para cada apcacn. Por e|empo, Lilo
(Lnux Loader) se confgura edtando e fchero: }etc}lilo}lilo.conf. Los programas, se e|ecutan
escrbendo e nombre de e|ecutabe, s este se encuentra en e path (ruta por defecto para os
msmos, normamente: }usr}bin) o escrbendo e nombre de e|ecutabe preceddo por: .}, desde
e drectoro donde se encuentren. Todo esto, es ben conocdo por cuaquer usuaro de Shell. No
tan conocdas son sus capacdades como entorno de programacn. Los programas de Shell no
necestan comparse. La Shell os nterpreta nea a nea. Se es suee conocer como Shells
Scripts y pueden ser desde sencas ordenes hasta compe|as seres de nstruccones para e
arranque de propo sstema operatvo. En genera, tenen una sntaxs bastante cara y suponen
un buen punto de partda para dar os prmeros pasos en e mundo de a programacn.
Yo no soy nngn experto programador. De hecho, estoy aprendendo ahora msmo. Es un
mundo apasonante, pero un poco oscuro a veces. Entonces, s no soy un especasta en e tema,
Como me atrevo a escrbr sobre eo? Bueno, tengo ms motvos. Vern, me consdero un buen
comuncador, y creo que m forma de contar as cosas puede ser t a os dems. Eo me anma
a preparar tutoraes como estos, y a pubcaros en Internet.
2. Como se edita un script de Shell7
E enfoque de este traba|o es prctco. En ugar de mostrar e funconamento de cada comando,
vamos a ver e|erccos concretos que sean apropados para a admnstracn de nuestro sstema.
Los scripts de Shell son extremadamente tes. Es buena dea escrbr aqueas necesdades
que tengamos y uego edtar scripts que reacen este traba|o por nosotros. A estas aturas, ya
es hora de preguntarse que es exactamente un script. Es un archvo de texto, que contene una
sere de comandos para shell, que e sstema e|ecuta ordenadamente, de arrba aba|o. Para
edtaros, tan soo hace fata un edtor de textos, como Emacs, o Vi. Se guardan con extensn:
.sh y se e|ecutan desde a Shell medante e comando: sh nombre de script.sh. Los scripts,
se comportan de gua manera que os comandos de a shell.
Bueno, ya va sendo hora de que pasemos a a prctca. E prmer paso para traba|ar con una
Shell es e|ecutar una shell. Esto que parece una perogruada tene su razn de ser. En agunas
dstrbucones de Gnu}Linux muy enfocadas a usuaro fn, a shell est bastante escondda.
Normamente, se ama: Konsoe, termna, termna de X, o ago smar. Se suee ncur en e
men k de Kde, en e apartado sstema. Otra opcn es utzar una consoa vrtua. Medante:
Ctrl alt f1, o f2, o f3 hasta f6, podemos utzar entornos shell, sn nterfaz grfca. Es
mportante saber, que os programas basados en e entorno X, gcamente no funconan. La
Shell ms utzada en Gnu}Linux es Bash, aunque exsten otras, como ksh o C Shell. Este
tutora est enfocado a Bash.
3. PASAMOS A LA ACClON.
Supongamos que evtamos e arranque automtco de escrtoro grfco. Esto es bastante
smpe. Soamente hay que cambar de nombre o comentar e fchero: gdm, kdm o xdm. Esto
depende de nuestro sstema. Kdm est vncuado a Kde, Gdm a Gnome, y Xdm a cuaquera de
eos. Los programas que ncan e sstema operatvo son tambn scrpts. Se encuentran en e
drectoro: }etc}init.d. Hecho esto, e sstema arranca en modo de texto. para anzar e servdor
grfco:

startx ruta al escritorio -- : numero de nivel de ejecucion

lntroduccion a Shell Script Antonio Becerro Martinez. 2005.
Aparte de Kde y Gnome, son bastante utzados windowmaker, icewm y enlightement,
entre otros. S una vez e|ecutado e escrtoro, abandonamos a sesn, vovemos a a nea de
comandos. Desde aqu, podemos preparar nuestros scripts. Veamos agunas deas. Podramos
hacer uno que mostrase un men para e|ecutar e escrtoro que queramos. Veamos, o podemos
amar escritorio.sh. Lo edtamos, este es e contendo:
clear
echo "MENU"
echo "===="
echo "1. lniciar kde."
echo "2. lniciar Gnome."
echo "3. lniciar Windowmaker."
echo "4. lniciar enlightement."
echo "Elige opcion"
read entrada1
case $entrada1 in
1)
startx kde
;;
2)
startx gnome
;;
3)
startx windowmaker
;;
4)
startx enlightement
;;
esac
Y ahora veamos como funcona. E comando clear (prmera nea), mpa a pantaa. E
comando "echo" muestra o que escrbamos a contnuacn entre comas dobes. Las nea dos a
a ocho dan ugar a un men, que srve para escoger e escrtoro que queramos anzar. Para eo,
e usuaro tene que escrbr un numero, entre 1 y 4. A contnuacn, vemos e comando "read".
Este, ee a respuesta de usuaro, y a guarda como a varabe: entrada1. Ahora se utza a
estructura "case". Esta, permte reazar de una forma bastante senca, varos if andados. La
estructura if fi, consste en evauar condcones: "s ta cosa es de ta forma, entonces haz esto.
En caso contraro esto otro". Medante "case" nos ahorramos bastante texto. La sntaxs es a
que se puede ver en e e|empo. Empeza por case "$variable" in. Luego, en a sguente nea:
1) Es para referrse a vaor: 1 , que en este caso es "iniciar Kde". E resto son as entradas para
os dems escrtoros. Cada una de eas termna obgatoramente con os caracteres: ;;
Fnamente, para cerrar a estructura se escrbe: esac, que no es otra cosa sno case, escrto a
revs.
No es muy compcado. De esta forma, se pueden hacer muchas cosas. Por e|empo, un scrpt
que nos srva para apagar a mquna, rebotara, etc. De hecho, s soemos utzar mucho a
consoa, unos cuantos scrpts de este tpo, nos evtar e estar escrbendo sempre o msmo.
Veamos otro e|ercco dferente. Es una cacuadora. Es muy smpe, soo sabe sumar, restar,
mutpcar y dvdr. Pero tambn es muy fc de escrbr y de utzar. Iustra ben e uso de
varabes.
lntroduccion a Shell Script Antonio Becerro Martinez. 2005.

echo "soy Gnu}Cal"
echo "Tu me dices lo que quieres calcular y yo te doy el resultado"
echo "lntroduce el primer valor"
read valor1
echo " lntroduce el operador. Puedes escoger entre: + - * }"
read operador
echo " lntroduce el segundo valor"
read valor2
echo "El resultado es:"
sleep 2
expr $valor1 $operador $valor2
sleep 1
echo "gracias por su tiempo!"

Las tres prmeras neas son, por as decro, de presentacn. En a cuarta nea hay un read,
amado valor1. Es una varabe, que va a ntroducr desde e tecado e usuaro. Despus, es
necesaro saber que operacn se quere reazar (suma, resta, mutpcacn o dvsn). Para eo
hay un nuevo read, amado "operador" para que e usuaro pueda escoger. Despus, tenemos
e segundo vaor de a operacn amado "valor2". E comando "sleep" o nco que hace es
esperar un poco de tempo para que de a sensacn de que e programa esta pensando poco
antes de dar e resutado. La operacn matemtca propamente dcha se reaza en a nea 11.
E comando es: expr. Como puede verse, opera drectamente con os vaores que hayan tomado
as tres varabes mpcadas. Este tpo de estructura, es muy fc de comprender (por eso forma
parte de e|ercco) pero no es competamente funcona. Como veremos ms tarde, hay otras
formas de programar una cacuadora. E mayor probema que presenta esta, es a operacn
mutpcacn. E smboo: * no es vdo, porque est reservado para e sstema operatvo.
Veamos ahora otro e|empo. Se ama: trivial.sh, y es e tpco |uego de preguntas y respuestas.
Soo tene dos preguntas, pero es sufcente para ver como funcona. Est construdo, sobre a
estructura if fi. E programa conoce a respuesta correcta y evaa a respuesta de usuaro. S
acerta una pregunta se o dce y pasa con a sguente pregunta. S acerta todas as preguntas e
da e ttuo de "magster de unverso".
#!}bin}bash
clear
echo "Bienvenidos a GnuTrivial."
sleep 2
echo "Soy el tipico juego de preguntas y respuestas."
sleep 2
echo "Si aciertas todas las preguntas, te concedere el titulo de magister del universo."
echo "Como se llamaba el ultimo emperador Romano de occidente, claudio, teodosio
o romulo."
read respuesta1
if test $respuesta1 = romulo
then
echo "Respuesta correcta."
else
echo "Lo siento, la respuesta correcta es: romulo."
fi
sleep 2
echo "Pasemos a la siguiente pregunta. ue celebre filosofo Griego tuvo por discipulo
a Alejandro Magno, platon, aristoteles o zenon7"
read respuesta2
if test $respuesta2 = aristoteles
lntroduccion a Shell Script Antonio Becerro Martinez. 2005.
then
echo "respuesta correcta."
else
echo "Lo siento, la respuesta correcta es: Aristoteles."
fi
if test $respuesta1 = romulo
test $respuesta2 = aristoteles
then
echo "Eres un pequeo magister del universo."
fi
Como puede aprecarse, a estructura if fi, y a estructura case hacen cosas bastante smares.
Levan a cabo una accn en funcn de un vaor de usuaro. En genera, case se consdera una
evoucn de if fi, ya que permte e msmo resutado, escrbendo menos cdgo. Sn embargo, e
uso de if fi es perfectamente correcto. La evauacn de as condcones se reaza medante e
comando test. Este, comprueba s a varabe es gua a vaor que e hayamos ndcado. Por
supuesto, test puede hacer muchas ms cosas, como comparar s un nmero es mayor o menor
que otro, etc. A fn de scrpt, se evaan dos varabes a a vez. Es necesaro escrbras en dos
neas dferentes.
A contnuacn, vamos a hacer ago dferente. Se trata de una espece de mnbase de datos
para nuestra coeccn partcuar de pecuas. Se ama videobase.sh. Lo prmero que tenemos
que hacer es un scrpt que genere un fchero de texto que contenga nombres de drectores,
nombres de pecuas, ao de produccn y productora. Cada nea son os datos de una pecua.
Vene a ser o que se ama un regstro. Nuestro segundo scrpt, es un cente de este fchero de
texto, con capacdad para reazar busquedas segn varos crteros. Veamos e cdgo:
#}bin}sh
clear
echo "VlDEOBASE"
echo "========="
echo "ESCOGER CRlTERlO DE BUSUEDA"
echo "1.- Busqueda por director."
echo "2.- Busqueda por productora."
echo "3.- Busqueda por titulo."
echo "4.- Busqueda por ao."
echo "5.- Salir."
read criterio
case $criterio in
1)
echo "Cual es el nombre del director7"
read director
grep $director }home}antonio}base_pelis}base2.txt
read pausa
}home}antonio}bash-script}pelibus.sh
;;
2)
echo "Cual es el nombre de la productora7"
read productora
grep $productora }home}antonio}base_pelis}base2.txt
read pausa
}home}antonio}bash-script}pelibus.sh
;;
3)
echo "Cual es el titulo de la pelicula7"
read titulo
lntroduccion a Shell Script Antonio Becerro Martinez. 2005.
grep $titulo }home}antonio}base_pelis}base2.txt
read pausa
}home}antonio}bash-script}pelibus.sh
;;
4)
echo "En que ao se produjo la pelicula7"
read ano
grep $ano }home}antonio}base_pelis}base2.txt
read pausa
}home}antonio}bash-script}pelibus.sh
;;
5)
;;
esac
La estructura es case. A estas aturas, ya estamos famarzados con ea. Introduce un par de
eementos nuevos. E prmero de eos, es que desde este scrpt se ama a un scrpt de nombre:
pelibus.sh, es decr se ama a s msmo. Esto es, para que cuando e usuaro puse a teca
"ntro" se vueva a repetr e programa. Produce a sensacn de vover atrs. La varabe pausa,
detene e programa hasta que e usuaro puse aguna teca. Por tmo, a opcn salir se ogra
escrbendo: 5), sn aadr nngn tpo de orden. E sstema nterpreta que e scrpt ha termnado
y nos devueve a a nea de comandos. Las busquedas se evan a cabo sobre un fchero de texto
smpe amado: base2.txt, e comando para ftrar a nformacn es: grep. Veamos ahora e
fchero de texto que contene os datos:
heroes fuera de orbita 1999 tim allen dreamworks
simone 2002 al pacino new line produccions
nivel 13 1999 roland emmerich columbia
el tercer hombre 1947 carol reed circulo
juan nadie 1945 frank capra circulo
Como se ha comentado antes, este fchero se crea y edta medante otro scrpt. Se ama
"pelin.sh". Veamos su contendo:
#}bin}sh
clear
echo "VlDEOBASE"
echo " ========"
echo "NUEVO REGlSTRO EN CURSO"
sleep 2
echo "-DlRECTOR:"
read director
sleep 1
echo "-PELlCULA:"
read pelicula
sleep 1
echo "-AO DE PRODUCClON:"
read ano
sleep 1
echo "-PRODUCTORA:"
read productora
echo "$director $pelicula $ano $productora" >>}home}antonio}base_pelis}base2.txt
La parte nteresante es a tma nea. Un echo enva por a sada as cuatro varabes en uso.
Medante: >> a sada no va a a pantaa (sada estandar) sno a un fchero amado: base2.txt.
En caso de no exstr, o crea. S exste aade os datos nuevos. S utzamos: > sustturamos a
nformacn antgua por a nueva.
lntroduccion a Shell Script Antonio Becerro Martinez. 2005.


De a msma manera, podramos escrbr scripts para organzar una bboteca, recbos
bancaros o cuaquer otra cosa. Tambn se podra ampar este programa con ms opcones. Por
e|empo, una entrada para un cdgo afanumrco a dotara de verdadera funconadad.
Medante este cdgo podemos dentfcar os ob|etos que queramos casfcar y ocazaros
fscamente. No he ncudo ms opcones porque no aportan nada ms, desde e punto de vsta
ddctco. Una vez que se comprende a tcnca, cuaquera puede escrbr sus propos programas.
Contnuemos adeante. A prncpo hemos vsto una cacuadora, capaz de sumar, restar y
dvdr correctamente, pero que faaba con a mutpcacn. Veamos ahora e cdgo de una
cacuadora capaz de operar correctamente tambn con a mutpcacn.
echo ########################
echo # HOLA! SOY GNUCAL V2 #
echo ########################
echo
echo lntroduce el primer valor:
read valor1
echo "lntroduce operador, puede elegir suma +, resta -, multiplicacion * y division }."
read ope
echo lntroduce segundo valor:
read valor2
resultado=`expr $valor1 "$ope" $valor2`
echo Resultado=$resultado
La estructura ha cambado un poco. La dea es a msma, pero est me|or construda. La tma
nea muestra en pantaa a varabe: resultado. Esta, esta asgnada en e propo programa y se
corresponde con: `expr $valor1 "$ope" $valor2`. E probema de a mutpcacn se resueve
fcmente ncuyendo a varabe operador entre comas dobes. La estructura de este script
es nteresante, ya que se puede apcar a otro tpo de operacones smpemente cambando e
vaor de a varabe resultado.
4.EXPRESlONES REGULARES.

Las expresones reguares son patrones que afectan a una cadena de caracteres. Son muy
tes para seecconar con gran precsn eementos de un fchero. Se utzan mucho en os
scrpts, y son a parte ms dfc de entender. Veamos un e|empo. Lo prmero, creamos un
fchero de texto amado expre con e sguente contendo:
cosas casa libros animal verdugo
LLUvia lanaa madre hermano nido
bicho limo asno vision alma
libro cosas tipo falso oso
bicha corbata talon barco tigre
ult
Ahora vamos utzar grep para buscar a cadena cosas dentro de fchero expre. Veamos,
escrbmos: grep cosas expre. Obtenemos:
libro cosas tipo falso oso
cosas casa libros animal verdugo

Como e fchero expre tene cnco coumnas, cuando grep seeccona a cadena cosas, nos
muestra as fas competas en as que se encuentre. Ahora vamos a hacer uso de expresones
reguares para ograr seeccones ms precsas. "cosas" hace que grep busque a nea que
lntroduccion a Shell Script Antonio Becerro Martinez. 2005
comence por cosas. Esto es consecuenca de metacaracter: . Las expresones reguares son
precsamente caracteres especaes (amados metacaracteres) que nfuyen de una manera partcuar
en a cadena de texto que referencan. Hagamos a prueba. Escrbmos: grep "cosas" expre. E
resutado es:
cosas casa libros animal verdugo
Es mportante no escrbr nngn carcter prevo a a prmera coumna de paabras a edtar e
fchero expre. No es correcto utzar a barra espacadora n tabuadores. grep os tomar por
caracteres y en este caso, como nnguna nea empeza por "cosas" no mostrar resutado
aguno. Veamos otro e|empo. Supongamos que queremos ftrar todos os subdrectoros de
drectoro: }usr. Para eo escrbmos:
ls -la }usr grep d
Obtenemos:
drwxr-xr-x 13 root root 368 Sep 15 00:56 .
drwxr-xr-x 21 root root 488 Sep 24 14:03 ..
drwxrwxrwx 8 root root 192 Aug 13 17:15 X11R6
drwxrwxrwx 2 root root 54696 Sep 15 20:13 bin
drwxr-xr-x 2 root root 1384 Sep 15 01:27 games
drwxrwxrwx 5 root root 120 Aug 13 17:08 i586-suse-linux
drwxrwxrwx 97 root root 12864 Sep 8 00:02 include
drwxrwxrwx 123 root root 49648 Sep 15 20:13 lib
drwxrwxrwx 12 root root 304 Sep 7 00:57 local
drwxr-xr-x 4 root root 96 Sep 15 00:56 man
drwxrwxrwx 2 root root 9984 Sep 8 00:03 sbin
drwxr-xr-x 133 root root 3464 Sep 15 20:15 share
drwxrwxrwx 5 root root 160 Aug 26 00:09 src

E comando grep ha seecconado ncamente aqueos fcheros que comenzan por a etra d.
La prmera coumna, comenzando por a zquerda son os permsos. E prmer carcter ndca e
tpo de fchero. d sgnfca drectoro. Ben, esta forma de proceder va a ser nuestra estratega
para admnstrar e sstema. ftraremos os fcheros de confguracn de sstema en busca de a
nformacn que necestemos para despus hacer ago con ea. Contnuemos. S escrbmos:
grep "...$" expre
Obtenemos:
ult
En este caso, hemos seecconado soamente aquea nea que empece por una paabra de tres
caracteres. S a expresn reguar fuese: ....$, entonces seecconaramos paabras de cuatro
caracteres. Basta, con escrbr tantos puntos como caracteres tenga a paabra que queramos
seecconar. Otro e|empo:
grep "os]oa|" expre
Obtenemos:
bicho limo asno vision alma
bicha corbata talon barco tigre

Grep ha seecconado as neas que contenen bcho o bcha. Veamos otras posbdades:
grep "]A-Z| ]A-Z|*" expre
Obtenemos:
LLUvia lanaa madre hermano nido
lntroduccion a Shell Script Antonio Becerro Martinez. 2005
Lo que grep ha hecho ahora es seecconar a nca nea que empeza por consonantes. Ahora
vamos a buscar as neas que termnan por e carcter: e. Escrbmos:
grep 'e$' expre
Obtenemos:
bicha corbata talon barco tigre
Por tmo, probemos a buscar aquea nea donde se repte e carcter: a. Escrbmos:
grep "a\2,\" expre
Obtenemos:
LLUvia lanaa madre hermano nido
Como no se trata de probar todas y cada una de as expresones, he preparado e sguente
stado. Es buena dea practcar utzando cada una de as expresones y ver e resutado.
PATRON REPRESENTA
bicho La cadena bicho
bicho La cadena bicho al comienzo de una linea
bicho$ La cadena bicho al final de una linea
bicho$ La cadena bicho formando una unica linea
bich]ao| Las cadenas bicha y bicho
bi]aeiou|o La tercera letra no es una vocal minuscula
bi.o La tercera letra es cualquier carcter
....$ Cualquier linea que contenga cuatro caracteres cualesquiera
\. Cualquier linea que comience por un punto
].| Cualquier linea que no comience por un punto
bicho$ bicho, bichos, bichoss, bichosss, etc
"*bicho"* bicho con o sin comillas dobles
]a-z| ]a-z|* Una o ms letras minusculas
]0-9a-z| Cualquier carcter que no sea ni numero ni letra mayuscula.
]A-Za-z| Cualquier letra, sea mayuscula o minuscula.
]Ax5| Cualquier carcter que sea A, x o 5
bicho bicha Una de las palabras bicho o bicha
s arb)usto Las palabras susto o arbusto
\bi Cualquier palabra que comience por bi
bi\> Cualquier palabra que termine en bi
a\2,\ Dos o ms aes en una misma fila.

lntroduccion a Shell Script Antonio Becerro Martinez. 2005
Como se ve, e mundo de as expresones reguares no es tan oscuro como parece a prncpo.
Ms adeante, ntentaremos apcar nuestros nuevos conocmentos a a edcn de scrpts. Ahora
vamos a ver otros temas.
6. LOS lLTROS.
Los comandos que srven para ftrar nformacn se denomnan ftros. Uno de os ms conocdos
es grep. Sn embargo, exsten otros. Vamos a ver en prmer ugar e ftro cut. Permte cortar
coumnas o campos de un fchero de texto y envaros a a sada estndar. La opcn -c es para
cortar coumnas y -f para cortar campos. La opcn -d se utza para ndcar que carcter hace de
separacn entre campos, es decr e demtador. S no se ndca nada, e demtador es e
tabuador. Para que cut sepa que campos o coumnas tene que cortar hay que ndcaro con una
sta. Esta sta tene tres formatos posbes:
1-2 Campos o columnas de 1 a 2.
1- Campo o columna 1 toda la linea.
1, 2 Campos o columnas 1 y 2.
Veamos unos e|empos. Para eo edtamos un fchero de texto amado amgos con e sguente
contendo:
ANT:3680112
SEX:6789450
COM:3454327
VlM:4532278
DAO:5468903
Escrbmos en a consoa:
cut -c 1-3 amigos
Obtenemos:
ANT
SEX
COM
VlM
DAO
Es decr, hemos cortado as tres prmeras etras de cada nea de fchero personas. Ahora vamos
a ntentar ago un poco ms dfc. Vamos a cortar campos ndvduaes. E carcter demtador
de fchero amgos, es :, S escrbmos:
cut -d ':' -f 1 amigos
Obtenemos:
ANT
SEX
COM
VlM
DAO
O sea e prmer campo. S escrbmos:
cut -d ':' -f 2 amigos
Obtenemos e segundo campo:
3680112
6789450
3454327
4532278
5468903
lntroduccion a Shell Script Antonio Becerro Martinez. 2005


Ahora vamos a ver un e|empo ms t. Vamos a ftrar e fchero passwd, que se encuentra en /
etc y vamos a seecconar os usuaros que utzan e nterprete de ordenes bash. Lo prmero para
ver e contendo de fchero escrbmos: cat }etc}passwd. Obtenemos:
root:x:0:0:root:}root:}bin}bash
bin:x:1:1:bin:}bin:}bin}bash
daemon:x:2:2:Daemon:}sbin:}bin}bash
lp:x:4:7:Printing daemon:}var}spool}lpd:}bin}bash
mail:x:8:12:Mailer daemon:}var}spool}clientmqueue:}bin}false
news:x:9:13:News system:}etc}news:}bin}bash
uucp:x:10:14:Unix-to-Unix CoPy system:}etc}uucp:}bin}bash
games:x:12:100:Games account:}var}games:}bin}bash
man:x:13:62:Manual pages viewer:}var}cache}man:}bin}bash
at:x:25:25:Batch jobs daemon:}var}spool}atjobs:}bin}bash
wwwrun:x:30:8:WWW daemon apache:}var}lib}wwwrun:}bin}false
ftp:x:40:49:TP account:}srv}ftp:}bin}bash
gdm:x:50:15:Gnome Display Manager daemon:}var}lib}gdm:}bin}bash
postfix:x:51:51:Postfix Daemon:}var}spool}postfix:}bin}false
sshd:x:71:65:SSH daemon:}var}lib}sshd:}bin}false
ntp:x:74:65534:NTP daemon:}var}lib}ntp:}bin}false
vdr:x:100:33:Video Disk Recorder:}var}spool}video:}bin}false
nobody:x:65534:65533:nobody:}var}lib}nobody:}bin}bash
antonio:x:1001:0:antonio becerro martinez:}home}antonio:}bin}sh
Escrbmos:
cat }etc}passwd grep bash cut -d ':' -f 1,7
Obtenemos:
root:}bin}bash
bin:}bin}bash
daemon:}bin}bash
lp:}bin}bash
news:}bin}bash
uucp:}bin}bash
games:}bin}bash
man:}bin}bash
at:}bin}bash
ftp:}bin}bash
gdm:}bin}bash
nobody:}bin}bash
Hemos utzado, en prmer ugar cat para pasar e fchero passwd por a sada estndar,
depus medante un ppene (ppe o tubera) o hemos ftrado con grep seecconando
soamente aqueas neas que contenen a cadena bash. Fnamente, nos quedamos con os
campos 1 y 7.
De|amos cut, y pasamos a comando tr. Es un ftro que se empea como traductor,
generamente para convertr de mnscuas a mayscuas y vceversa. Lo prmero edtamos un
fchero de texto de nombre gnu que tenga e sguente contendo:
Gnu}linux es un sistema operativo
UE PRESENTA UN GRAN UTURO
Escrbmos en a consoa:
tr ]A-Z| ]a-z| gnu
Obtenemos:
gnu}linux es un sistema operativo
que presenta un gran futuro
lntroduccion a Shell Script Antonio Becerro Martinez. 2005

Hemos convertdo todos os caracteres entre A y Z en sus homogos entre a y z. Lgcamente,
s queremos hacer o contraro escrbmos:
tr ]a-z| ]A-Z| gnu
Obtenemos:
GNU}LlNUX ES UN SlSTEMA OPERATlVO
UE PRESENTA UN GRAN UTURO
Ahora vamos a ver como susttur caracteres. Escrbmos:
tr ]A-Z| g gnu
Obtenemos:
gnu}linux es un sistema operativo
ggg gggggggg gg gggg gggggg
Todas as mayscuas han sdo suttudas por e carcter g. Naturamente, podemos modfcar e
rango de caracteres mpcados s en ugar de utzar: ]A-Z| utzamos: ]A-M|, es decr que soo
se van a convertr en e carcter g, as mayscuas entre a A y a M. Probemos:
tr ]A-M| g gnu
Obtenemos:
gnu}linux es un sistema operativo
Ug PRgSgNTg UN gRgN gUTURO
Tambn podemos utzar as tcncas de susttucn para emnar determnados caracteres. Se
utza a opcn -d. Veamos:
tr -d ]A-Z| gnu
Obtenemos:
nu}linux es un sistema operativo
Como era de esperar, todas as consonantes han sdo emnadas. Convene seaar, que tr no
afecta para nada a fchero de entrada, que como recordaremos se ama gnu. Lo toma, o
procesa, y enva e resutado a montor. E orgna no es modfcado en nngn caso.
Por tmo, vamos a ver e ftro tee. Tene como msn bfurcar a sada de una orden envando
os resutados smutaneamente a a sada estndar (montor) y a un fchero. Su sntaxs es:
tee ]-a| archivos)
La opcn -a sgnfca append o sea aadr. Con esta opcn a sada a un fchero no
sobreescrbe a nformacn sno que a aade a fna de fchero de texto. Este ftro es t en
agunos casos.

7. BUCLES.
Aparte de o que hemos vsto hasta ahora, exsten tres construccones conocdas como
teracones o buces. Son while, until y for. Srven para e|ecutar ccos de comandos s se
cumpe una condcn. Empecemos en prmer ugar por while. Su sntaxs es:
while condicion
do
orden
done
lntroduccion a Shell Script Antonio Becerro Martinez. 2005
while evaa a condcn. S esta es correcta, entonces e|ecuta e o os comandos especfcados.
S no es correcta, sata a a sguente orden que haya despus de a paabra reservada done.
Correcto, quere decr que e cdgo devueto por a condcn sea 0. Es convenente resear que
en este caso se vueve a terar, es decr que se repte a construccn while. Por eo nos
refermos a este tpo de construccones como teracones, sentencas de contro de fu|o o buces.
Veamos un e|empo:
###########################
# PROGRAMA DE EEMPLO #
# DE LA SENTENClA DE CONTROL #
# DE LUO WHlLE #
###########################
a=42
while ] $a -le 53 |
do
echo Contador = $a
a=`expr $a + 1`
done
La varabe a tene e vaor 42. S se cumpe a condcn: ] $a -le 53 |, se e|ecuta e comando
echo Contador = $a. Es decr, s a es menor o gua que 53 (cosa que es evdentemente certa)
muestra en a pantaa Contador = 42. Pero no termna ah a cosa. Como a condcn ha sdo
cumpda, while vueve a terar. Deba|o de comando echo hay una nea para dar una vaor
nuevo a a varabe a. Se trata de: a=`expr $a + 1`, que smpemente quere decr que e vaor
de a sea ncrementado en una undad. Bueno, while har precsamente esto hasta egar a 53. E
programa termnar ya que cuaquer nmero mayor no cumpr a condcn dada, y por que no
exste nngn otro comando despus de done.
La construccn until es muy smar a while. De hecho, comparte a msma sntaxs. La
dferenca consste en que e cdgo de retorno de a condcn debe ser faso (dstnto de 0) para
terar. S es verdadero satar a e comando que vaya a contnuacn de done. Veamos un
e|empo:
###############################
# PROGRAMA DE EEMPLO #
# DE LA SENTENClA DE CONTROL DE #
# LUO UNTlL #
###############################
until ] $a = hal9000 |
do
echo "Bienvenidos a Programa1. Para continuar escribe contrasea"
read a
done
echo "contrasea correcta"
La condcn es que a varabe a sea gua a a cadena hal9000. En caso contraro, vueve a
terar. S e usuaro escrbe a cadena correcta, entonces a sentenca de contro de fu|o termna.
En este caso, contnua con e comando echo "contrasea correcta" ya que se encuentra
despus de done.
Fnamente, vamos a estudar e buce for. Su sntaxs es como sgue:
for variable in lista
do
ordenes
done
Es dferente a while y until. En a construccn for no hay que cumpr nnguna condcn. for,
lntroduccion a Shell Script Antonio Becerro Martinez. 2005
smpemente utza como varabe a prmera cadena de una sta, e|ecutando as ordenes que e
ndquemos a contnuacn. En a sguente teracn utzar a sguente cadena de a sta, y as
sucesvamente. Veamos un e|empo:
###########################
# PROGRAMA DE EEMPLO #
# DE LA SENTENClA DE CONTROL DE #
# LUO OR #
###########################
for a in antonio eva fernado joseba julio
do
mail $a texto.txt
done
E programa es bastante senco.Toma nombres de usuaros de sstema que se e proporconan
en una sta (antonio eva fernando joseba julio) y es enva un correo utzando como
contendo de msmo e fchero texto.txt.
Y esto es todo. Espero que todo esto e srva para dar sus prmeros pasos en e mundo de a
programacn, como a m msmo me est srvendo.

Antono Becerro Martnez
becerrodenux@yahoo.es
Acobendas 2005





____________________________________________________________________________________________________
Se permte a copa de artcuo competo en cuaquer formato, ya sea sn nmo de ucro o con
fnes comercaes, sempre y cuando no se modfque su contendo, se respete su autora y esta
nota se mantenga.

You might also like