Scripts de Shell en Linux
-
Upload
danielvillavicencio -
Category
Documents
-
view
231 -
download
0
Transcript of Scripts de Shell en Linux
-
7/25/2019 Scripts de Shell en Linux
1/53
Scriptsde shell
-
7/25/2019 Scripts de Shell en Linux
2/53
Que es el Shell?
Es la interfaz entre el usuariofinal y el Sistema Operativo.
No es el S.O.
Existen mltiples versiones ypodemos averiguar cualtenemos instalada haciendo:% /bin/sh --version
Kernel
Otherprograms
X windowbash
csh
-
7/25/2019 Scripts de Shell en Linux
3/53
as ShellsEn !"#$ existen mltiples Shells
%ourne shell &sh'( ) shell &csh'( *orn shell &+sh'( ,) shell
&tcsh'( %ourne -gain shell &ash'.
a m/s popular es la 0ash1 shell.
%ash incorpora las prestaciones m/s tiles de la
*orn shell &+sh' y la ) shell &csh'.Ofrece me2oras funcionales sore otras shells
desde el punto de vista de programaciny desu uso interactivo
-
7/25/2019 Scripts de Shell en Linux
4/53
3rogramaci4n o scripting?ash no es nicamente una excelente shell por l5nea de comandos6
,ami7n es un lengua2e de scriptingen s5 mismo
El shell scriptingpermite utilizar las capacidades de la shell paraautomatizar mltitud de tareas 8ue( de otra forma( re8uerir5anmltiples comandos introducidos de forma manual
engua2e de programaci4n vs. scripting: os lengua2es de programaci4n son( en general( m/s potentes y
mucho m/s r/pidos 8ue los lengua2es de scripting
os lengua2es de programaci4n comienzan desde el c4digo fuente(8ue se compilan para crear los e2ecutales &lo 8ue permite 8ue los
programas sean f/cilmenete portales entre diferentes SSOO'
-
7/25/2019 Scripts de Shell en Linux
5/53
3rogramaci4n o scripting? !n lengua2e de scriptingtami7n comienza por el c4digo
fuente( pero no se compila en un e2ecutale
En su lugar( un int7rprete lee las intrucciones del ficherofuente y las e2ecuta secuecialmente
os programas interpretados son( en general( m/s lentos 8uelos compilados
a principal venta2a reside en 8ue el fichero de c4digo fuente
es f/cilmente portale a cual8uier sistema operativo
-
7/25/2019 Scripts de Shell en Linux
6/53
-
7/25/2019 Scripts de Shell en Linux
7/53
E2ecutemos el programa
$ hola.sh
bash hola.sh command no% ound
El directorio home &el lugar donde est/ uicado el programahola.sh' no est/ en la variale de entorno 3-,9
echo $'H
bin/us"/bin*
eemos especificar el path de hola.sh
$/home/es%udian%e/dm++-/hola.sh
$./hola.sh
El primer programa ash
-
7/25/2019 Scripts de Shell en Linux
8/53
-
7/25/2019 Scripts de Shell en Linux
9/53
Si lo e2ecutamos veremos 8ue da muchos mensa2es de
error; Si ya existe un archivo
; Si no existe un archivo
; ...Ser5a ueno poder introducir controles para decidir 8uehacer segn lo 8ue pase.
El segundo programa ash
-
7/25/2019 Scripts de Shell en Linux
10/53
-
7/25/2019 Scripts de Shell en Linux
11/53
E2emplo
#!/bin/bash+345Hola Mundo!5 # sin esacios en blanco
echo $+3
a l5nea = crea una variale denominada S,> y le asignala cadena 9ola @undoA
El valor de esta variale se recupera anteponiendo uns5molo BA a su nomre.
-
7/25/2019 Scripts de Shell en Linux
12/53
-tenci4n CEl lengua2e de programaci4n de la shell no hace uncasting de los tipos de las variales
Esto signifca 8ue una misma variale puede contenerdatos num7ricos o de texto contadorD
contadorDomingo
a conmutaci4n del ,#3O de una variale puedeconllevar a confusi4n
%uena pr/ctica: asociar siempre el mismo tipo de dato auna variale en el contexto de un mismo script
-
7/25/2019 Scripts de Shell en Linux
13/53
El caracter de escape de la ash es\ypreserva el valor literal del siguiente caracter
al 8ue acompaFa:
$ ls 61
ls: *: No such file or directory
-tenci4n C
-
7/25/2019 Scripts de Shell en Linux
14/53
)omillas simples y doles)uando se asignen datos caracter 8ue contengan espacios enlanco o caracteres especiales( se deer/ encerrar entre comillassimples o doles
as doles comillas har/n 8ue si( en su contenido se referencia unavariale( 7sta sea resuelta a su valor
va"45cadena de "ueba5
nuevava"458alo" de va" es $va"5
echo $nuevava"
8alo" de va" es cadena de "ueba
9acer un script 8ue muestre por pantalla:
-
7/25/2019 Scripts de Shell en Linux
15/53
as comillas simples mostrar/n una cadena decaracteres de forma literal sin resoluci4n de variales
> var='cadena de prueba'
> nuevavar='Valor de var es $var'
> echo $nuevavar
Valor de var es $var
)omillas simples y doles
-
7/25/2019 Scripts de Shell en Linux
16/53
)omando exo"%El comando exportpone una variale en el entorno de forma 8uesea accesile por los procesos hi2os. 3or e2emplo:
$ x4hola $ bash # 9:ecu%a una shell en "oceso hi:o
$ echo $x # ;ada en x
$ exi% # 8olvemos al "oceso ad"e
$ exo"% x
$ bash
$ echo $x
hola # h< es%=.
-
7/25/2019 Scripts de Shell en Linux
17/53
Si el proceso hi2o modifica el valor de la variale x( nomodificar/ el valor original del proceso padre.
-
7/25/2019 Scripts de Shell en Linux
18/53
-
7/25/2019 Scripts de Shell en Linux
19/53
-
7/25/2019 Scripts de Shell en Linux
20/53
9O@E:argumento por defecto &directorio home' del comando cd.
3-,9: el path de s8ueda de comandos. Es una lista dedirectorios separados por :A en los 8ue se uscar cuando se tecleacual8uier comando
"ormalmente( introducimos los comandos de la siguiente manera:
B .Gtrash.sh
Estaleciendo 3-,9DB3-,9:. "uestro directorio de traa2o seincluye en path de s8ueda de comando y simplemente podremos
introducir: B trash.sh
-
7/25/2019 Scripts de Shell en Linux
21/53
OJ"-@E: contiene el nomre de usuario
9OS,"-@E: contiene el nomre de la m/8uina
@-)9,K3E: sistema hardLare
3SM: secuencia de caracteres monstrados antes del prompt
Nthora
Ndfecha
NLdirectorio actual
Nltima parte del directorio actual
Nunomre de usuario
NBcaracter del prompt
!#: contiene el id del usuario 8ue no puede ser modificado
S9
-
7/25/2019 Scripts de Shell en Linux
22/53
BP: nmero argumentos
B: todos los argumentos de la shell
BR: seme2ante a la variale anterior
B;: opciones suministradas a la shell
B?: devolver valor de la ltima orden e2ecutada
BC: identificaci4n del proceso de la ltima orden 8ue
comenz4 con
Variables Intrnsecas
-
7/25/2019 Scripts de Shell en Linux
23/53
)omando exi%
El comando exitse puede utilizar para finalizar la e2ecuci4n deun script o para devolver una valor( el cu/l estar/ disponile alproceso padre del script.
)uand un script termina con exit sin par/metros( el estado desalida ser/ el del ltimo comando e2ecutado en el script
#!/bin/bash
AM;B-
. . .
# sale con el es%ado de la e:ecuciCn
#del Dl%imo comando.
E>FM-AM;B
exi%
#!/bin/bash
AM;B-
. . .
# sale con el es%ado de la e:ecuciCn
#del Dl%imo comando.
E>FM-AM;B
exi% $G
-
7/25/2019 Scripts de Shell en Linux
24/53
)uando se e2ecuta el script con el comandoexitcon par/metros( la sintaxis es:
exit nnn
onde nnnD;=TT y el estado de salida es nnn
)omando exi%
-
7/25/2019 Scripts de Shell en Linux
25/53
)omando3eadEl comando readnos permite solicitar un valor deentrada para almacenarlo en una variale
E2emplo &lee".sh'#!/bin/bash
echo n Fn%"oduca nomb"e de iche"o a bo""a"
"ead iche"o
"m i $iche"oecho Iiche"o $iche"o bo""ado!5
-
7/25/2019 Scripts de Shell en Linux
26/53
Opciones read Us &no hace echo de la entrda'
read Un" &acepta s4lo " caracteres de entrada'
read Up 0mensa2e1 &muestra un mensa2e'
read Ut, &acepta una entrada por un tiempo
m/ximo de , segundos'
E2emplo$ "ead s n si (+) o no (;)G "esues%a
si (S) o no (N) ? S
$ echo $"esues%a
S
)omando 3ead
-
7/25/2019 Scripts de Shell en Linux
27/53
Sustituci4n de comandosEl s5molo 0V1 tiene un uso diferente de 0W1. Se utiliza para sustituci4n deinstrucciones. Es decir si dentro de un script aparece el texto 0 VcomandoV1entonces se e2ecutar/ lo orden 8ue estX entre las 0V1
$ >F+4JlsJ$ echo $>F+ # >is%a los a"chivos
hola.sh lee".sh
Otra forma de realizar la sustituci4n de comandos: $(comando)
$ >F+4$(ls)
$ echo $>F+
hola.sh lee".sh
ls $( d )
ls $( echo /bin )
-
7/25/2019 Scripts de Shell en Linux
28/53
Operadores aritm7ticosK suma
"es%a
1 mul%ilicaciCn
/ divisiCn11 exonenciaciCn
L mCdulo
E2emplo$ a4(KN)1O$ echo $a
$ b4N11O
$ echo $aK$b
-
7/25/2019 Scripts de Shell en Linux
29/53
a instrucci4n letse puede utilizar para realizar funciones matem/ticas: $ le% ?40KN17
$ echo $?
NP
$ le% Q4?KN1P
$ echo $Q
ON
!n expresi4n aritm7tica se puede evaluar con BYexpressionZoB&&expression''
$ echo $((NOKN0))
PO $ 8>34$RNOKN0S
$ echo $RNO1$8>3S
PO0
$ echo $RN11OS
$ echo $RTLOS
No es necesario utilizar $Xpara referenciar el valor
de X
Evaluaci4n aritm7tica
-
7/25/2019 Scripts de Shell en Linux
30/53
E2emplo &oe"aciones.sh'PCGinGashecho ;n 0#ntroduzca un primer nmero: 1[ read x
echo ;n 0#ntroduzca un segundo nmero : 1[ read y
sumaDB&&Bx \ By''
restaDB&&Bx ; By''mulDB&&Bx By''divDB&&Bx G By''
modDB&&Bx ] By''
P imprimimos las respuestas:echo 0Suma: Bsuma1echo 0>esta: Bresta1echo 0@ultiplicaci4n: Bmul1
echo 0ivisi4n: Bdiv1
echo 0@4dulo: Bmod1
Evaluaci4n aritm7tica
-
7/25/2019 Scripts de Shell en Linux
31/53
Estructuras de control ;M;condicional
a forma m/s /sica es:
if YexpresinZ[
then
instrucciones
elif YexpresinZ[
then
instrucciones
else
instrucciones
fi
as secciones elif&else if' y elseson opcionales
-
7/25/2019 Scripts de Shell en Linux
32/53
-
7/25/2019 Scripts de Shell en Linux
33/53
)omparaci4n num7rica: ;e8
;ge
;le
;ne
;gt
;lt
E2emplos:
Y nM ;e8 n= Z
Y nM ;ge n= Z Y nM ;le n= Z
Y nM ;ne n= Z
Y nM ;gt n= Z
Y nM ;lt n= Z
Expresiones
-
7/25/2019 Scripts de Shell en Linux
34/53
Ejemplo(comparacion0s!
#!/bin/bash
echo n Fn%"oduca su nomb"e de usua"io 5
"ead lo2in
i R $lo2in 4 $E+93 SU %hen
echo Hola, $lo2in. ACmo es%= hoVG
else
echo D no e"es $lo2in!!!
i
-
7/25/2019 Scripts de Shell en Linux
35/53
Ejemplo(comparacion"s!
#!/bin/bash
echo n Fn%"oduca un nDme"o W x W 0 5
"ead num
i R $num l% 0 SU %hen
i R $num 2% SU %hen
echo $num1$num4$(($num1$num))
else
echo ;Dme"o ue"a de "an2o !
i
elseecho ;Dme"o ue"a de "an2o !
i
-
7/25/2019 Scripts de Shell en Linux
36/53
Operadores de archivos: ;d verifica si el path dado es un directorio
;f verifica si el path dado es un archivo
;s verifica si el path dado en un lin+ sim4lico
;e verifica si el fichero existe
;s verifica si el fichero tiene un tamaFo mayor a ;r verifica si el fichero tiene permiso de lectura
;L verifica si el fichero tiene permiso de escritura
;x verifica si el fichero tiene permiso de e2ecuci4n
E2emplos:
Y ;d nomreIficheroZ Y ;f nomreIfichero Z
Y ;e nomreIfichero Z
Y ;s nomreIfichero Z
Y ;r nomreIfichero Z
Y ;L nomreIfichero Z
Y ;x nomreIfichero Z
Expresiones
-
7/25/2019 Scripts de Shell en Linux
37/53
E2emplo
Ejemplo(comparacion#archivoss!#!/bin/bash
i R /e%c/s%ab SU %henc /e%c/s%ab .
echo Hecho.
elseecho "chivo /e%c/s%ab no exis%e.
exi% i
-
7/25/2019 Scripts de Shell en Linux
38/53
Expresiones
Operadores l4gicos: C "O,
;a -"
;o O>
Ejemplo(comparacion#lo$ica"sh!#!/bin/bash
echo n Fn%"oduca un nDme"o en%"e W x W 0
"ead num
i R $num 2% a$num l% 0 SU
%henecho $num1$num4$(($num1$num))
else
echo ;Dme"o in%"oducido inco""ec%o !
i
-
7/25/2019 Scripts de Shell en Linux
39/53
Operadores l4gicos: -"
^^ O>
Ejemplo(comparacion#lo$ica&sh!#!/bin/bashecho n Fn%"oduca un nDme"o W x W 0 5
"ead num
iR $numbe" 2% S ''R $numbe" l% 0 SU
%henecho $num1$num4$(($num1$num))
else
echo ;Dme"o in%"oducido inco""ec%o !
i
Expresiones
-
7/25/2019 Scripts de Shell en Linux
40/53
ospar/metros posicionalesse asignan desde la shell cuando se invoca. 3ar/metroposicional 0"1 se referencia como 0B_"`1( o 0B"1 cuando 0"1 lo forma un s4lo d5gito
3ar/metros especiales
BP nmero de par/metros pasados
Bdevuelve el nomre del shell script 8ue se est/ e2ecutando y su uicaci4n en elsistema de archivos
B devuelve en una cadena de caracteres todos los par/metros pasados al script
BRdevuelve un array con los par/metros pasados al script
Ejemplo(parametrossh!#!/bin/bash
echo $#U $0U $U $NU $1U $X
$ a"ame%"os.sh es%udian%e es%udian%eN
NU ./a"ame%"os.shU es%udian%eU es%udian%eNU es%udian%e
es%udian%eNU es%udian%e es%udian%eN
3ar/metros de la shell
-
7/25/2019 Scripts de Shell en Linux
41/53
#nstrucci4nAase
case$va" in
val)
ins%"uccionesUU
valN)
ins%"uccionesUU
1)
ins%"uccionesUUesac
-
7/25/2019 Scripts de Shell en Linux
42/53
Ejemplo(casesh!#!/bin/bash
echo n Fn%"oduca un nDme"o en%"e W x W 0
"ead x
case $x in
) echo 8alo" de x es .UUN) echo 8alo" de x es N.UU
O) echo 8alo" de x es O.UU
P) echo 8alo" de x es P.UU
) echo 8alo" de x es .UU
@) echo 8alo" de x es @.UU
7) echo 8alo" de x es 7.UUT) echo 8alo" de x es T.UU
Y) echo 8alo" de x es Y.UU
0 Z 0) echo ;Dme"o inco""ec%o.UU
1) echo 8alo" no "econocido.UU
esac
E2emplo
-
7/25/2019 Scripts de Shell en Linux
43/53
Estructura o"
for
o"va"in lis%a
do
s%a%emen%sdone
Ejemplo(for"sh!#!/bin/bash
le% sum40
o" num in N O P do
le% sum 4 $sum K $num
done
echo $sum
-
7/25/2019 Scripts de Shell en Linux
44/53
Estructura o"Ejemplo(for&sh!#!/bin/bash
o" x in ael lai boliU do
echo 9l valo" de la va"iable x es $x
slee
done
Ejemplo(forsh!#!/bin/bash
o" x in ael P lai +B>93 boli [FAU do
echo 9l valo" de la va"iable x es $x
slee
done
Ejemplo(for)sh!#!/bin/bash
lis%a4an%onio luis ma"ia ea
o" x in $lis%a
do
echo 9l valo" de la va"iable x es $x
slee
done
-
7/25/2019 Scripts de Shell en Linux
45/53
Ejemplo(forsh!#!/bin/bash# >is%a %odos los iche"os del di"ec%o"io ac%ual
o" x in 1do ls l $x slee done
Ejemplo(for+sh!#!/bin/bash# >is%a %odos los iche"os del di"ec%o"io /bin
o" x in /bindo ls l $xdone
Estructura o"
-
7/25/2019 Scripts de Shell en Linux
46/53
Ejemplo(for,sh!#!/bin/bash
"ead Fn%"oduca el nomb"e de un di"ec%o"io
di"ec%o"ioecho enlaces simbClicos en el di"ec%o"io
$di"ec%o"io
o" iche"o in $( ind $di"ec%o"io %Ve l )
do
echo 5$iche"o5
done
Estructura o"
-
7/25/2019 Scripts de Shell en Linux
47/53
-rrays con ucles
)rear un arraymasco%aR0S4e""o
masco%aRS42a%o
masco%aRNS4e
e%4( e""o 2a%o e )
ongitud m/xima de un array son M= elementos.
3ara extraer una entrada del array$\a""aVRiS]$ echo $\masco%aR0S]
e""o$ echo $\masco%aRNS]
e
-
7/25/2019 Scripts de Shell en Linux
48/53
3ara extraer todos los elementos se utiliza unasterisco:
echo $\a""aVR1S]
3ara saer cu/ntos elementos hay en el array:echo $\#a""aVR1S]
3odemos cominar los arrays con ucles utilizandofor:
o" x in $\a""aVR1S]
do
echo $\a""aVR$xS]
done
-rrays
-
7/25/2019 Scripts de Shell en Linux
49/53
%ucle tipo )
Estructura tipo ) alternativa para for o"(( 9?'3U 9?'3NU 9?'3O))
do
ins%"ucciones
doneEjemplo(forsh!
#!/bin/bashecho Fn%"oduca un nDme"o U "ead x
le% sum40
o" (( i4 U $iW$x U i4$iK )) U do le% sum 4 $sum K $i
done
echo >a suma de los "ime"os $x nDme"os es $sum
-
7/25/2019 Scripts de Shell en Linux
50/53
hileexpresion_evalua_a_truedo
instrucciones
done
Ejemplo(.hilesh!#!/bin/bash
echo n Fn%"oduca un nDme"o U "ead x
le% sum40U le% i4
hile R $i le $x SU do
le% sum 4 $sum K $i
le% i 4 $i K
done
echo >a suma de los "ime"os $x nDme"os es $sum
Estructura hile
-
7/25/2019 Scripts de Shell en Linux
51/53
un%il Rexpression_evalua_a_trueSdo
instrucciones
done
Ejemplo(untilsh!#!/bin/bash
echo Fn%"oduca un nDme"o U "ead x
echo U
un%il R $x le 0 SU do
echo $x
x4$(($x ))
slee done
echo U echo IF;
Estructura un%il
-
7/25/2019 Scripts de Shell en Linux
52/53
Ejemplo(func"sh!#!/bin/bash
unc%ion chec()\
i R e 5/home/$5 S
%hen
"e%u"n 0else
"e%u"n
i
]
echo Fn%"oduca el nomb"e del a"chivo U "ead x
i chec $x
%hen
echo $x exis%e !
else
echo $x no exis%e !
i
bunciones
-
7/25/2019 Scripts de Shell en Linux
53/53
epuraci4n
%ash ofrece dos formas de depurar los shell scriptsv : muestra cada l5nea completa del script antes de ser e2ecutada
!: muestra cada l5nea areviada del script antes de ser e2ecutada
!so: PCGinGash Uv( o PCGinGash Ux
Ejemplo(depuracionsh!#!/bin/bash x
echo n Fn%"oduca un nDme"o U "ead x
le% sum40
o" (( i4 U $iW$x U i4$iK )) U do
le% sum 4 $sum K $i
done
echo >a suma de los $x "ime"os nDme"os es $sum