Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Manual de Referencia para Bash - Version 4.1 - Informatica, Apuntes de Informática

Manual de Referencia Bash

Tipo: Apuntes

2012/2013

Subido el 23/01/2013

javi2oo1
javi2oo1 🇪🇸

4.3

(4)

2 documentos

1 / 178

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Traducción del
Manual de Referencia para Bash (version 4.1)
Edicion 0.9.1
Diciembre de 2010
Chet Ramey, Case Western Reserve University
Brian Fox, Free Software Foundation
Mario Piñar Ramírez (Traducción)
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Vista previa parcial del texto

¡Descarga Manual de Referencia para Bash - Version 4.1 - Informatica y más Apuntes en PDF de Informática solo en Docsity!

Traducción del

Manual de Referencia para Bash (version 4.1)

Edicion 0.9. 1

Diciembre de 2010

Chet Ramey, Case Western Reserve University Brian Fox, Free Software Foundation Mario Piñar Ramírez (Traducción)

Esta es una traducción no autorizada de la Documentación de Referencia de Bash. Está basada en la Edición 4.1, para Bash versión 4.1, de Diciembre de 2009. La última versión original (en inglés) del Manual de Referencia de Bash se puede encontrar en el sitio oficial del programa GNU Bash: http://www.gnu.org/software/bash/bash.html Copyright © 1988–2009 Free Software Foundation, Inc. Se autoriza a copiar, distribuir y/o modificar este documento bajo los términos de la GNU Free Documentation License, Versión 1.3 o cualquier versión posterior publicada por la Free Software Foundation; sin Secciones Invariantes, sin los textos de Portada y sin los textos de Contraportada. Se incluye una copia de la licencia en la sección titulada “GNU Free Documentation License” en el Apéndice C, seguida por una traducción de la misma (Apéndice D) obtenida de: http://docs.danexlandia.com.mx/gfdl/gfdl_es.f.html Puede comunicar sugerencias o errores en la dirección [email protected] Página ii

Presentacion de la version original

This text is a brief description of the features that are present in the Bash shell (version 4.1, 23 December 2009). This is Edition 4.1, last updated 23 December 2009, of The GNU Bash Reference Manual, for Bash, Version 4.1. Copyright © 1988–2009 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with the Front-Cover texts being “A GNU Manual”, and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled “GNU Free Documentation License”. (a) The FSF’s Back-Cover Text is: You are free to copy and modify this GNU manual. Buying copies from GNU Press supports the FSF in developing GNU and promoting software freedom.” Published by the Free Software Foundation 59 Temple Place, Suite 330, Boston, MA 02111- USA

Presentacion de la version original (traducida)

Este texto es una breve descripción de las características que están presentes en la shell Bash (versión 4.1 de 23 de diciembre de 2009) Esta es la edición 4.1, actualizada por última vez el 23 de diciembre de 2009, del Manual de Referencia de GNU Bash para Bash Versión 4. Copyright © 1988-2009 Free Software Foundation, Inc. Se concede permiso para hacer y distribuir copias literales de este manual manteniendo el aviso de copyright y este aviso de autorización en todas las copias. Se autoriza a copiar, distribuir y/o modificar este documento bajo los términos de la GNU Free Documentation License, Versión 1.3 o cualquier versión posterior publicada por la Free Software Foundation; sin Secciones Invariantes, con la portada “A GNU Manual”, y con los textos de contra- portada como en el apartado (a) mostrado más abajo. Se incluye una copia de la licencia en la sección titulada “GNU Free Documentation License”. (a) El texto de contraportada de la FSF es: Eres libre de copiar y modificar este manual GNU. Comprar copias en la GNU Press da soporte a la FSF para continuar desarrollando GNU y promoviendo la libertad de software. Publicado por la Free Software Foundation 59 Temple Place, Suite 330 Boston, MA 02111- USA Página iv

Índice de Contenido

  • 1.-Introducción..................................................................................................................................... Índice de contenido
    • 1.1.-¿Qué es Bash?...........................................................................................................................
    • 1.2.-¿Qué es una shell?....................................................................................................................
  • 2.-Definiciones...................................................................................................................................
  • 3.-Características Básicas de la Shell.................................................................................................
    • 3.1.-Sintaxis de la shell..................................................................................................................
      • 3.1.1.-Modo de operación de la shell........................................................................................
      • 3.1.2.-Entrecomillado................................................................................................................
        • 3.1.2.1.-Carácter de Escape..................................................................................................
        • 3.1.2.2.-Comillas simples.....................................................................................................
        • 3.1.2.3.-Comillas Dobles......................................................................................................
        • 3.1.2.4.-Entrecomillado ANSI-C..........................................................................................
        • 3.1.2.5.-Traducciones Específicas de la Localización..........................................................
      • 3.1.3.-Comentarios....................................................................................................................
    • 3.2.-Comandos de Shell.................................................................................................................
      • 3.2.1.-Comandos simples..........................................................................................................
      • 3.2.2.-Tuberías..........................................................................................................................
      • 3.2.3.-Listas de Comandos........................................................................................................
      • 3.2.4.-Comandos Compuestos..................................................................................................
        • 3.2.4.1.-Construcciones Cíclicas..........................................................................................
        • 3.2.4.2.-Construcciones Condicionales................................................................................
        • 3.2.4.3.-Agrupando Comandos.............................................................................................
      • 3.2.5.-Coprocesos......................................................................................................................
    • 3.3.-Funciones de Shell..................................................................................................................
    • 3.4.-Parámetros de Shell................................................................................................................
      • 3.4.1.-Parámetros posicionales..................................................................................................
      • 3.4.2.-Parámetros Especiales.....................................................................................................
    • 3.5.-Expansiones de la shell...........................................................................................................
      • 3.5.1.-Expansión de Llaves.......................................................................................................
      • 3.5.2.-Expansión de Tildes........................................................................................................
      • 3.5.3.-Expansión de Parámetros de Shell..................................................................................
      • 3.5.4.-Sustitución de Comandos...............................................................................................
      • 3.5.5.-Expansión Aritmética.....................................................................................................
      • 3.5.6.-Sustitución de Procesos..................................................................................................
      • 3.5.7.-Separación de palabras....................................................................................................
      • 3.5.8.-Expansión de Nombres de Fichero.................................................................................
        • 3.5.8.1.-Concordancia de Patrones.......................................................................................
      • 3.5.9.-Eliminación del entrecomillado......................................................................................
    • 3.6.-Redirecciones.........................................................................................................................
      • 3.6.1.-Redireccionando la entrada.............................................................................................
      • 3.6.2.-Redireccionando la salida...............................................................................................
      • 3.6.3.-Anexando la salida redirigida......................................................................................... Índice de Contenido
      • 3.6.4.-Redirigiendo la Salida Estándar y la Salida de Error Estándar.......................................
      • 3.6.5.-Anexando la Salida Estándar y la Salida de Error Estándar...........................................
      • 3.6.6.-Documentos Internos (Here Documents).......................................................................
      • 3.6.7.-Cadenas Internas (Here strings)......................................................................................
      • 3.6.8.-Duplicando Descriptores de Fichero...............................................................................
      • 3.6.9.-Moviendo Descriptores de Fichero.................................................................................
      • 3.6.10.-Abriendo descriptores de fichero para lectura y escritura............................................
    • 3.7.-Ejecutando comandos.............................................................................................................
      • 3.7.1.-Expansión de un comando simple..................................................................................
      • 3.7.2.-Búsqueda y Ejecución de Comandos..............................................................................
      • 3.7.3.-Entorno de Ejecución de Comandos...............................................................................
      • 3.7.4.-Entorno...........................................................................................................................
      • 3.7.5.-Estados de Salida............................................................................................................
      • 3.7.6.-Señales............................................................................................................................
    • 3.8.-Guiones de Shell.....................................................................................................................
  • 4.-Comandos Internos de la Shell.......................................................................................................
    • 4.1.-Comandos Internos de la Shell Bourne..................................................................................
    • 4.2.-Comandos Internos de Bash...................................................................................................
    • 4.3.-Modificando el Comportamiento de la Shell..........................................................................
      • 4.3.1.-El comando Interno Set..................................................................................................
      • 4.3.2.-El Comando Interno Shopt.............................................................................................
    • 4.4.-Comandos Internos Especiales...............................................................................................
  • 5.-Variables de Shell..........................................................................................................................
    • 5.1.-Variables de la Shell Bourne..................................................................................................
    • 5.2.-Variables de Bash...................................................................................................................
  • 6.-Características de Bash..................................................................................................................
    • 6.1.-Invocando a Bash...................................................................................................................
    • 6.2.-Ficheros de Inicio de Bash.....................................................................................................
    • 6.3.-Shells Interactivas...................................................................................................................
      • 6.3.1.-¿Qué es una Shell Interactiva?........................................................................................
      • 6.3.2.-¿Es esta una shell Interactiva?........................................................................................
      • 6.3.3.-Comportamiento de la Shell Interactiva.........................................................................
    • 6.4.-Expresiones Condicionales de Bash.......................................................................................
    • 6.5.-Aritmética de la Shell.............................................................................................................
    • 6.6.-Alias........................................................................................................................................
    • 6.7.-Arrays.....................................................................................................................................
    • 6.8.-La Pila de Directorios.............................................................................................................
      • 6.8.1.-Comandos Internos de la Pila de Directorios..................................................................
    • 6.9.-Controlando el Prompt...........................................................................................................
    • 6.10.-La Shell Restringida.............................................................................................................
    • 6.11.-El Modo POSIX de Bash......................................................................................................
  • 7.-Control de Tareas.........................................................................................................................
    • 7.1.-Fundamentos del Control de Tareas..................................................................................... Índice de Contenido
    • 7.2.-Comandos Internos para el Control de Tareas.....................................................................
    • 7.3.-Variables para el Control de Tareas.....................................................................................
  • 8.-Edición de la Línea de Comandos................................................................................................
    • 8.1.-Introducción a la Edición de la Línea de Comandos............................................................
    • 8.2.-Interacción con Readline......................................................................................................
      • 8.2.1.-Los Fundamentos de Readline al Desnudo...................................................................
      • 8.2.2.-Comandos de Movimiento de Readline........................................................................
      • 8.2.3.-Comandos para cortar texto de Readline......................................................................
      • 8.2.4.-Argumentos de Readline...............................................................................................
      • 8.2.5.-Buscando Comandos en la Historia..............................................................................
    • 8.3.-El Fichero de Inicialización de Readline..............................................................................
      • 8.3.1.-La Sintaxis del Fichero de Inicialización de Readline..................................................
      • 8.3.2.-Construcciones de inicialización condicionales...........................................................
      • 8.3.3.-Ejemplo de Fichero de Inicialización...........................................................................
    • 8.4.-Comandos enlazables de Readline.......................................................................................
      • 8.4.1.-Comandos de Movimiento............................................................................................
      • 8.4.2.-Comandos para Manipular la Historia..........................................................................
      • 8.4.3.-Comandos para Modificar el Texto..............................................................................
      • 8.4.4.-Cortando y Pegando......................................................................................................
      • 8.4.5.-Especificando Argumentos Numéricos........................................................................
      • 8.4.6.-Permitiendo que Readline introduzca caracteres por tí................................................
      • 8.4.7.-Macros de Teclado........................................................................................................
      • 8.4.8.-Algunos comandos variados.........................................................................................
    • 8.5.-Modo vi de Readline............................................................................................................
    • 8.6.-Completado Programable.....................................................................................................
    • 8.7.-Comandos Internos para el Completado Programable.........................................................
  • 9.-Usando la Historia Interactivamente............................................................................................
    • 9.1.-Características de Historia de Bash......................................................................................
    • 9.2.-Comandos Internos para la Historia de Bash.......................................................................
    • 9.3.-Expansión de la Historia.......................................................................................................
      • 9.3.1.-Designadores de Evento...............................................................................................
      • 9.3.2.-Designadores de Palabra...............................................................................................
      • 9.3.3.-Modificadores...............................................................................................................
  • 10.-Instalando Bash..........................................................................................................................
    • 10.1.-Instalación Básica...............................................................................................................
    • 10.2.-Compiladores y Opciones...................................................................................................
    • 10.3.-Compilando para Múltiples Arquitecturas.........................................................................
    • 10.4.-Nombres de Instalación......................................................................................................
    • 10.5.-Especificando el Tipo de Sistema.......................................................................................
    • 10.6.-Compartiendo Valores por Defecto....................................................................................
    • 10.7.-Controles de Operación......................................................................................................
    • 10.8.-Características Opcionales..................................................................................................
    • Apéndice A: Informando de errores................................................................................................ Índice de Contenido
  • C.2.-Diferencias Principales con la Shell de Bourne........................................................................ - B.1.-Diferencias de Implementación con la Shell SVR4.2.........................................................
    • Apéndice C: GNU Free Documentation License............................................................................
      • C.0.-PREAMBLE........................................................................................................................
      • C.1.-APPLICABILITY AND DEFINITIONS............................................................................
      • C.2.-VERBATIM COPYING......................................................................................................
      • C.3.-COPYING IN QUANTITY.................................................................................................
      • C.4.-MODIFICATIONS..............................................................................................................
      • C.5.-COMBINING DOCUMENTS............................................................................................
      • C.6.-COLLECTIONS OF DOCUMENTS..................................................................................
      • C.7.-AGGREGATION WITH INDEPENDENT WORKS.........................................................
      • C.8.-TRANSLATION.................................................................................................................
      • D.0.1.-TERMINATION..............................................................................................................
      • C.9.-FUTURE REVISIONS OF THIS LICENSE.......................................................................
      • C.10.-RELICENSING.................................................................................................................
      • C.11.-ADDENDUM: How to use this License for your documents...........................................
    • Apéndice D: Licencia de Documentación Libre de GNU (Traducción).........................................
      • D.0.-PREÁMBULO.....................................................................................................................
      • D.1.-APLICABILIDAD Y DEFINICIONES..............................................................................
      • D.2.-COPIA LITERAL................................................................................................................
      • D.3.-COPIADO EN CANTIDAD...............................................................................................
      • D.4.-MODIFICACIONES...........................................................................................................
      • D.5.-COMBINACIÓN DE DOCUMENTOS.............................................................................
      • D.6.-COLECCIONES DE DOCUMENTOS...............................................................................
      • D.7.-AGREGACIÓN CON TRABAJOS INDEPENDIENTES.................................................
      • D.8.-TRADUCCIÓN...................................................................................................................
      • D.9.-TERMINACIÓN.................................................................................................................
      • D.9.1.-REVISIONES FUTURAS DE ESTA LICENCIA...........................................................
      • D.10.-RE-LICENCIAMIENTO...................................................................................................
      • D.11.-ADDENDUM: Cómo usar esta Licencia en sus documentos...........................................
      • D.12.-Notas:.................................................................................................................................
      • D.13.-Referencias:.......................................................................................................................
    • Apéndice E: Índices......................................................................................................................... - E.1.-Índice de Comandos Internos de la Shell............................................................................ - E.2.-Índice de Palabras Reservadas de la Shell.......................................................................... - E.3.-Índice de Parámetros y Variables........................................................................................ - E.4.-Índice de Funciones............................................................................................................

Capítulo 1: Introducción shell se debe a los lenguajes de programación embebidos en ella. Como cualquier lenguaje de alto nivel, la shell proporciona variables, construcciones de control del flujo, entrecomillado y funciones. Las shells ofrecen características orientadas específicamente para el uso interactivo más que para aumentar el lenguaje de programación. Estas características interactivas incluyen control de tareas, edición de la linea de comandos, historia de comandos y alias. Cada una de estas caracterís- ticas son descritas en este manual. Página 10

Capítulo 2: Definiciones 2.- Definiciones Estas definiciones son usadas a lo largo de este manual POSIX Una familia de estándares libres basados en Unix. Bash se ve afectado principalmente por la parte Shell y Utilidades del estándar POSIX 1003.1. blanco (blank) Un carácter espacio o tabulador comando interno o builtin Un comando que es implementado internamente por la shell, en vez de por un programa ejecutable en algún lugar del sistema de ficheros. operadores de control Un token que realiza una función de control. Es una nueva linea o alguno de los siguientes: ‘||’, ‘&&’, ‘&’, ‘;’, ‘;;’, ‘|’, ‘|&’, ‘(’, o ‘)’. estado de salida El valor retornado por un comando a su llamador. Este valor está restringido a ocho bits, así que el valor máximo es 255. campo Una unidad de texto que es el resultado de una de las expansiones de la shell. Tras la expansión, cuando se ejecuta un comando, los campos resultantes se utilizan como nombre de comando y argumentos nombre de archivo Una cadena de caracteres usada para identificar un archivo. tarea Un juego de procesos que componen una tubería, y los procesos que descienden de estos, que están todos en el mismo grupo de procesos. control de tareas Un mecanismo por el cual los usuarios pueden parar (suspender) y reiniciar (reanudar) selectivamente la ejecución de procesos. metacaracter Un carácter que, cuando se encuentra sin entrecomillar, separa palabras. Un metaca- racter es un blanco o uno de los siguientes caracteres: ‘|’, ‘&’, ‘;’, ‘(’, ‘)’, ‘<’, o ‘>’. nombre Una palabra consistente únicamente en letras, números y caracteres de subrayado, y que comienza con una letra o un carácter de subrayado. Los nombres se usan como nombres de variables de shell y de funciones. También se le llama identificador. operador Un operador de control o un operador de redirección. Vea en la sección 3.6 [Redirec- ciones], una lista de operadores de redirección. Los operadores contienen al menos un Página 11

Capitulo 3: Características Básicas del Shell 3.- Características Básicas de la Shell Bash es un acrónimo para 'Bourne-Again Shell'. La shell Bourne es la shell Unix tradicional escrita originalmente por Stephen Bourne. Todos los comandos internos de la shell Bourne están disponibles en Bash. Las reglas para evaluación y entrecomillado están tomadas de la especificación POSIX para la shell Unix 'estándar'. Este capítulo resume brevemente los 'bloques de construcción' de la shell: comandos, estructuras de control, funciones de shell, parámetros de shell, expansiones de shell, redirecciones, que son un modo de dirigir la entrada y la salida desde y hacia un nombre de archivo, y la forma en la que la shell ejecuta comandos. 3.1.- Sintaxis de la shell Cuando la shell lee una entrada, procede a realizar una secuencia de operaciones. Si la entrada indica el principio de un comentario, la shell ignora el signo de comentario ('#') y el resto de esa línea. En caso contrario, hablando de forma aproximada, la shell lee su entrada y divide esta en palabras y operadores, empleando las reglas de entrecomillado para seleccionar qué significado debe asignar a las palabras y caracteres. La shell luego analiza esos tokens en comandos y otras construcciones, elimina el significado especial de ciertas palabras o caracteres, expande otras, redirecciona la entrada y la salida según sea necesario, ejecuta los comandos especificados, espera por el estado de salida de los comandos, y pone disponible ese estado de salida para favorecer su inspección o procesamiento.

3.1.1.- Modo de operación de la shell

Lo que sigue es una breve descripción del modo en que trabaja la shell cuando esta lee y ejecuta un comando. Básicamente, la shell hace lo siguiente:

  1. Lee su entrada desde un archivo (vea la Sección 3.8 [Guiones de shell]), desde una cadena suministrada como un argumento a la opción de invocación '-c' (vea la Sección 6. [Invocando a Bash], o desde la terminal del usuario.
  2. Rompe la entrada en palabras y operadores, obedeciendo las reglas de entrecomillado des- critas en la Sección 3.1.2 [Entrecomillado]. Estos tokens están separados por metacaracteres. La expansión de Alias se realiza en este paso (vea Sección 6.6 [Alias]
  3. Analiza sintácticamente los tokens en comandos simples y compuestos (vea Sección 3. [Comandos de Shell])
  4. Realiza varias expansiones de shell (vea la Sección 3.5 [Expansiones de la Shell], rompe los tokens expandidos en listas de nombres de ficheros (vea Sección 3.5.8 [Expansión de Nombres de Fichero]) y comandos y argumentos.
  5. Realiza cualquier redirección que sea necesaria (vea la Sección 3.6 [Redirecciones]) y elimina los operadores de redirección y sus operandos de la lista de argumentos.
  6. Ejecuta el comando (vea la Sección 3.7 [Ejecutando Comandos]).
  7. Opcionalmente espera hasta que se complete la ejecución del comando y recolecta su estado de salida (vea la Sección 3.7.5 [Estados de salida]). Página 13

Capitulo 3: Características Básicas del Shell

3.1.2.- Entrecomillado

El entrecomillado se utiliza para eliminar el significado especial a ciertos caracteres o palabras para la shell. El entrecomillado se puede utilizar para eliminar el tratamiento especial para los caracteres especiales, o para prevenir a las palabras reservadas de ser reconocidas como tales, y para prevenir la expansión de parámetros. Cada uno de los metacaracteres de shell (vea el Capítulo 2 [Definiciones]) tiene un significado especial para el shell y debe ser entrecomillado si se representa a sí mismo. Cuando se está usando las habilidades de expansión de la historia de comandos (vea la Sección 9.3 [Interacciones con la Historia]), el carácter de expansión de la historia, normalmente '!', debe ser entrecomillado para prevenir la expansión de la historia. Vea la Sección 9.1 [Características de Historial de Bash], para más detalles concernientes a la expansión de la historia. Hay tres mecanismos de entrecomillado : El carácter de escape, las comillas simples y las comillas dobles. 3.1.2.1.- Carácter de Escape El carácter de escape consiste en una barra invertida sin entrecomillar ''. Esta mantiene el valor literal del carácter que le sigue, con la excepción de la nueva línea. Si aparece una pareja \nueva_linea esta es tratada como una continuación de línea (esto es, esta es eliminada del flujo de entrada e ignorada completamente). 3.1.2.2.- Comillas simples Encerrar caracteres en comillas simples (''') mantiene el valor literal de cualquier carácter situado entre las comillas. Una comilla simple no puede aparecer encerrada entre comillas simples, incluso cuando es precedida por una barra invertida. 3.1.2.3.- Comillas Dobles Encerrar caracteres entre comillas dobles ('”') mantiene el valor literal de todos los caracteres dentro de las comillas, con la excepción de '$', ''', '' y, cuando la expansión de la historia está habilitada, '!'. Los caracteres '$' y ''' mantienen su significado especial dentro de comillas dobles (Vea la Sección 3.5 [Expansiones de Shell]). La barra invertida mantiene su significado especial sólo cuando es seguida por uno de los siguientes caracteres: '$', ''', '', o nueva linea. Dentro de comillas dobles, las barras invertidas que son seguidas por uno de estos caracteres son eliminadas. Las barras invertidas que preceden caracteres sin un significado especial permanecen como tales. Una comilla doble puede ser entrecomillada dentro de dobles comillas precediéndola con una barra invertida. Si está habilitada la expansión de la historia de comandos esta se realizará a menos que el signo '!' que aparece entre las comillas dobles sea escapado usando una barra invertida. La barra invertida precediendo al '!' no es eliminada. Los parámetros especiales ' * ' y ' @ ' tienen un significado especial cuando aparecen encerrados entre comillas dobles (vea la sección 3.5.3 [Expansión de parámetros de la Shell]). 3.1.2.4.- Entrecomillado ANSI-C Las palabras de la forma $'cadena' son tratadas de forma especial. La palabra se expande a cadena, con los caracteres escapados por barras invertidas reemplazados como se especifica por el estándar ANSI C. Las secuencias de escape con barra invertida, si están presentes, son decodificadas como Página 14

Capitulo 3: Características Básicas del Shell interactive_comments activada no permite comentarios. La opción interactive_coments está establecida por defecto en las shells interactivas. Vea la sección 6.3 [Shells Interactiva], para una descripción de qué hace una shell interactiva. 3.2.- Comandos de Shell Un comando de shell simple como echo a b c consiste en el propio comando seguido por argu- mentos separados por espacios. Comandos de shell más complejos están compuestos de comandos simples situados juntos de varias formas; en una tubería en la cual la salida de un comando se convierte en la entrada del segundo, en una construcción tipo bucle o condicional, o en algunas otras agrupaciones.

3.2.1.- Comandos simples

Un comando simple es el tipo de comando que se encuentra con más frecuencia. Este es sólo una secuencia de palabras separadas por blancos, terminada por uno de los operadores de control de la shell (vea el Capítulo 2 [Definiciones]). La primera palabra generalmente especifica un comando para ser ejecutado, con el resto de las palabras como argumentos del comando. El estado de retorno (vea la Sección 3.7.5 [Estado de salida]) de un comando simple es su estado de salida como viene especificado por la función POSIX 1003.1 waitpid , o 128+n si el comando fue terminado por la señal n.

3.2.2.- Tuberías

Una tubería es una secuencia de comandos simples separados por uno de los operadores de control '|' o '|&'. El formato de uso de una tubería es: [time [-p]] [!] comando1 [ [| o |&] comando2 … ] La salida de cada comando en la tubería es conectado a través del cauce a la entrada del siguiente comando. Esto es, cada comando lee la salida del comando previo. Esta conexión se establece antes de realizar cualquier redirección especificada por el comando. Si se usa '|&' la salida de error estándar del comando1 es conectada a la entrada estándar del comando2 a través del cauce; es una forma corta para 2>&1. Esta redirección implícita de la salida de error estándar se realiza después de cualquier redirección especificada en el comando. La palabra reservada time produce que se impriman estadísticas de tiempo para la tubería una vez que esta finaliza. Las estadísticas actualmente consisten en el tiempo transcurrido y tiempo de usuario y de sistema consumidos por la ejecución del comando. La opción '-p' cambia el formato de salida por el especificado por POSIX. La variable TIMEFORMAT puede ser ajustada a una cadena de formato que especifique como se debe mostrar la información de los tiempos. Vea la Sección 5. [Variables de Bash] para obtener una descripción de los formatos disponibles. El uso de time como palabra reservada permite el cronometrado de los comandos internos de la shell, las funciones de shell y las tuberías. Un comando externo time no podría hacer esto fácilmente. Si la tubería no se ejecuta de forma asíncrona (vea la Sección 3.2.3 [Listas]) la shell espera hasta que se completen todos los comandos de la tubería. Cada comando en una tubería se ejecuta en su propia subshell (vea la Sección 3.7.3 [Entorno de Ejecución de Comandos]). El estado de salida de una tubería es el estado de salida de el último Página 16

Capitulo 3: Características Básicas del Shell comando en la tubería, a menos que la opción pipefail esté activada (vea la Sección 4.3.1 [El Comando Interno Set]) Si pipefail está activado, el estado de retorno de la tubería es el valor del último comando (el más a la derecha) en salir con un estado distinto de cero, o cero si todos los comandos salen satisfactoriamente. Si la palabra reservada '!' precede a la tubería, el estado de salida es la negación lógica del estado de salida como se describió más arriba. El shell espera hasta que todos los comandos en la tubería terminen antes de retornar un valor.

3.2.3.- Listas de Comandos

Una lista es una secuencia de una o más tuberías separadas por uno de los siguientes operadores: ';', '&', '&&', o '||', y opcionalmente terminada por uno de los siguientes: ';', '&', o una nueva línea. De estos operadores de lista '&&' y '||' tienen igual precedencia, seguidos por ';' y '&', que tienen igual precedencia. Una secuencia de una o más nuevas líneas pueden aparecer en una lista para delimitar comandos, esto equivale a un punto y coma. Si un comando termina con el operador de control '&' la shell ejecuta el comando de forma asíncrona en una subshell. Esto es conocido como ejecutar el comando en segundo plano. La shell no espera a que el comando finalice, y el estado de retorno es 0 (verdadero). Cuando el control de tareas no está activado (vea el Capítulo 7 [Control de Tareas]), la entrada estándar para los comandos asíncronos, en ausencia de alguna redirección explícita, es redirigida desde /dev/null. Los comandos separados por un ';' se ejecutan secuencialmente; la shell espera para que cada comando finalice turnándose con el siguiente. El estado de retorno es el estado de retorno del último comando ejecutado. Las listas Y (AND) y O (OR) son secuencias de una o más tuberías separadas por los opera- dores de control '&&' y '||' respectivamente. Las listas AND y OR son ejecutadas con asociatividad a la izquierda Una lista AND tiene la forma comando1 && comando comando2 se ejecuta sí y sólo sí el comando1 retorna un estado de salida de cero. Una lista OR tiene la forma comando1 || comando comando2 se ejecuta sí y sólo sí, el comando1 retorna un valor de salida distinto de cero. El estado de retorno de las listas AND y OR es el estado de salida del último comando ejecutado en la lista.

3.2.4.- Comandos Compuestos

Los comandos compuestos son las construcciones de programación de la shell. Cada construcción comienza con una palabra reservada o un operador de control y termina con otra correspondiente palabra reservada u operador. Cualquier redirección (vea la Sección 3.6 [Redirecciones]) asociada con un comando compuesto se aplica a todos los comandos dentro de ese comando compuesto, a menos que sea sobreescrito explícitamente. Bash proporciona construcciones cíclicas, comandos condicionales y mecanismos para agrupar comandos y ejecutarlos como una unidad. Página 17

Capitulo 3: Características Básicas del Shell if comandos-test; then comandos-consiguientes [elif mas-comandos-test; then más-siguientes;] [else alternativas-consiguientes; ] fi Se ejecuta la lista de comandos-test y si esta retorna un estado igual a cero se ejecuta la lista de comandos-consiguientes. Si los comandos-test retornan un estado distinto de cero, se ejecuta cada lista elif en turnos, y si su estado de salida es igual a cero, se ejecutan los correspondientes mas-consiguientes y el comando finaliza. Si la construcción ' else alternativas-consiguientes' está presente y el comando final en la última clausula if o elif tiene un estado de salida distinto de cero, entonces se ejecutan las alternativas-consiguientes. El estado de retorno es el estado de salida del último comando ejecutado o cero si ninguna condición fue evaluada como true. case La sintaxis del comando case es: case palabra in [ [(] patrón [| patrón] ….) lista- comandos ;;]... esac case ejecutará selectivamente la lista-comandos correspondiente al primer patrón que se ajusta con palabra. Si la opción de shell nocasematch (vea la descripción de shopt en la Sección 4.3.2 [El Comando Interno Shopt]) está activada, el ajuste se realiza sin diferenciar entre mayúsculas y minúsculas para los caracteres alfabéticos. El '|' se usa para separar patrones múltiples, y el operador ')' termina una lista de patrones. Una lista de patrones y su lista de comandos asociada se conoce como una clausula. Cada clausula debe terminar con ';;', ';&' o ';;&'. La palabra sufre expansión de tildes, expansión de parámetros, sustitución de comandos, expansión aritmética y eliminación de entrecomillado antes de intentar el ajuste. Cada patrón sufre expansión del tildes, expansión de parámetros, sustitución de comandos y expansión aritmética. Puede haber un número arbitrario de clausulas case , cada una terminada con un ';;', ';&' o ';;&'. El primer patrón que ajusta determina la lista-comandos que será ejecutada. Aquí hay un ejemplo usando case en un guión que se puede utilizar para describir una interesante característica de un animal: echo -n "Introduzca el nombre de un animal: " read ANIMAL echo -n "El $ANIMAL tiene " case $ANIMAL in caballo | perro | gato) echo -n "cuatro";; hombre | canguro ) echo -n "dos";; *) echo -n "un número desconocido de";; esac echo " patas." Si se utiliza el operador ';;' no se intenta ningún ajuste adicional tras el primer patrón encontrado. Usar ';&' en vez de ';;' produce que la ejecución continúe con la lista- comandos asociada con la siguiente clausula, si hay alguna. Usar ';;&' en vez de Página 19

Capitulo 3: Características Básicas del Shell ';;' produce que la shell pruebe a ajustar los patrones en la siguiente clausula, si hay alguna, y ejecuta cualquier lista-comandos asociada a los ajustes conseguidos. El estado de retorno es cero si no se ajusta a ningún patrón. De otro modo, el estado de retorno es la salida del estado de la lista-comandos ejecutada. select La construcción select permite generar menús fácilmente. Esta tiene casi la misma sintaxis que el comando for : select nombre [ in palabras …]; do comandos; done Se expande la lista de palabras que siguen a in , generando una lista de items. El juego de palabras expandidas se imprime en el flujo de la salida de error estándar, cada una precedida por un número. Si se omite la construcción 'in palabras' se imprimen los parámetros posicionales, como si se hubiese especificado 'in “$@”'. A continuación se muestra el prompt PS3 y se lee una línea desde la entrada estándar. Si la linea consiste en un número correspondiente a una de las palabras mostradas, entonces el valor de nombre es ajustado a esa palabra. Si la linea está vacía, las palabras y el prompt se muestran de nuevo. Si se lee EOF (fin de fichero), el comando select finaliza. Cualquier otro valor leído produce que nombre se establezca a null. La linea leída es salvada en la variable REPLY. Los comandos son ejecutados después de cada selección hasta que se ejecuta un comando break , punto en el que el comando select finaliza. A continuación tenemos un ejemplo que permite al usuario elegir un nombre de fichero del directorio actual y mostrar el nombre y el índice del archivo seleccionado: select fname in *; do echo usted seleccionó $fname ($REPLY) break; done (( … )) (( expresión )) La expresión aritmética se evalúa de acuerdo a las reglas descritas más abajo (vea la sección 6.5 [Aritmética del Shell]). Si el valor de la expresión es distinta de cero, el estado de retorno es 0; de otro modo el estado de retorno es 1. Esto es exactamente equivalente a let “expresión” Vea la Sección 4.2 [Comandos Internos de Bash] para una descripción completa del comando interno let. [[ … ]] [[ expresión ]] Devuelve un estado de 0 ó 1 dependiendo de la evaluación de la expresión condicional expresión. Las expresiones se componen de expresiones fundamentales descritas más abajo en la Sección 6.4 [Expresiones Condicionales de Bash]. La división de palabras y la expansión de nombres de archivo no se realiza en las palabras encerradas entre '[[' y Página 20