Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Bash
The GNU Bourne-Again SHell
(https://web.archive.org/web/20060813115916/http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html)
Su nombre es un acrónimo de Bourne-again shell ("shell Bourne otra vez") –haciendo un juego de
palabras (born-again significa "nacido de nuevo") sobre la Bourne shell ( sh), que fue uno de los primeros
intérpretes importantes de Unix.
Hacia 1978, Bourne era el intérprete distribuido con la versión del sistema operativo Unix Versión 7.
Stephen Bourne, por entonces investigador de los Laboratorios Bell, escribió la versión original. Brian Fox
escribió Bash para el proyecto GNU en 1987 como sustituto libre de Bourne.1 2 y en 1990, Chet Ramey se
convirtió en su principal desarrollador.
Índice
Sintaxis de Bash
Acceso a los argumentos
Operaciones matemáticas con enteros
Redirecciones de entrada/salida
Expresiones regulares
Escape con contrabarra
Guiones de inicio de Bash
Bashismo
Véase también
Referencias
Enlaces externos
Sintaxis de Bash
La sintaxis de órdenes de Bash es un superconjunto de instrucciones basadas en la sintaxis del intérprete
Bourne. La especificación definitiva de la sintaxis de órdenes de Bash, puede encontrarse en el Bash
Reference Manual (http://www.gnu.org/software/bash/manual/bashref.html) distribuido por el proyecto
GNU. Esta sección destaca algunas de sus únicas características.
La mayoría de los shell scripts (guiones de intérprete de órdenes) Bourne pueden ejecutarse por Bash sin
ningún cambio, con la excepción de aquellos scripts del intérprete de órdenes, o consola, Bourne que
hacen referencia a variables especiales de Bourne o que utilizan una orden interna de Bourne. La sintaxis
de órdenes de Bash incluye ideas tomadas desde los intérpretes Korn shell (ksh) y C shell (csh), como la
edición de la línea de órdenes, el historial de órdenes, la pila de directorios, las variables $RANDOM y $PPID,
y la sintaxis de substitución de órdenes POSIX: $(...). Cuando se utiliza como un intérprete de órdenes
interactivo, Bash proporciona autocompletado de nombres de programas, nombres de archivos, nombres
de variables, etc, cuando el usuario pulsa la tecla TAB.
La sintaxis de Bash tiene muchas extensiones que no proporciona el intérprete Bourne. Varias de las
mencionadas extensiones se enumeran a continuación.
Usando $# es posible comprobar el número de argumentos entregados al guion antes de realizar alguna
acción con ellos:
if [ $# -lt 2 ]; then
echo "Necesitas pasar dos argumentos."
exit 1
fi
Otra forma de acceder a los argumentos es a través del array $@, por medio del cual se puede iterar sobre
todos los argumentos dados:
La orden ((...)) también se puede utilizar en sentencias condicionales, ya que su código de retorno es 0
o 1 dependiendo de si la condición es cierta o falsa:
if ((VAR == Y * 3 + X * 2))
then
echo Si
fi
La orden ((...)) soporta los siguientes operadores relacionales: '==', '!=', '>', '<', '>=', y '<='.
Un proceso Bash no puede realizar cálculos en coma flotante. Las únicas shell Unix capaces de esto son
Korn Shell (versión de 1993) y zsh (a partir de la versión 4.0).
Redirecciones de entrada/salida
La sintaxis de Bash permite diferentes formas de redirección de entrada/salida de las que la shell Bourne
tradicional carece. Bash puede redirigir la salida estándar y los flujos de error estándar a la vez utilizando
la sintaxis:
que es más simple que teclear la orden Bourne equivalente, "orden > archivo 2>&1". Desde la versión
2.05b, Bash puede redirigir la entrada estándar desde una cadena utilizando la siguiente sintaxis
(denominada "here strings"):
Ejemplo: Redirige la salida estándar a un archivo, escribe datos, cierra el archivo y reinicia stdout
# hace que el descriptor de archivo 6 sea una copia de stdout (descriptor archivo 1)
exec 6>&1
# abre el archivo "test.data" para escritura
exec 1>test.data
# genera algún contenido
echo "data:data:data"
# recupera stdout original, al hacer que sea una copia del descriptor de archivo 6
exec 1>&6
# cierra el descriptor de archivo 6
exec 6>&-
Expresiones regulares
Los procesos Bash 3.0 soportan emparejamiento de expresiones regulares utilizando la siguiente sintaxis,
reminiscente de Perl:
[[ string =~ regex]]
La sintaxis de expresiones regulares es la misma que documenta la página de manual regex(3). El estado
de salida de la orden anterior es 0 si la cadena concuerda con la expresión regular, y 1 si no coinciden. En
las expresiones regulares puede accederse a las partes delimitadas por paréntesis, utilizando la variable
shell BASH_REMATCH, de la siguiente manera:
if [[ foobarbletch =~ 'foo(bar)bl(.*)']]
then
echo The regex matches!
echo $BASH_REMATCH -- outputs: foobarbletch
echo ${BASH_REMATCH[1]} -- outputs: bar
echo ${BASH_REMATCH[2]} -- outputs: etch
fi
Esta sintaxis proporciona un rendimiento superior a lanzar un proceso separado para ejecutar una orden
grep, porque el emparejamiento de las expresiones regulares tiene lugar en el propio proceso Bash. Si la
expresión regular o la cadena contiene un espacio en blanco o un metacarácter del shell (como '*' o '?'),
debe ser entrecomillada.
Backslash
Se expande a...
Escape
\b Un carácter de retroceso
\e Un carácter de escape
\t Un tabulador horizontal
\v Un tabulador vertical
\\ Un carácter contrabarra
\nnn El carácter de 8 bits cuyo valor es el número octal nnn (de uno a tres dígitos)
El resultado expandido se encuentra entrecomillado con comilla simple, como si el signo $ no estuviese
presente.
Una cadena entrecomillada con comillas dobles precedida por un signo $ ($"...") será traducida de
acuerdo a la localización actual. Si fuese C o POSIX, se ignora el símbolo $. Si la cadena es traducida y
reemplazada, el reemplazo estará entrecomillado por comilla doble.
Cuando se invoca a Bash como un shell interactivo para el inicio de una sesión (login shell), o como un
shell no interactivo con la opción --login, en primer lugar lee y ejecuta órdenes desde el archivo
/etc/profile, si existe. Después, busca ~/.bash_profile, ~/.bash_login, y ~/.profile, en este
orden, y lee y ejecuta las órdenes desde el primero que existe y es legible. La opción --noprofile puede
utilizarse al comenzar un nuevo shell para inhibir este comportamiento.
Cuando un login shell termina, Bash lee y ejecuta las órdenes de ~/.bash_logout, si existe.
Cuando un shell interactivo que no es un login shell arranca, Bash lee y ejecuta órdenes desde ~/.bashrc,
si existiese. Esto puede evitarse utilizando la opción --norc. La opción --rcfile archivo forzará a Bash
a leer y ejecutar órdenes desde archivo en lugar de ~/.bashrc.
Cuando Bash arranca de un modo no interactivo, por ejemplo para ejecutar un guion de consola diferente,
busca la variable de entorno BASH_ENV, si existe expande su valor, y lo utiliza como el nombre del archivo
para leer y ejecutar. Bash se comporta como si se ejecutase la siguiente orden:
Si se invoca a Bash con el nombre sh, intenta replicar el comportamiento de las versiones antiguas de sh, a
la vez que se mantiene la conformidad con el estándar POSIX. Cuando se invoca como un login shell
interactivo, o un shell no interactivo con la opción --login, primero intenta leer y ejecutar órdenes desde
/etc/profile y ~/.profile, en este orden. La opción --noprofile puede utilizarse para evitar este
comportamiento.
Cuando se invoca como un shell interactivo con el nombre sh, Bash busca la variable ENV, si está definida
expande su valor, y utiliza el valor expandido como el nombre de un archivo para leer y ejecutar. Como un
shell invocado como sh no intenta leer y ejecutar órdenes desde ningún otro archivo de arranque, y la
opción --rcfile no tiene efecto. Un shell no interactivo invocado con el nombre sh no intenta leer ningún
otro archivo de arranque. Cuando se invoca como sh, Bash entra en el modo posix después de leer los
archivos de inicio.
Cuando se inicia Bash en el modo POSIX, por ejemplo con la opción --posix, sigue el estándar POSIX
para los archivos de inicio. En este modo, los shells interactivos expanden la variable ENV y se leen, y
ejecutan, las órdenes desde el archivo cuyo nombre es el valor de la variable expandida. No se lee ningún
otro archivo de arranque.
Bash intenta determinar cuando está siendo ejecutado por un demonio de shell remoto, normalmente
rshd. Si Bash determina que está siendo ejecutado por rshd, lee y ejecuta órdenes desde ~/.bashrc, si
este archivo existe y es legible. No hará esto si se invoca como sh. La opción --norc puede utilizarse para
evitar este comportamiento, y la opción --rcfile puede utilizarse para forzar a leer otro archivo, pero
rshd normalmente no invoca al shell con estas opciones o permite que sean especificadas.
Bashismo
Se llama bashismo al uso de características de Bash que no están contempladas en las especificaciones
POSIX para los intérpretes de comandos. En general, se recomienda evitarlas, para permitir la portabilidad
de guiones a otros sistemas operativos.
Véase también
◾ Comandos Bash
Referencias
1. Richard Stallman (forwarded with comments by Chet Ramey) (10 de febrero de 1988). "GNU + BSD
= ?". (Google Groups) (https://groups.google.com/forum/#!
original/comp.unix.questions/iNjWwkyroR8/yedr9yDWSuQJ). URL accedida el 22 de marzo de 2011.
2. Hamilton, Naomi (30 de mayo de 2008), «The A-Z of Programming Languages: BASH/Bourne-Again
Shell» (http://www.computerworld.com.au/article/222764/a-z_programming_languages_bash_bourne-
again_shell/?pp=2&fp=16&fpid=1), Computerworld: 2, consultado el 21 de marzo de 2011, «When
Richard Stallman decided to create a full replacement for the then-encumbered Unix systems, he knew
that he would eventually have to have replacements for all of the common utilities, especially the
standard shell, and those replacements would have to have acceptable licensing.»
Enlaces externos
◾ Wikimedia Commons alberga una categoría multimedia sobre Bash.
◾ Wikilibros alberga un libro o manual sobre Bash.
◾ Lista de órdenes (http://www.ss64.com/bash/index.html)
◾ Bash home page (http://www.gnu.org/software/bash/bash.html)
◾ bash(1) (http://manpages.ubuntu.com/manpages/oneiric/es/man1/bash.1.html): GNU Bourne-Again
SHell – Comandos generales en el Manual de Ubuntu
◾ Bash FAQ (ftp://ftp.cwru.edu/pub/bash/FAQ)
◾ Bash 3.0 Announcement (http://groups.google.com/groups?
dq=&lr=&ie=UTF-8&group=gnu.announce&selm=mailman.1865.1091019304.1960.info-
gnu%40gnu.org)
◾ The GNU Bash Reference Manual (http://www.network-theory.co.uk/bash/manual/), (HTML versión
(http://www.network-theory.co.uk/docs/bashref/)) by Chet Ramey and Brian Fox, ISBN 0-9541617-7-7
Guías Bash de Linux Documentation Project:
Obtenido de «https://es.wikipedia.org/w/index.php?title=Bash&oldid=108638299»
Esta página se editó por última vez el 12 jun 2018 a las 11:05.
El texto está disponible bajo la Licencia Creative Commons Atribución Compartir Igual 3.0; pueden
aplicarse cláusulas adicionales. Al usar este sitio, usted acepta nuestros términos de uso y nuestra
política de privacidad.
Wikipedia® es una marca registrada de la Fundación Wikimedia, Inc., una organización sin ánimo de
lucro.