Está en la página 1de 66

Scripts en linux

Scripts en linux
Implantacin de sistemas operativos. Implantacin de sistemas operativos.
1 asir. 1 asir.
I.E.S. francisco romero Vargas. I.E.S. francisco romero Vargas.
Jose Antonio carrasco Diaz. Jose Antonio carrasco Diaz.
Nuestro primer script
Nuestro primer script
mkdir ~scripts
nano ~scriptsprimer!script.s"
#!/bin/bash
echo Hola Mundo, mi primer script en Linux !!
echo De momento no parece difcil el tema !"
c"mod a#$ ~scriptsprimer!script.s"
~scriptsprimer!script.s"
cd ~scripts
.primer!script.s"
cd ~scripts
nano seg%ndo!script.s"
#!/bin/bash
echo #o$ a contar cuantos scripts tenemos
ls %&sh ' (c )l
so%rce seg%ndo!script.s"
. seg%ndo!script.s"
Usando source
Usando source
cd ~scripts
nano seg%ndo!script.s"
#!/bin/bash
echo #o$ a contar cuantos scripts tenemos
ls %&sh ' (c )l
so%rce seg%ndo!script.s"
. seg%ndo!script.s"
Usando source
Usando source
cd ~scripts
nano tercer!script!1.s"
#!/bin/bash
echo *enemos +, ls %&sh ' (c )l " scripts
c"mod a#$ tercer!script!1.s"
.tercer!script!1.s"
Expansin de comandos
Expansin de comandos
cd ~scripts
nano tercer!script!&.s"
#!/bin/bash
echo )n *enemos
echo )n +, ls %&sh ' (c )l "
echo scripts
c"mod a#$ tercer!script!&.s"
.tercer!script!&.s"
Expansin de comandos
Expansin de comandos
cd ~scripts
nano tercer!script!'.s"
#!/bin/bash
-.M/012+, ls %&sh ' (c )l "
echo *enemos +-.M/01 scripts
c"mod a#$ tercer!script!'.s"
.tercer!script!'.s"
Expansin de comandos
Expansin de comandos
cd ~scripts
nano tercer!script!(.s"
#!/bin/bash
L3-/42+, ls %&sh ' (c )l "
L3-/42*enemos +L3-/4 scripts
echo +L3-/4
c"mod a#$ tercer!script!(.s"
.tercer!script!(.s"
Expansin de comandos
Expansin de comandos
cd ~scripts
nano c%arto!script.s"
#!/bin/bash
echo Dime un n5mero
read -.M/01
D16L/2+,, +-.M/01 % 7 ""
echo Has introducido +-.M/01 $ su doble es +D16L/
c"mod a#$ c%arto!script.s"
.c%arto!script.s"
Expansin aritmtica
Expansin aritmtica
nano c%arto!script.s"
#!/bin/bash
clear
echo Dime un n5mero
read -.M/01
D16L/2+8 +-.M/01 % 7 9
echo Has introducido +-.M/01 $ su doble es +D16L/
Expansin aritmtica
Expansin aritmtica
nano )%into!script.s"
#!/bin/bash
:./-*4;6402<==
>/-*/2?
:4D4;.-12+8 +:./-*4;640 / +>/-*/ 9
# Lnea de comentario
# /ste script no funciona bien
echo :ada uno debemos pa@ar +:4D4;.-1 euros
Expansin aritmtica
Expansin aritmtica
se$to!script.s"
*+,in,as"
-.E/0A1122
3E/0E1'
* 4acemos la divisin con dos decimales
-ADA!./5167 ec"o 8scale1&9 6-.E/0A 63E/0E: ; ,c <l =
ec"o -ada %no de,emos pagar 6-ADA!./5 e%ros
Expansin aritmtica. bc.
Expansin aritmtica. bc.
cd ~scripts 9 mkdir fic"eros
nano fic"erosnom,res.t$t
-ombre/4pellidos//dad/-um;:ompras/3mporte;Aacturado
Manuel/Buintanilla Auentes/C7/<7/<DEF
Guan/1rte@a 6ellido/7?/7/<E<
Hir@inia/Machado Lorca/I7/E/7ED=
4na/6ien#enido JancheK/<E/?/?==
Script secuencial
Script secuencial
E>ercicio? -rear %n script llamado lista!clientes.s" )%e
procese el fic"ero nom,res.t$t @ nos m%estre por pantalla lo
sig%iente?
L3J*4D1 D/ :L3/-*/J 10D/-4D1J L10 -1M60/
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4na 6ien#enido JancheK
Guan 1rte@a 6ellido
Manuel Buintanilla Auentes
Hir@inia Machado Lorca
Script secuencial
Script secuencial
lista!clientes.s"
*+,in,as"
clear
ec"o ABIS0AD5 DE -BIE/0ES 5CDE/AD5S D5C /5EFCEA
ec"o AGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGA
cat fic"erosnom,res.t$t ; sed Ge 1d H fic"erostemporal.t$t
cat fic"erostemporal.t$t ; c%t Gd Gf1I& ; sed Ge AsJ A ; sort
rm fic"erostemporal.t$t
Script secuencial
Script secuencial
E>ercicio? -rear %n script llamado saldo.s" )%e me pida por
pantalla %n nom,re de cliente 7solo el nom,re= @ me
m%estre c%al es s% media fact%rada. 7Ba media serK el
Importe Lact%rado dividido entre el /Mmero de -ompras.=
D@ame el nombre de un cliente
Hir@inia
La media facturada es de ??<,<< euros
Script secuencial
Script secuencial
pasos para crear saldo.s".
1=Bimpiar la pantalla
&=Dedir )%e nos introd%zca el %s%ario %n nom,re mediante read
'=F%scar la lNnea del fic"ero )%e tiene ese nom,reI @ g%ardar dic"a lNnea
en %n fic"ero temporal
(=-ortar de ese fic"ero temporal el Importe 0otal Lact%rado @ g%ardarlo en
%na varia,le
O=-ortar de ese fic"ero temporal el /%mero de compras @ g%ardarlo en
otra varia,le
P=Dividir la varia,le del Importe 0otal Lact%rado entre la varia,le del
/%mero de compras 7esa divisin de,e "acerse con dos decimales= @
g%ardar el res%ltado en %na varia,le.
Q=Eostrar por pantalla dic"a varia,le.
Script secuencial
Script secuencial
*+,in,as"
*saldo.s" Script )%e procesa fic"erosnom,res.t$t
clear
read Gp 8DNgame el nom,re de %n cliente ? 8 /5EFCE
cat fic"erosnom,res.t$t ; grep R6/5EFCE H fic"erostemporal.t$t
050AB167 cat fic"erostemporal.t$t ; c%t Gd GfO =
/-5EDCAS167 cat fic"erostemporal.t$t ; c%t Gd Gf( =
EEDIA167ec"o Ascale1&9 6050AB 6-5EDCASA ; ,c Gl=
ec"o Ba media fact%rada es de 6EEDIA e%ros.
rm fic"erostemporal.t$t
Script secuencial
Script secuencial
nano sal%do.s"
*!/bin/bash
function saludo M
echo Hola Mundo
N
echo Ho$ a saludar
saludo
echo Oa he saludado
Funciones en un script.
Funciones en un script.
temperat%ra.s"
*!/bin/bash
function cent;7;fah M
echo +8 +>04D1J % E / I P ?7 9
N
read !p Dime los @rados centi@rados >04D1J
A4H0/-2+,cent;7;fah"
echo /so son +A4H0/- @rados en la escala Aahrenheit
Funciones en un script.
Funciones en un script.
E>ercicio? -rear %n script con nom,re longit%d.s" )%e nos
pida por pantalla %na pala,raI @ de,e indicarnos a
contin%acin la longit%d de dic"a pala,ra.
El script de,e repetir esto ' veces.
*!/bin/bash
function lon@itud M
& & & & & &
N
read !p Dime una palabra L4L4604
&
Funciones en un script.
Funciones en un script.
longit%d.s"
#!/bin/bash
function lon@itud M
-2+, echo +L4L4604 ' (c !c "
-2+8 +- ! < 9
echo +-
N
read !p QDime una palabra Q L4L4604
echo +,lon@itud"
read !p QDime una palabra Q L4L4604
echo +,lon@itud"
read !p QDime una palabra Q L4L4604
echo +,lon@itud"
Funciones en un script.
Funciones en un script.
Estr%ct%ra condicional IL 7sN ... entonces "az ...=
if S condicin T9 t"en
Flo)%e a realizar si condicin se c%mple
fi
Estructuras condicionales.
Estructuras condicionales.
Estr%ct%ra condicional IL 7sN=
if S condicin T9 t"en
Flo)%e a realizar si condicin se c%mple
fi
E>emplo?
if 8 +-1M60/ 2 Rose 9S then
echo Hola Gose
fi
Estructuras condicionales.
Estructuras condicionales.
ali,a,a.s"
*!/bin/bash
read !p Dime la palabra secreta L4L4604
if 8 +L4L4604 2 abracadabra 9S then
echo Mu$ bien, puedes pasar
fi
Estructuras condicionales.
Estructuras condicionales.
Estr%ct%ra IL EBSE 7sN .. en caso contrario ..=
if S condicin T9 t"en
Flo)%e a realizar si condicin se c%mple
else
Flo)%e a realizar si condicin no se c%mple
fi
Estructuras condicionales.
Estructuras condicionales.
ali,a,a!&.s"
*!/bin/bash
read !p Dime la palabra secreta L4L4604
if 8 +L4L4604 2 abracadabra 9S then
echo Mu$ bien, puedes pasar
else
echo /sa no es la palabra secreta, fuera
fi
Estructuras condicionales.
Estructuras condicionales.
cp ali,a,a!&.s" ali,a,a!'.s"
nano ali,a,a!'.s"
*!/bin/bash
# cuidado con este error Tue es peli@roso
read !p Dime la palabra secreta L4L4604
if 8 +L4L460A=abracadabra 9S then
echo Mu$ bien, puedes pasar
else
echo /sa no es, fuera
fi
Estructuras condicionales.
Estructuras condicionales.
Cadena1 = Cadena2 Verdadero si son iguales
Cadena1 != Cadena2 Verdadero si NO son iguales
Cadena1 < Cadena2 Verdadero si C1 menor que C2 (no usar)
Cadena1 > Cadena2 Verdadero si C1 mayor que C2 (no usar)
-n Variable Verdadero si Variable NO es nulo (vaco).
-z Variable Verdadero si Variable es nulo (vaco).
Operadores de comparacin de carcter
Operadores de comparacin de carcter
Numero1 -eq Numero2 Verdadero si son iguales (equal)
Numero1 -ne Numero2 Verdadero si NO son iguales (not equal)
Numero1 -lt Numero2 Verdadero si N1 menor que N2 (less that)
Numero1 -gt Numero2 Verdadero si N1 mayor que N2 (greater that)
Numero1 -le Numero2
Verdadero si N1 es menor o igual que N2 (less
or equal)
Numero1 -ge Numero2
Verdadero si N1 es mayor o igual que N2
(greater or equal)
Operadores de comparacin numricos.
Operadores de comparacin numricos.
ma@or!edad.s"
*!/bin/bash
read !p Dime tu edad /D4D
if 8 +/D4D !@e <D 9S then
echo Mu$ bien, puedes pasar
else
echo Hete a la @uardera
fi
Script con estructura alternativa.
Script con estructura alternativa.
menor!edad.s"
*!/bin/bash
read !p Dime tu edad /D4D
if 8 +/D4D !lt <D 9S then
echo Hete a la @uardera
else
echo Mu$ bien, puedes pasar
fi
Script con estructura alternativa.
Script con estructura alternativa.
compro,ar!edad.s"
*!/bin/bash
read !p Dime tu edad /D4D
if 8 +/D4D !lt <D 9S then
echo Hete a la @uardera
else
if 8 +/D4D !@e D= 9S then
echo Ha@a el fa#or de irse de aTu abuelo&
else
echo Mu$ bien, puedes pasar
fi
fi
Script con estructura alternativa.
Script con estructura alternativa.
Estr%ct%ra IL EBIL EBSE 7sN .. en caso contrario sN ..=
if S condicin 1 T9 t"en
Flo)%e a realizar si condicin 1 se c%mple
elif S condicin & T9 t"en
Flo)%e a realizar si condicin 1 no se c%mpleI
pero condicin & si se c%mple
else
Flo)%e a realizar si ning%na condicin se c%mple
fi
Estructuras condicionales.
Estructuras condicionales.
compro,ar!edad.s"
*!/bin/bash
read !p Dime tu edad /D4D
if 8 +/D4D !lt <D 9S then
echo Hete a la @uardera
elif 8 +/D4D !@e D= 9S then
echo Ha@a el fa#or de irse de aTu abuelo&
else
echo Mu$ bien, puedes pasar
fi
Script con estructura alternativa.
Script con estructura alternativa.
-a ichero Verdadero si ichero e!iste
-d ichero Verdadero si ichero e!iste y es un directorio
-f ichero Verdadero si ichero e!iste y es un ichero regular
-r ichero Verdadero si ichero e!iste y se "uede leer
-w ichero Verdadero si ichero e!iste y se "uede escribir
-x ichero Verdadero si ichero e!iste y se "uede e#ecutar
ichero1 -nt ichero2 Verdadero si ichero1 es mas nuevo que ichero2
ichero1 -ot ichero2 Verdadero si ichero1 es mas antiguo que ichero2
Operadores test.
Operadores test.
E>ercicio? -rear %n script con nom,re cs.s" )%e nos va a
a@%dar a crear scripts. -%ando se e>ec%te nos pedirK por
pantalla %n nom,re de scriptI @ a contin%acin compro,ara si
e$iste %n fic"ero o directorio creado en el directorio act%al
con ese mismo nom,re. Si es asN avisarK del error.
Si no e$iste nada con ese nom,reI crearK %n fic"ero con ese
nom,reI lo "arK e>ec%ta,le @ le aUadirK como primer linea
*+,in,as" @ como seg%nda lNnea la sig%iente?
* script nom,re generado el &22O&21(.
Script con estructura alternativa.
Script con estructura alternativa.
Dodemos com,inar condiciones %sando VV 7W=
if S condicin 1 T VV S condicin & T9 t"en
Flo)%e a realizar si se c%mple tanto condicin 1
como condicin &
fi
if S 6EDAD Gge 1X T VV S 6EDAD Glt X2T9 t"en
ec"o D%ede pasar
fi
Estructuras condicionales.
Estructuras condicionales.
Dodemos com,inar condiciones %sando ;; 75=
if S condicin 1 T ;; S condicin & T9 t"en
Flo)%e a realizar si se c%mple condicin 1 O
se c%mple condicin & 7con )%e se c%mpla 1 vale=
fi
if S 6EDAD Glt 1X T ;; S 6EDAD Gge X2T9 t"en
ec"o /o tienes edad para pasar
fi
Estructuras condicionales.
Estructuras condicionales.
Dodemos com,inar condiciones %sando ;; 75=
if S condicin 1 T ;; S condicin & T9 t"en
Flo)%e a realizar si se c%mple condicin 1 O
se c%mple condicin & 7con )%e se c%mpla 1 vale=
fi
if S 6EDAD Glt 1X T ;; S 6EDAD Gge X2T9 t"en
ec"o /o tienes edad para pasar
fi
Estructuras condicionales.
Estructuras condicionales.
Dodemos negar condiciones %sando + 7not=
If + S condicin 1 T9 t"en
Flo)%e a realizar si /5 se c%mple condicin 1
fi
If + S 6EDAD Gge 1X T9 t"en
ec"o /o tienes edad para pasar
fi
Estructuras condicionales.
Estructuras condicionales.
Estr%ct%ra iterativa L5C 7por cada elemento "az ...=
for VACIAFBE in -5/J./059 do
Flo)%e a realizar por cada elemento de con>%nto
varia,le va tomando los valores de cada elemento
done
Estructuras iterativas. (bucles)
Estructuras iterativas. (bucles)
Estr%ct%ra iterativa L5C 7por cada elemento "az ...=
-5/J./05 es c%al)%ier com,inacin de valores
separados por espacios en ,lanco o ,ien por retornos
de lNnea.
Estructuras iterativas. (bucles)
Estructuras iterativas. (bucles)
for VAB5C in 1( XQ YP perro gato9 do
ec"o VAB5C vale 6VAB5C
done
VAB5C vale 1(
VAB5C vale XQ
VAB5C vale YP
VAB5C vale perro
VAB5C vale gato
Estructuras iterativas. (bucles)
Estructuras iterativas. (bucles)
for VAB5C in 6-5/J./059 do
ec"o VAB5C vale 6VAB5C
done
Dro,ar )%e res%ltados salen con los sig%iente
con>%ntos?
-5/J./051:2 1 & ' ( O P Q X Y:
-5/J./05167ls Z.s"=
-5/J./05167cat fic"erosnom,res.t$t=
Estructuras iterativas. (bucles)
Estructuras iterativas. (bucles)
for VAB5C in 6-5/J./059 do
ec"o VAB5C vale 6VAB5C
done
Dro,ar )%e res%ltados salen con los sig%iente
con>%ntos?
-5/J./051:2 1 & ' ( O P Q X Y:
-5/J./05167ls Z.s"=
-5/J./05167cat fic"erosnom,res.t$t=
Estructuras iterativas. (bucles)
Estructuras iterativas. (bucles)
for VAB5C in 67se) &2=9 do
ec"o VAB5C vale 6VAB5C
done
for VAB5C in 67se) O 1O=9 do
ec"o VAB5C vale 6VAB5C
done
for VAB5C in 67se) 1 & &2=9 do
ec"o VAB5C vale 6VAB5C
done
Estructuras iterativas. (bucles)
Estructuras iterativas. (bucles)
Estr%ct%ra iterativa ["ile 7mientras condicin "az ...=
["ile S condicin T9 do
Flo)%e a realizar EIE/0CAS la condicin se c%mpla
done
Estructuras iterativas. (bucles)
Estructuras iterativas. (bucles)
Estr%ct%ra iterativa %ntil 7"asta condicin "az ...=
%ntil S condicin T9 do
Flo)%e a realizar 4AS0A )%e la condicin se c%mpla
done
Estructuras iterativas. (bucles)
Estructuras iterativas. (bucles)
/.E11
["ile S /.E Gle 12 T9 do
ec"o 6/.E
/.E16S 6/.E # 1 T
done
Estructuras iterativas. (bucles)
Estructuras iterativas. (bucles)
/.E11
["ile S /.E Gle 12 T9 do
ec"o 6/.E
/.E16S 6/.E # 1 T
done
1 & ' ( O P Q X Y 12
Estructuras iterativas. (bucles)
Estructuras iterativas. (bucles)
/.E11
%ntil S /.E Ggt 12 T9 do
ec"o 6/.E
/.E16S 6/.E # 1 T
done
Estructuras iterativas. (bucles)
Estructuras iterativas. (bucles)
/.E11
%ntil S /.E Ggt 12 T9 do
ec"o 6/.E
/.E16S 6/.E # 1 T
done
1 & ' ( O P Q X Y 12
Estructuras iterativas. (bucles)
Estructuras iterativas. (bucles)
Se le p%eden pasar parKmetros a %n script a la "ora de
invocarlo.
&/mipro@rama&sh <7 ?C perro @ato
1& GH parKmetro 1
'( GH parKmetro &
perro GH parKmetro '
gato GH parKmetro (
Paso de parmetros
Paso de parmetros
$1 %evuelve el "ar&metro n'mero 1
$2 %evuelve el "ar&metro n'mero 2
$n %evuelve el "ar&metro n'mero n (no "uede ser mayor de ()
$) %evuelve el "ar&metro cero. (*sto es+ el nombre del scri"t).
$, %evuelve el n'mero de "ar&metros que se han "asado.
$- %evuelve todos los "ar&metros "asados+ uno detr&s de otro.
Paso de parmetros
Paso de parmetros
E$iste %na varia,le especial 6\
Esta varia,le valdrK 2 si el Mltimo comando e>ec%tado
f%nciono ,ien.
Si el Mltimo comando e>ec%tado dio algMn tipo de errorI
esta varia,le no valdrK 2. 7valdrK 1I o &I o '.....=
Valores devueltos por las ordenes
Valores devueltos por las ordenes
*+,in,as"
clear
read Gp 8Dime %n nom,re de %s%ario ? 8 /5E
cat etcpass[d ; c%t Gc? Gf1 ; grep Gi 6/5E VH devn%ll
* A"ora preg%ntamos si el %ltimo comando 7grep= f%ncion
if S 6\ Ge) 2 T9 t"en
ec"o 6/5E es %n %s%ario del sistema
else
ec"o %s%ario desconocido en este sistema
fi
Valores devueltos por las ordenes
Valores devueltos por las ordenes
Ba varia,le 6CA/D5E nos dev%elve %n valor
aleatorio entre 2 @ '&QPQ 7por defecto=.
*+,in,as"
ec"o vo@ a generar %n nMmero aletario entre 2 @ O
/.EEC516S 6CA/D5E ] P T
* ] es %n operador aritm^tico )%e nos dev%elve el
* resto de %na divisin 7md%lo=.
ec"o 6/.EEC5
Variable RANDOM
Variable RANDOM
*+,in,as"
read Gp 8Dime %n nom,re de %s%ario ? 8 /5E
cat etcpass[d ; c%t Gc? Gf1 ; grep Gi 6/5E &H devn%ll
* A"ora preg%ntamos si el %ltimo comando 7grep= f%ncion
if S 6\ Ge) 2 T9 t"en
ec"o 6/5E es %n %s%ario del sistema
else
ec"o %s%ario desconocido en este sistema
fi
Comprobar un valor vacio
Comprobar un valor vacio
*+,in,as"
read Gp 8Dime %n nom,re de %s%ario ? 8 /5E
if S 86/5E: 1 8: T9 t"en
ec"o /o "as escrito nada
else
Ec"o 4as escrito el nom,re 6/5E
fi
Comprobar un valor vaco
Comprobar un valor vaco
*+,in,as"
BE0CA1::
["ile S 86BE0CA: 1 8: T9 do
read Gp 8Dime %na letra ? 8 BE0CA
done
ec"o 4as introd%cido la letra 6BE0CA
Comprobar un valor vaco
Comprobar un valor vaco
*+,in,as"
BE0CA1:_:
%ntil S 86BE0CA: +1 8: T9 do
read Gp 8Dime %na letra ? 8 BE0CA
done
ec"o 4as introd%cido la letra 6BE0CA
Comprobar un valor vaco
Comprobar un valor vaco
*+,in,as"
S.EA12
/.E1: 8
%ntil S 86/.E: 1 8: T9 do
read Gp 8Dime %n n%mero ? 8 /.E
S.EA1S 6S.EA # 6/.E T
done
ec"o Ba s%ma es 6S.EA
Comprobar un valor vaco
Comprobar un valor vaco
Bos con>%ntos del for separan s%s elementos por el espacio
en ,lanco o por el retorno de lNneaI esto presenta
pro,lemas si tenemos espacios en ,lanco en alg%nos
campos de %n fic"eroI @ )%eremos leer dic"o fic"ero por
lNneas.
* Esto no va a f%ncionar como esperamos
for BI/EA in 67cat fic"erosnom,res.t$t=9 do
ec"o Binea del fic"ero? 6BI/EA
done
Variable IFS
Variable IFS
Ba varia,le ILS 7Internal Lield Separator= nos permite
cam,iar el limitador del con>%nto. El valor 6`Jn` del ILS nos
permite separar solo por retornos de lNnea.
* Esto f%nciona ,ien
ILS16`Jn`
for BI/EA in 67cat fic"erosnom,res.t$t=9 do
ec"o Binea del fic"ero? 6BI/EA
done
%nset ILS
Variable IFS
Variable IFS
Scripts en linux
Scripts en linux


LI/
LI/
Implantacin de sistemas operativos. Implantacin de sistemas operativos.
1 asir. 1 asir.
I.E.S. francisco romero Vargas. I.E.S. francisco romero Vargas.
Jose Antonio carrasco Diaz. Jose Antonio carrasco Diaz.