Clase Shell
Clase Shell
Shell
Temas
selectos
de
Modelación
Numérica
Dr.
Jorge
Zavala
Hidalgo
Introducción
• El
shell
es
un
intérprete
de
comandos.
• Para
conoce
todos
los
shell
de
que
dispone
su
máquina
• cat
/etc/shells
• /bin/bash
• /bin/csh
• /bin/ksh
• /bin/sh
• /bin/tcsh
• /bin/zsh
• El
sha-‐bang
(#!)
al
inicio
de
una
secuencia
de
comandos
le
indica
al
sistema
que
el
archivo
es
un
conjunto
de
comandos
que
se
alimenta
al
intérprete
de
comandos
indicada.
• Inmediatamente
después
de
la
sha-‐bang
(#!)
es
una
ruta.
Esta
es
la
ruta
de
acceso
al
programa
que
interpreta
los
comandos
del
script,
ya
se
trate
de
shell,
un
lenguaje
de
programación,
o
una
u<lidad.
#!/bin/sh
#!/bin/bash
#!/usr/bin/perl
#!/usr/bin/tcl
#!/bin/sed
-‐f
#!/bin/awk
-‐f
• Este
intérprete
de
comandos
a
con<nuación,
ejecuta
los
comandos
en
el
script,
empezando
por
la
parte
superior
(la
línea
que
sigue
la
línea
de
(#!),
y
haciendo
caso
omiso
de
los
comentarios.
• Después
de
haber
escrito
el
guión,
para
ejecutarlo
es
mucho
más
conveniente
hacer
que
el
propio
script
ejecutable
directamente
con
un
chmod.
chmod
555
scriptname
(da
a
todos
los
usuarios
permiso
de
lectura
y
ejecución)
chmod
+rx
scriptname
chmod
u+rx
scriptname
(solo
da
al
propietario
premiso
de
lectura
y
ejecucion)
• Después
de
haber
hecho
el
script
ejecutable,
ahora
puedes
probarlo
.
/scriptname
Caracteres
especiales
• Comentarios
• Las
lineas
de
comentarios
comienzan
con
un
#
(con
excepción
de
#!)
#
This
line
is
a
comment.
• Comentarios
también
puede
ocurrir
después
comando.
echo
"A
comment
will
follow."
#
Comment
here.
#
^
Note
whitespace
before
#
Variables
• Referenciar
variables
• Aunque
se
pueden
dar
más
de
nueve
parámetros
a
un
guión
para
el
intérprete
de
órdenes,
sólo
se
puede
acceder
de
forma
directa
a
los
nueve
primeros.
• La
orden
shib
permite
desplazar
los
parámetros
de
si<o,
de
tal
forma
que
sean
accesibles
los
que
estén
más
allá
del
noveno,
con
el
inconveniente
de
no
poder
acceder
a
los
primeros.
• Cada
una
<ene
un
propósito
diferente,
y
se
deben
saber
usar
todas
bien.
• La
comilla
simple
(
‘
)
sirve
para
coger
literales.
Es
importante
darse
cuenta
de
que
algo
encerrado
entre
comillas
simples
siempre
es
un
solo
parámetro,
aunque
sea
una
ristra
vacía
(
’
’
).
• La
comilla
doble
sirve
para
sus<tuir
lo
que
hay
dentro
(valores
de
variables,
caracteres
especiales),
pero
después
de
sus<tuir
queremos
tratarlo
como
si
estuviera
encerrado
entre
comillas
simples.
x=100
y='500$x’
echo
$y
#
Esto
enseñará
`500$x'
en
pantalla
y="500$x”
echo
$y
#
Esto
enseñará
`500100'
en
pantalla
• El
comando
(punto
y
coma
“
;
”
).
Permite
poner
dos
o
más
comandos
en
la
misma
línea.
• El
comando
;;
se
usa
como
terminador
de
una
opción
de
case
¿Como
se
edita
un
script
de
Shell?
• Los
scripts
de
Shell
son
extremadamente
ú<les.
• Script:
Es
un
archivo
de
texto,
que
con<ene
una
serie
de
comandos
para
shell,
que
el
sistema
ejecuta
ordenadamente,
de
arriba
abajo.
Para
editarlos,
tan
solo
hace
falta
un
editor
de
textos,
como
Emacs,
o
Vi.
• Se
guardan
con
extensión:
.sh
y
se
ejecutan
desde
la
Shell
mediante
el
comando:
sh
nombre
de
script.sh.
• Los
scripts,
se
comportan
de
igual
manera
que
los
comandos
de
la
shell.
Ejemplo:
Calculadora
echo
“soy
Gnu/Cal”
echo
“Tu
me
dices
lo
que
quieres
calcular
y
yo
te
doy
el
resultado”
echo
“Introduce
el
primer
valor”
read
valor1
echo
“
Introduce
el
operador.
Puedes
escoger
entre:
+
-‐
*
/”
read
operador
echo
“
Introduce
el
segundo
valor”
read
valor2
echo
“El
resultado
es:”
sleep
2
expr
$valor1
$operador
$valor2
sleep
1
echo
“gracias
por
su
Tempo!”
Calculadora
2
• echo
########################
• echo
#
HOLA!
SOY
GNUCAL
V2
#
• echo
########################
• echo
• echo
Introduce
el
primer
valor:
• read
valor1
• echo
"Introduce
operador,
puede
elegir
suma
+,
resta
-‐,
mulTplicacion
*
y
division
/."
• read
ope
• echo
Introduce
segundo
valor:
• read
valor2
• resultado=`expr
$valor1
"$ope"
$valor2`
• echo
Resultado=$resultado
Ejemplo
2:
trivial.sh
• #!/bin/bash
• sleep
2
• clear
• echo
"Pasemos
a
la
siguiente
pregunta.
• echo
"Bienvenidos
a
GnuTrivial."
¿Qué
célebre
filosofo
Griego
tuvó
por
• sleep
2
discipulo
• echo
"Soy
el
apico
juego
de
preguntas
y
• a
Alejandro
Magno,
platón,
aristoteles
o
respuestas."
zenon?"
• sleep
2
• read
respuesta2
• echo
"Si
aciertas
todas
las
preguntas,
te
• if
test
$respuesta2
=
aristoteles
concedere
el
Ttulo
de
magister
del
• then
universo."
• echo
"respuesta
correcta."
• echo
"¿Como
se
llamaba
el
ulTmo
• else
emperador
Romano
de
occidente,
• echo
"Lo
siento,
la
respuesta
correcta
es:
claudio,
teodosio
Aristoteles."
• o
romulo."
• fi
• read
respuesta1
• if
test
$respuesta1
=
romulo
• if
test
$respuesta1
=
romulo
• test
$respuesta2
=
aristoteles
• then
• then
• echo
"Respuesta
correcta."
• echo
"Eres
un
pequeño
magister
del
• else
universo."
• echo
"Lo
siento,
la
respuesta
correcta
es:
• fi
romulo."
• fi
Ciclos
• Existen
tres
construcciones
conocidas
como
iteraciones
o
bucles.
Son
while,
unTl
y
for.
Sirven
para
ejecutar
ciclos
de
comandos
si
se
cumple
una
condición.
• Empecemos
en
primer
lugar
por
while.
Su
sintaxis
es
while
condicion
do
orden
done
• while
evalúa
la
condición.
Si
esta
es
correcta,
entonces
ejecuta
el
o
los
comandos
especificados.
• Si
no
es
correcta,
salta
a
la
siguiente
orden
que
haya
después
de
la
palabra
reservada
done.
Ejemplo
while
###########################
#
PROGRAMA
DE
EJEMPLO
#
#
DE
LA
SENTENCIA
DE
CONTROL
#
#
DE
FLUJO
WHILE
#
###########################
a=42
while
[
$a
-‐le
53
]
do
echo
Contador
=
$a
a=`expr
$a
+
1`
done
• La
construcción
unTl
es
muy
similar
a
while.
De
hecho,
comparte
la
misma
sintaxis.
La
diferencia
consiste
en
que
el
código
de
retorno
de
la
condición
debe
ser
falso
(dis<nto
de
0)
para
iterar.
Si
es
verdadero
saltará
a
el
comando
que
vaya
a
con<nuación
de
done.
Veamos
un
ejemplo:
###############################
#
PROGRAMA
DE
EJEMPLO
#
#
DE
LA
SENTENCIA
DE
CONTROL
DE
#
#
FLUJO
UNTIL
#
###############################
unTl
[
$a
=
hal9000
]
do
echo
"Bienvenidos
a
Programa1.
Para
conTnuar
escribe
contraseña"
read
a
done
echo
"contraseña
correcta"
• El
ciclo
for.
Su
sintaxis
es
como
sigue:
for
variable
in
lista
do
ordenes
done
• Es
diferente
a
while
y
unTl.
En
la
construcción
for
no
hay
que
cumplir
ninguna
condición.
• for,
simplemente
u<liza
como
variable
la
primera
cadena
de
una
lista,
ejecutando
las
ordenes
que
le
indiquemos
a
con<nuación.
• En
la
siguiente
iteración
u<lizará
la
siguiente
cadena
de
la
lista,
y
así
sucesivamente.
Veamos
un
ejemplo:
Ejemplo
###########################
#
PROGRAMA
DE
EJEMPLO
#
#
DE
LA
SENTENCIA
DE
CONTROL
DE
#
#
FLUJO
FOR
#
###########################
for
a
in
antonio
eva
fernado
joseba
julio
do
mail
$a
<
texto.txt
done