0 calificaciones0% encontró este documento útil (0 votos) 122 vistas25 páginasIlovepdf Merged
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido,
reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
MM TREC
EY TTT CE CT Dar Lea
con mas de 200 ejercicios resueltos
Julio Gomez Lopez
COE Emer
_—— 3.1 (5“Dovnrvv..Programacion Shell
Aprende a programar con mas de
200 ejercicios resueltosDescarga de Material Adicional
Este E-book tiene disponible un material adicional que complementa el
contenido del mismo.
Este material se encuentra disponible en nuestra pagina Web [Link].
Para descargario debe dirigirse a la ficha del libro de papel que se corresponde
con el libro electrénico que Ud. ha adquirido. Para localizar la ficha de! libro de
papel puede utilizar el buscador de la Web.
Una vez en la ficha del libro encontraré un enlace con un texto similar a este:
“Descarga del material adicional del libro”
Pulsando sobre este enlace, el fichero comenzara a descargarse.
Una vez concluida la descarga dispondra de un archivo comprimido. Debe
utilizar un software descompresor adecuado para completar la operacién. En el
proceso de descompresién se le solicitara una contrasefia, dicha contrasefia
coincide con los 13 digitos del ISBN del libro de papel (incluidos los guiones)
Encontraraé este dato en la misma ficha del libro donde descargé el material
adicional.
Si tiene cualquier pregunta no dude en ponerse en contacto con nosotros en la
siguiente direccién de correo: ebooks@[Link]Programacion Shell
Aprende a programar con mas de
200 ejercicios resueltos
Julio Gomez Lopez
Gonzalo Puga Sabio
> Ra-Ma’La ley prohibe
copiar o imprimir este libro
PROGRAMACION SHELL, APRENDE A PROGRAMAR CON MAS DE 200 EJERCICIOS RESUELTOS
(© Julio Gomez Lope y Gonzalo Puga Sabio
© De la Edicion Original en papel publicada por Editorial RA-MA
ISBN de Euicidn en Papel: 978-84-9964-138-6
‘Todos los derechos reservados © RA-MA, S.A. Editorial y Publicaciones, Madrid, Espatia,
MARCAS COMERCIALES. Las designaciones utilizadas por las empresas para distinguir sus productos
(hardware, software, sistemas operatives, etc) suelen ser marcas registradas, RA-MA ha intentado a lo largo de
este libro distinguir las marcas comerciales de los términos descriptivos, siguiendo el estilo que utiliza el
fabricante, sin inteneién de infringir Ia marea y solo en beneficio del propictario de la misma, Los datos de los
«ejemplos y pantalla son fiticios ano ser que se especitique lo contrari.
RA-MA es una marca comercial registrada
‘Se ha puesto el méximo empefio en ofrecer al lector una informacion completa y precisa, Sin embargo, RA-MA
Editorial no asume ninguna responsabilidad derivada de su uso ni tampoco de cualquier violacién de patentes ni
‘otros derechos de terceras partes que pudieran ccurrir. Esta publicacién tiene por objeto proporcionar unos
conocimientos precisos y acreditados sobre el tema tratado, Su venta no supone para el editor ninguna forma de
asistencia legal, administrativa © de ningin otro tipo, En easo de precisarse asesoria legal u otra forma de ayuda
cexperta, deben buscarse los servicios de un profesional competcnte,
Reservados todos los derechos de publicecién en cualquier idioma,
Segiin lo dispuesto en el Codigo Penal vigente ninguna parte de este libro puede ser reproducids, grabada en
sistema de slmacenamiento o transmitida en forma alguna ni por cualquier procedimiento, ya sea electronico,
mecinico, reprogritico, magnético © cualquier otro sin autorizacion previa y por escrito de RA-MA; su contenido
esti protegido por Ia Ley vigente que establece penas de prisién y/o multas a quienes, intencionadamente,
reprodujeren o plagiaten, en todo 0 en parte, una obra lteraia,atistica © cientifi
Editado por:
RA-MA, S.A. Editorial y Publicaciones
Calle Jarama, 33, Poligono Industrial IGARSA
28860 PARACUELLOS DE JARAMA, Madrid
Teléfono: 91 658.42 80
Fax: 91 662 81 39
Comteo electronico: cditorial@rama com
Internet: [Link]-maes y www [Link]
Maguetacién: Gustavo San Roman Bosrueco
Disefo Portada: Antonio Garcia Tomé
ISBN: 978-84-9964-418.9
E-Book desarrollado en Espana en septismbre de 2014,A mi gran tesoro, mi hijo Julio.
Julio.
A mis padres, por enseharme
que no hay metas inalcanzables con
efuerzo. ¥, como no, a Soledad M.
por su gran apoyo y carito.
Gonzalo.INDICE
INTRODUCCION
CAPITULO 1. INTRODUCCION A LA PROGRAMACION SHELL.
1.1.1 Tipos de Shell.
1.1.2 Shell del sistema..
1.1.3 Estableciendo el Shell por defecto
1.2 BASH... -
1.3 MODOS DE EJECUCION DE Ct
1.3.1 Comandos empotrados (built-in
1 Linea de comandos.
1.3.3 Seript
1.3.4 Metacaracteres. se a 24
JANDOS ..
1.3.5 Variables de entorno......
1.4 PERSONALIZAR EL ENTORNO...
1.4.1 Ficheros de configuracién de Bash
1.42 Alias
1.4.3 Opciones de Bash 7 - cee
1.4.4 Coloreando el Shell...
1.5 CARACTERISTICAS ESPECIALES..
1.5.1 Programas interactivos..
1.5.2 Control de trabajos...
1.5.3 Intérprete de uso restringido...
1.6 APLICANDO CONOCIMIENTOS
1,7 EJERCICIOS PROPUESTO!8_PROGRAMACION SHELL, APRENDE A PROGRAMAR CON MAS DE 200. © RAMA
CAPITULO 2. SHELL DEL SISTEMA.
2.1 LINEA DE COMANDOS.....
2.1.1 Editor de linea de comands ..
2.1.2 Moverse por la linea de comandos.
2.1.3 Borrar partes de la Iinea de comandos
2.1.4 Historial de comandos.....
2.1.5 Autocompletar con el tabulador se 59
2.1.6 Ejecutar la linea de comandbs...
2.2 ENTRADA Y SALIDA ESTANDAR..
2.2.1 Terminal como archivi
2.2.2 Redirigir la salida estandar 6
2.2.3 Redirigir la entrada estandar..
2.2.4 Noclobber: evitar la sobreseritura de ficheros ..
2.2.5 Coneatenando la salida estdndar a un fichero
2.2.6 /dev/null: haciendo desaparecer datos.
2.2.7 Cauces
2.2.8 Filttos ..
2.2.9 Tee: enwviar la salida en dos direcciones..
2.3 TRATAMIENTO DE DATOS ..
2.4 INTRODUCCION A GAWK (GNU AWK).
2.4.1 Impris
2.4.2 Dando formato a la salida en awk
2.4.3 Uso de expresiones regulares.
2.4.4 Patrones especiales...
2.4.5 Separador de campos de entrad:
ndo en awk.
2.4.6 Separador de campos de salida os 3
2.4.7 Nimero de registros procesadOs eens 74
2,5 APLICANDO CONOCIMIENTOS 5
2.6 EJERCICIOS PROPUESTOS,
CAPITULO 3. PROGRAMACION BASICA.....
S,LINTRODUCGION wa wisscnausnaaimiiaii
3.2 MI PRIMER SCRIPT.
3.3 VARIABLES Y EXPRESIONES..
3.3.1 Variables...
3.3.2 Expresiones
3.3.3 Entrecomillado y expansion...
3.4 APLICANDO CONOCIMIENTOS© RAMA inpice_9
3.5 EJERCICIOS PROPUESTOS,
CAPITULO 4, PROGRAMACION ESTRUCTURAD:
4.1 INTRODUCCION
4.2 ESTRUCTURAS CONDICIONALES.
4.2.1 Condicién simple (if... then) as
4.2.2 Condiciones compuestas (if... then... else)...
4.2.3 Condiciones anidadas (if, then y elif)
4.2.4 Condiciones miltiples (case)
4.3 BUCLES
43.1 Buele for.
4.3.2 Buele for in
4.3.3 Buele while.
4.3.4 Bucle until ..
4.3.5 Interrumpiendo bucles: break y continue .
4.3.6 Select
4.4 FUNCIONES
4.5 RECURSIVIDAD.
4.6 APLICANDO CONOCIMIENTOS
4.7 EJERCICIOS PROPUESTOS
CAPITULO 5. PROGRAMACION DE TAREAS.
5.1 ASPECTOS BASICOS....
5.2CRON
8.2.4 Iniciar C100 ns
$.2.2 Configuracién de cron.
5.2.3 Operadores
5.2.4 Directorios predefi
5.2.5 Control de acceso a cron
$.2.6 Log de cron...
5.2.7 Deshabilitar el envio de e-mails
5.2.8 Instalar crontab desde archivo...
$.3 ANACRON reenter
5.3.1 Configuraci
os.
de las tareas de anacron.
5.3.2 Iniciar y finalizar el servici
S4ATY BATCH
5.4.1 Configuracién de tareas at..
5.4.2 Control de acceso a at y batch...10_PROGRAMACION SHELL, APRENDE A PROGRAMAR CON MAS DE 200. © RAMA
5.4.3 Iniciar y finalizar el servicio.
5.5 APLICANDO CONOCIMIENTOS
5.6 EJERCICIOS PROPUESTO!
CAPITULO 6. ADMINISTRACION DEL SISTEMA.
6.1 INTRODUCCION .
6.2 ADMINISTRACION DE USUARIOS.
6.2.1 Tipos de usuarios...
6.2.2 Comandos de administracién de usuarios
6.2.3 Comandos de administracién de contrasefias.
6.2.4 Comandos de administracién de grupos ..
6.2.5 Ficheros involuerados
6.2.6 Archivos de inicializacion.
6.2.7 Archivos de configuracién del usuario ...
6.2.8 Comunicacién con los usuarios
6.3 SISTEMA DE ARCHIVOS.
6.3.1 Comandos basicos..
6.3.2 Buisqueda de ficheros
6.3.3 Copias de seguridad .....
6.4 PERMISOS
6.4.1 Establecer permisos..
6.4.2 Establecer el usuario y el grupo propictario
6.5 COMUNICACIONES ..
6.5.1 Conexién remota mediante SSH ..
6.5.2 Transferencia de ficheros
6.6 APLICANDO CONOCIMIENTOS
6.7 EJERCICIOS PROPUESTOS ..
CAPITULO 7. DEPURACION DE SCRIPTS
7.1 INTRODUCCION..
7.2 COMO IMPLEMENTAR BUENOS SCRIPTS..
7.2.1 Estructura
7.2.2 Recomendaciones de programacién
7.3 OPCIONES DE BASH PARA DEPURACION
7.4 SENALES FALSAS..
7.4.1 Sefial SIGEXIT
7.4.2 Sefal SIGERR.
7.4.3 Sefial SIGDEBUG.....co0son one© RAMA iNDICE 1
7.4.4 Senal SIGRETURN 275
7.5 UN DEPURADOR BASH... 275
7.5.1 Estructura del depurador ... 216
7.5.2 El preambulo .278
7.6 FUNCIONES DEL DEPURADOR .. 279
7.6.1 Avanzar paso a paso. 279
7.6.2 El mend de comandps ..... ...280
7.6.3 Puntos de ruptura por mfimero de linea 282
7.6.4 Puntos de ruptura condicionale: 285
7.6.5 Trazar la ejecucién 285
7.7 EJEMPLO DE EJECUCION erecssnissstnsesesnncn ns viernes annus DEB)
7.8 EJERCICIOS PROPUESTOS, : ‘i sso BT
INDICE ALFABETICO.. 289INTRODUCCION
El Shell es un intérprete de comandos que permite al administrador
ejecutar determinadas tareas. Pero el Shell no es tinicamente eso, ya que los
intérpretes de comandos son un auténtico lenguaje de programacién, que permiten
al administrador automatizar y programar tareas. Como cualquier lenguaje de
programacién, el Shell de GNU/Linux incorpora sentencias de control de flujo, de
asignacién, de funciones, ete.
Los programas de Shell no necesitan ser complicados, como ocurre en
otros Ienguajes, y son ejecutados linea a linea, por lo que a estos programas se les
conoce con el nombre de “Shell scripts”.
Desde que en los aijos setenta se desarrollara UNIX, se han incluido con él
varias variantes del lenguaje de Shell. El més popular y comin es el Bourne Shell,
por su creador. En las variantes de UNIX de BSD se incluyé el C-Shell, una
variante con sintaxis mas parecida a C que el Bourne. También, el Korn Shell
incluy6 funciones para controlar los trabajos en segundo plano, etc.
En el caso de los sistemas GNU/Linux, se incluye el Bash (Bourne again
Shell), que aglutina caracteristicas de todas las variantes, pero que sigue la filosofia
del Bourne. Se utilizara este intérprete por ser el que viene por defecto.
Este libro esta pensado como via de entrada a la programacién en Bash,
pero intentando, al mismo tiempo, Hegar un poco mas alld, Para ello expone,
mediante ejemplos practicos, la potencia y funcionalidad que puede aportar este
lenguaje a la hora de trabajar con cualquier sistema GNU/Linux en general y con
los servidores en particular.14 PROGRAMACION SHELL, APRENDE A PROGRAMAR CON MAS DE 200. © RAMA
El libro se estructura en los siguientes capitulo:
© Capitulo 1, Introduccién a la programacién Shell. En el primer
capitulo, se presentan los tipos de Shell de los que disponen los sistemas
GNU/Linux, para comenzar a adentrarse en los aspectos basicos de
Bash, que le permitiran familiarizarse con el entorno de trabajo, el uso
de los comandos del sistema y la interaccién con el mismo.
© Capitulo 2, El Shell del sistema. Toda interaccién con el sistema se
lleva a cabo a través de la linea de comandos. Este capitulo presenta una
visién mas detallada de este aspecto, profundizando ademxis en aspectos
estrechamente ligados a la misma, como son el tratamiento de la
entrada/salida de datos, incluyendo redirecciones y formateado de la
misma.
© Capitulo 3. Programacién basica. Una vez conocides los fundamentos
del sistema sobre el que se trabaja, se comienza a introducir el lenguaje
de programacién Bash, prestando especial atencién a las variables y
expresiones, las cuales son las bases del mismo.
« Capitulo 4. Programacién estructurada. E! control de ejecucién es
una de las cuestiones mAs importantes a la hora de construir un programa
en un lenguaje de alto nivel. Este capitulo presenta el uso de la
programacién estructurada en Bash, de cara a facilitar la programacién,
al tiempo que se dota de mayor potencialidad a los scripts (guiones 0
archivos de érdenes).
© Capitulo 5. Programacién de tareas. Este capitulo presenta los
fundamentos de la programacién de tareas en entornos GNU/Linux, asi
como la potencia que aportan los scripts a la hora de Ilevar a cabo tareas
programadas de vital importancia en un sistema informatico, como
pueden ser las copias de seguridad y la monitorizacién de sistemas.
«© Capitulo 6. Administracién del sistema. Una vez adquiridos los
suficientes conocimientos sobre el lenguaje de programacién, se
comienza a utilizar Bash de cara a gestionar todos los recursos del
sistema de un modo eficiente. Este capitulo se centra en cuatro aspectos
fundamentales a gestionar en todo sistema GNU/Linux: usuarios,
sistema de ficheros, permisos y comunicaciones.
© Capitulo 7. Depuracién de seripts. En ciertas ocasiones, cl
funcionamiento de un script no es el esperado, ante lo cual se debe© RAMA INTRODUCCION _15
determinar cual es la causa de ese funcionamiento incorrecto. El objetivo
de este capitulo es ensefiar técnicas para el depurado de scripts.
Durante la obra, se versin todos estos conceptos con ejemplos pricticos que
el lector podra aplicar en su sistema informético. Igualmente, se presentan
gjercicios por resolver, de cara a que el lector utilice los conocimientos adquiridos
a lo largo de los diferentes capitulos para solventar problemas reales.
Como recurso complementario al libro, el lector podra descargar, a través
del portal [Link], todos los ejercicios resueltos, herramientas de
autoevaluacién, ete.
Administracion de Sistemas Operatives
Wed [Link]Capitulo 1
INTRODUCCION
ALA PROGRAMACION SHELL
1.1 INTRODUCCION A LA PROGRAMACION SHELL
El intérprete de comandos o Shell es la interfaz. que permite al usuario
interactuar con el sistema. El usuario introduce sus ordenes, el intérprete las
procesa y genera la salida correspondiente, El hecho de que el Shell sea el
intérprete entre el usuario y el sistema le dota de este nombre, que se podria
traducir como “caparazén”
Nucleo (kernel)
Shell
i Usuario
Figura 1.1. Capas del entorno
El intérprete de comandos es tanto una interfaz de ejecucién de érdenes y
utilidades como un lenguaje de programacién que admite crear nuevas érdenes
(denominadas “guiones” o shellscripts), wilizando combinaciones de comandos y
estructuras légicas de control, que cuentan con caracteristicas similares a las del18 PROGRAMACION SHELL, APRENDE A PROGRAMAR CON MAS DE 200... © RAMA
sistema y que permiten que los usuarios y grupos de la maquina cuenten con un
entorno personalizado.
El modo de funcionamiento de Shell es sencillo: lee Ia linea de comando,
interpreta su significado, lleva a cabo el comando y arroja el resultado por medio
de las salidas.
El Shell de Unix permite ejecutar drdenes en la linea de comandos o ser
utilizado como un intérprete de un lenguaje de programacién para la
administracién del sistema.
Sin embargo, cuando las acciones que se quieren llevar a cabo aumentan en
complejidad, se deben utilizar lenguajes de mas alto nivel, cuya estructuracién
facilite la modularizacién y, con ello, el mantenimiento de la aplicacién. Valga de
ejemplo la siguiente casuistica:
‘* Procesos en tiempo real.
estructurada 0
© Aplicaciones complejas que necesiten programacii
multihebra.
© Uso de estructuras de datos (pilas, colas, listas....)
En el siguiente diagrama se muestra, de modo simplificado, cémo el
usuario interacciona con el sistema de acuerdo a esta estructuracién de capas:
Figura 1.2. Interaccién usuario-sistema© RAMA CAPITULO 1. INTRODUCCION A LA PROGRAMACION SHELL 19
EI kernel es el micleo del sistema operativo. Es el responsable de la
gjecucién de tareas y servicios criticos del sistema operative. Ademés, es el
programa principal que interacttia con todos los componentes del hardware
(aislando al usuario) y provee soporte para Ia ejecucién de aplicaciones.
Por encima del kernel, se encuentra el Shell, el cual interactita con el kernel
accediendo 2 los servicios provistos por el mismo, a través de “llamadas al
sistema” (system calls).
La capa formada por cl Shell permitira la ejecucién de aplicaciones,
controladas 0 no por un usuario, y adems permitiré a este una interaccién directa
con el keel en caso de necesidad.
1.1.1 Tipos de Shell
En Unix existen dos familias principales de intérpretes de comandos:
Los basados en el intérprete de Bourne: SH, KSH y BASH.
* Los basados en el intérprete C: CSH 0 TCSH.
A continuacién, se muestra una pequefia resefia de cada uno de ellos:
« Sh (Bourne Shell). Fue desarrollado por Steve Bourne para AT&T,
siendo durante muchos aos el “Shell patron” del sistema operative
UNIX. Es conocido también como Standard Shell, ya que todas las
distribuciones Linux disponen de él.
* Ksh (Kom Shell). Desarrollado por David Kor, es un superconjunto de
shy dispone, por tanto, de todas las facilidades de sh y otras muchas mas
agregadas. La compatibilidad con sh es total.
© Bash (Bourne Again Shell). Es el Shell mas moderno y probablemente
al mis utilizado, debido a que se trata del Shell Estindar de GNU/Linux,
ademas de ser muy intuitivo y flexible. Es adecuado para introducirse en
el mundo de la programacién Shell, pero es, al mismo tiempo, una
potente herramienta para usuarios avanzados. Se considera ademds un
superconjunto del Bash Shell (bash), por lo que los comandos que
funcionan en sh tambien lo hacen en bash, pero no al contrario,
« Csh (C Shell). Desarrollado por Bill Joy de la Berkeley University, es el
Shell mas utilizado en sistemas BSD (Berkeley Software Distribution).20_PROGRAMACION SHELL, APRENDE A PROGRAMAR CON MAS DE 200. © RAMA
La estructura de sus comandos es bastante similar a la del lenguaje C.
No es un Shell compatible sh.
© Tesh (TENEX C Shell). Se trata de un superconjunto de esh bastante
mis rapido. Esta caracteristiea hace que sea conocid como Turbo Shell
2g
Para conocer los Shell de los que se dispone en un entomo Linux, se debe
consultar el fichero /ete/shell
programacion@shell:-§ more /etc/shells
# /etc/shells: valid login shelis
/pin/esh
/bin/sh
/usr/bin/ksh
/bin/ksh
/usr/bin/tcsh
/bin/tesh
/bin/dash
/bin/bash
A cada usuario se le asigna un tinico Shell por defecto. Dicha asignacién se
encuentra en el fichero /ete/passwa
gonzalo:
#1000:1000%gonzalo,,,, ?/howe/gonzalo:/bin/bash
1.1.2 Shell del sistema
Tras la instalacién de un sistema UNIX, se establece un Shell por defecto.
Cuando se accede al sistema (modo texto), después de indicar el nombre de usuario
y contrasefia, UNIX inicia un Shell por defecto que es el encargado de mostrar el
indicador de érdenes de la sesién. Este Shell de entrada se denomina login Shell.
E] administrador del sistema es el encargado de establecer este Shell cuando se
crea un usuario.
Conocer el Shell asignado por defecto es sencillo, Cuando se inicia el
Shell, este asigna a una variable el valor del Shell actual (en el apartado 3.3.1 se
habla con mas detalle de las variables). Se puede conocer el valor de la variable
mediante el comando echo:
programacionashell:-$ echo $sHELE
(bin/bash© RAMA CAPITULO 1. INTRODUCCION A LA PROGRAMACION SHELL 21
1.1.3 Estableciendo el Shell por defecto
Se puede cambiar el Shell por defecto con la orden chsh (change Shell). Se
debe tener en consideracién que, para aplicar los efectos de esta orden, hay que
reiniciar la sesi6n de usuario. El cambio es permanente ya que modifica el fichero
de contraseiias (/ete/passwd).
Se puede obtener un cambio temporal invocando directamente al programa
Shell (por ejemplo, Bash) desde la linea de drdenes del Shell. Este cambio
permanecera activo mientras no se finalice el Shell con la orden exit.
La sintaxis del comando ehsh es la siguiente:
GSH” [=8)'path [gel Shell) tusuiariel
Por ejemplo, para establecer /bin/bash como shell por defecto, ejecute:
chsh =s /bin/bash
1.2 BASH
Este libro se va a enfocar a Bash, debido a que se trata del intérprete de
comandos més utilizado en los sistemas GNU/Linux e incluye un completo
lenguaje para programacién estructurada y gran variedad de funciones internas.
Las prineipales caracteristicas del intérprete BASH son las siguientes:
© Ejecucién sinerona (secuencial) de drdenes o asincrona (paralela).
* Disposicién de distintos tipos de redirecciones de entrada/salida para el
control y filtrado de la informacién.
Control del entorno de los procesos
* Ejecucién de comandos interactiva y desatendida, aceptando entradas
desde teclado, ficheros, etc
* Aportacién de una serie de érdenes internas para la manipulacién directa
del intérprete y del entomno de la operacién.22 PROGRAMACION SHELL, APRENDE A PROGRAMAR CON MAS DE 200. © RAMA
‘* Incorporacién, al tratarse de un lenguaje de programacién de alto nivel,
de distintos tipos de variables, operadores, matrices, estructuras de
control de flujo, entrecomillados, sustituciones de valores y funciones.
© Control de trabajos en primer plano (foreground) y en segundo plano
(background).
* Posibilidad de utilizacién de un Shell para disponer de un entorno
controlado.
« Disposicién de un historial de 6rdenes utilizadas previamente.
‘© Creacién de alias, una palabra que agrupa uno 0 mas comandos
© Disposicién de una pila de directorios, que contiene una lista de los
directorios visitados recientemente. Se puede acceder a esta informacién
mediante comandos.
1.3 MODOS DE EJECUCION DE COMANDOS
Normalmente, los programas ejecutados por Bash son comandos del
sistema que existen de forma compilada en el mismo. Cuando dicho programa se
gjecuta, se crea un nuevo proceso donde Bash hace una copia exacta de si mismo.
Este proceso hijo trabaja en el mismo entorno que su padre, y solo el identificador
(ID) de proceso es distinto. Este modo de trabajo se conoce como forking
(bifurcacién).
Después de la bifurcacién, el espacio de direcciones del proceso hijo se
sobrescribe con los datos del nuevo proceso mediante una llamada a exec.
Este mecanismo fork-and-exee conmuta entre comandos, mientras que el
entorno en el que se ejecuta el nuevo programa permanece inmutable, incluyendo
la configuracién de los dispositives de entrada/salida, las variables de entorno y la
prioridad.
1.3.1 Comandos empotrados (built-in)
Bash busca los comandos a ejecutar en los directorios indicados en la
variable de entomo $PATH. Aparte de ellos, existe una serie de comandos internos,
a Bash que estan siempre cargados en memoria 0 empotrados (built-in). Cuando se© RAMA CAPITULO 1. INTRODUCCION ALA PROGRAMACION SHELL 23,
utiliza uno de estos comandos, el Shell lo ejecuta directamente sin crear un nuevo
proceso.
Estos comandos empotrados son necesarios para implementar
funcionalidades que resultan imposibles (0 muy complicadas) de obtener de otro
modo.
Bash soporta tres tipos de comandos empotrados:
* Comandos Bourne Shell: break, cd, continue, eval, exec, exit, export,
getopts, hash, pwd, readonly, return, set, shifi, test, times, trap, umask y
unset.
© Comandes Bash: alias, bind, builtin, command, declare, echo, enable,
help, let, local, logout, printf, read, shopt, type, typeset, ulimit y unalias.
© Ejecucién en modo POSIX: break, continue, eval, exec, exit, export,
readonly, return, set, shift, rap y unset.
1.3.2 Linea de comandos
La linea de comandos es Ia interfaz del usuario con el sistema. El formato
tipico de una linea de orden consta de una orden y unos modificadores y
parametros opcionales, aunque puede incluir algunos caracteres especiales que
modifiquen el comportamiento tipico.
Orden [Modificador .] [Parsmetro ..
Por ejemplo, para listar el contenido del directorio actual se debe utilizar:
$ ls
Mediante el caracter almohadilla (#), se indica que lo que le sigue es un
comentario y no se debe interpretar.
$ ls #Esto lista el directorio actual
1.3.3 Script
Un script Bash es un fichero de texto normal que consta de una serie de
bloques de cédigo formados por lineas de comandos que se ejecutan
secuencialmente (son interpretadas y ejecutadas como si se_introdujeran24 PROGRAMACION SHELL, APRENDE A PROGRAMAR CON MAS DE 200. © RAMA
directamente desde teclado). Para ello, el usuario debe tener los permisos de
modificacisn (escritura) en el directorio (para crear un nuevo programa) o sobre el
propio fichero (para modificar uno existente).
Como cualquier otro programa binario, el usuario debe tener permiso de
gjecucién en el fichero del script, el cual se ejecuta indicando la ruta completa al
mismo, asi como sus opciones y parémetros. Si el scripf se encuentra en un
directorio indicado en la variable de entorno SPATH, no necesita indicar la ruta.
Un script debe comenzar con la marea #! para especificar el camino
completo y los parimetros del intérprete de drdenes que ejecutard el script.
Mediante ella, se puede indicar cualquier intérprete instalado en la maquina.
Para realizar el primer script, cree el fichero [Link], mediante un editor
de textos y escriba el contenido del Ejemplo 1.1
$ fiano priebalsh
#1 /bin/bash
HBjemplo: Muestra la frase hola a todo el mundo
echo "Hola a todo el mundo"
Establezea los permisos de ejecucién del script:
$ chmod 42 [Link]
Y, finalmente, ejecute el script:
§ ./pruebash’
1.3.4 Metacaracteres
Todos los Shells poseen un grupo de caracteres que, en diferentes
contextos, tienen diferentes significados: los metacaraeteres. Estos juegan un
papel importante cuando el Shell esté analizando la linea de érdenes, antes de
gjecutarla. Los diferentes grupos afectan a aspectos separados del procesamiento de
la linea de drdenes.
Metacaracteres sintacticos
Se utilizan como caracteres especiales de puntuacién entre 6rdenes. Sirven
para combinar varias érdenes con el objeto de construir una Unica orden légica.© RAMA CAPITULO 1. INTRODUCCION ALA PROGRAMACION SHELL 25,
Suministran una forma de ejecucién condicional basada en el resultado de la orden
anterior, La Tabla 1.1 muestra los caracteres sintacticos y da una deseripcién de su
funcién.
Los metacaracteres sintdcticos permiten materializar la filosofia de trabajo
de UNIX de “caja de herramientas”: dadas las érdenes que necesitan para realizar
un trabajo, los metacaracteres sintécticos permiten componerlas (pegarlas) para
resolverlo. Esto, en gran medida, hace que los comandos realicen funciones muy
concretas y sean parcos al dar informacién al usuario.
Metacardeter Descripcién de la funeion
2 Separador entre ordenes que se ejecutan secuencialmente.
Separacién entre drdenes que forman parte de un cauce
(pipeline). La salida de la orden a la izquierda del separador es
Ja entrada de la orden a la derecha del separador.
\ Posibilita escribir lineas de ordenes en varias lineas. Se suele
ilizar para ejecutar comandos largos.
Oo Se utilizan para aislar érdenes separadas por ; o |. Las érdenes
dentro de los paréntesis, ejecutadas en su propio Shell, son
tratadas como una tinica orden. Incluir un cauce dentro del
paréntesis permite, a su vez, incluirlo en otros cauces..
O Se utilizan para crear un bloque de cédigo ejecutado en el
propio intérprete.
& Indicador de trabajo en segundo plano (background). Indica al
Shell que debe ejecutar el trabajo en segundo plano.
ll Separador entre drdenes, en el que la orden que sigue al || solo
se gjecuta si la orden precedente falla (operador Idgico OR).
&&e Separador entre drdenes, en el que la orden que sigue al &&
solo se ejecuta si la orden precedente tiene éxito (operador
légico AND),26_PROGRAMACION SHELL, APRENDE A PROGRAMAR CON MAS DE 200. © RAMA
Uniendo é6rdenes con ;
El uso del punto y coma (;) como separador permite escribir dos 0 mas
Grdenes en la misma linea, Las érdenes se ejecutan secuencialmente, como si se
hubiesen dado en lineas sucesivas. En programas Shell se utiliza por razones
estéticas (permite una asociacién visual entre érdenes relacionadas). En la linea de
Grdenes, permite ejecutar varias de ellas sin tener que esperar a que se complete
una orden antes de introducir la siguiente.
Por ejemplo, con la siguiente orden se accede al directorio /varlog y,
posteriormente, se hace una biisqueda de ficheros que contengan la palabra “error”
§ ed /var/log; 1s error-*
Creando cauces con |
El entomo de ejecucién de un programa utiliza varios archivos en el
proceso, El sistema operativo, al crear un proceso, abre tres archivos: la entrada
estindar (stdin), la salida estandar (stdout) y el error estandar (stderr), que se
corresponden con los descriptores de archivo (andless) 0, 1, y 2 respectivamente
ura 1.3). Por defecto, estos archivos se corresponden con cl teclado para la
entrada estindar, y la pantalla para la salida y error estindares, pero este
comportamiento se puede cambiar.
Salida
Entade eorander
cotiniar seen,
[Teclado] ———> | Programa [Pantalla]
ol
somes
Figura 1.3. Entrada, salida y error esténdares
Los cauces (pipes) son una caracteristica distintiva de los. sistemas
GNU/Linux. Un cauce conecta la salida esténdar de la orden que aparece a la
izquierda del simbolo | con la entrada estindar de la orden que aparece a la
derecha, El flujo de informacién entre ambas érdenes se realiza a través del kernel
del sistema operativo.
Para ver un ejemplo, se utilizar la orden who, que produce un informe de
los usuarios que estén conectados actualmente en el sistema.
programacion@shell:=$ who
gonzalo tty1 2011-07-08 16:54
gonzalo pts/0 2011-07-08 16:54 (© RAMA CAPITULO 1. INTRODUCCION A LA PROGRAMACION SHELL 27
Si se quisiera este listado ordenado alfabéticamente, se puede redirigir la
salida anterior como entrada de la orden sort, encargada de ordenar.
programacion@shell:-$ who | sort
gonzalo pts/0 2011-07-08 16:54
gonzalo tty1 2011-07-08 16:54
-0)
Combinando 6rdenes con ()
En ocasiones, se necesita aislar un cauce o una secuencia de punto y coma
del resto de una linea de érdenes, Para ilustrarlo, se utiliza la orden date, que
informa de la fecha y hora del sistema, y la orden we, que muestra e] mimero de
lineas, palabras y caracteres de un archivo que se pasa como argumento, junto con
la orden who usada en el ejemplo anterior.
programacion@shell:=$ date 7 who
vie jul 6 [Link] CEST 2011
gonzalo tty1 2011-07-08 16:54
gonzalo pts/0 2011-07-08 16:54 (
programaciongshell:~$ (date ; who)
3015 5
Hay que seftalar que lo que realmente hacen los paréntesis es indicar al
Shell que cree otro Shell, denominado subshell, para ejecutar las érdenes que
aparecen encerradas entre ellos.
Ejecutando 6rdenes en segundo plano con &
GNU/Linux permite la ejecucién de érdenes desde el indicador de érdenes,
denominada ejecucién en primer plano (foreground), 0 desligadas del indicador,
llamada ejecucin en segundo plano (background). En el primer caso, el indicador
no aparece hasta que ha finalizado la orden actual. En el segundo, el indicador
aparece inmediatamente, lo que permite ejecutar otras érdenes aunque la que se
lanz6 en segundo plano no haya acabado,
Para ejecutar una orden en segundo plano, basta con finalizar la linea de
6rdenes con &. El Shell responde a este cardeter indicando el nimero de trabajo
que se ha lanzado (aparece entre corchetes), seguido del identificador del proceso
que ejecuta la orden. El niimero de trabajo se utiliza para controlar los procesos en
segundo plano.
En cl siguiente ejemplo, se lanza en segundo plano el editor gedit.
programacion@shell?=$ gedit «
Ta] 5650
También podría gustarte
Ec2 Ug PDF
Aún no hay calificaciones
Ec2 Ug PDF
1108 páginas
Linux
Aún no hay calificaciones
Linux
243 páginas
Amazon EBS
Aún no hay calificaciones
Amazon EBS
1395 páginas
Unix 1 10
Aún no hay calificaciones
Unix 1 10
10 páginas
Manual Rev
Aún no hay calificaciones
Manual Rev
56 páginas
Base S3
Aún no hay calificaciones
Base S3
64 páginas
Lab 15
Aún no hay calificaciones
Lab 15
13 páginas
Manual Programación (Bash, Python, C++, Latex, Octave, HTML... )
Manual Programación (Bash, Python, C++, Latex, Octave, HTML... )
444 páginas