0% encontró este documento útil (0 votos)
122 vistas25 páginas

Ilovepdf 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
0% encontró este documento útil (0 votos)
122 vistas25 páginas

Ilovepdf 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 resueltos Descarga 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.. 289 INTRODUCCION 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 del 18 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_introdujeran 24 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