Diferencia entre revisiones de «Bash»

(Enlaces externos)
(Etiqueta: nuestro-nuestra)
m (Texto reemplazado: «<div align="justify">» por «»)
 
(No se muestran 9 ediciones intermedias de 5 usuarios)
Línea 1: Línea 1:
{{Aplicación|nombre=bash|logo=BashLogo.jpg|descripcion=Bash. Interprete de comandos para entornos Unix|creador=[[http://es.wikipedia.org/wiki/GNU Proyecto GNU]] [http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html The GNU Bourne-Again SHell]|fecha_de_creacion=Ultima versión estable 4.1.7. 14 de mayo, 2009|sitio_web=[http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html The GNU Bourne-Again SHell]}}'''bash''' es un programa informático cuya función consiste en interpretar órdenes. Está basado en la shell de Unix y es compatible con POSIX. Fue escrito para el proyecto GNU y es el intérprete de comandos por defecto en la mayoría de las distribuciones de Linux. Su nombre es un acrónimo de Bourne-Again Shell (otro shell bourne) — haciendo un juego de palabras (born-again significa renacimiento) sobre el Bourne shell (sh), que fue uno de los primeros intérpretes importantes de Unix.
 
  
==Historia==
+
{{Ficha Software
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 de Bourne. Brian Fox escribió bash en [[1987]]. En [[1990]], [[Chet Ramey]] se convirtió en su principal desarrollador. Bash es el intérprete predeterminado en la mayoría de sistemas [[GNU/Linux]], además de Mac OS X Tiger, y puede ejecutarse en la mayoría de los sistemas operativos tipo Unix. También se ha llevado a Microsoft Windows por el proyecto Cygwin.
+
|nombre= Bash
 +
|familia= [[UNIX]]
 +
|imagen= BashLogo.jpg
 +
|tamaño=260px
 +
|descripción= Bash. Intérprete de comandos para entornos Unix
 +
|imagen2=
 +
|tamaño2=
 +
|descripción2=
 +
|creador= [[Brian Fox]] y [[Chet Ramey]]
 +
|desarrollador=
 +
|diseñador=
 +
|modelo de desarrollo=
 +
|fecha de creación=
 +
|lanzamiento inicial= [[1987]]
 +
|versiones=
 +
|última versión estable=Ultima versión estable 4.1.7. 14 de mayo, 2009
 +
|núcleo=
 +
|tipo de núcleo=
 +
|plataformas soportadas=
 +
|género=
 +
|sistemas operativos=
 +
|idioma=
 +
|licencia=
 +
|premios=
 +
|web=[http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html The GNU Bourne-Again SHell]
 +
}}
 +
'''Bash'''. Es un programa informático cuya función consiste en interpretar órdenes. Está basado en la shell de Unix y es compatible con POSIX. Fue escrito para el proyecto [[GNU]] y es el intérprete de comandos por defecto en la mayoría de las distribuciones de [[Linux]]. Su nombre es un acrónimo de Bourne-Again Shell (otro shell bourne) — haciendo un juego de palabras (born-again significa renacimiento) sobre el Bourne shell (sh), que fue uno de los primeros intérpretes importantes de [[Unix]].  
  
== Sintaxis de bash ==
+
== Historia ==
  
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 [http://www.gnu.org/software/bash/manual/bashref.html bash Reference Manual] distribuido por el proyecto GNU. Esta sección destaca algunas de sus únicas características.
+
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 de Bourne. [[Brian Fox]] escribió bash en [[1987]]. En [[1990]], [[Chet Ramey]] se convirtió en su principal desarrollador.
  
La mayoría de los shell [[scripts]] ('''guiones de órdenes''') Bourne pueden ejecutarse por bash sin ningún cambio, con la excepción de aquellos scripts de shell 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 el [[Korn Shell]] (ksh) y el [[C Shell]] (csh), como la edición de la línea de órdenes, el historial de órdenes, la pila de directorios, las variables <tt>$RANDOM</tt> y <tt>$PPID</tt>, y la sintaxis de substitución de órdenes [[POSIX]]: <tt>$(...)</tt>. 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.
+
Bash es el intérprete predeterminado en la mayoría de sistemas [[GNU/Linux]], además de Mac OS X Tiger, y puede ejecutarse en la mayoría de los sistemas operativos tipo Unix. También se ha llevado a [[Microsoft Windows]] por el proyecto [[Cygwin]].  
  
La sintaxis de bash tiene muchas extensiones que no proporciona el intérprete Bourne. Varias de las mencionadas extensiones se enumeran a continuación.
+
== Sintaxis de bash ==
  
=== Acceso a los parámetros ===
+
[[Image:Bash ejemplo.jpg|thumb|Ejemplo 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 [http://www.gnu.org/software/bash/manual/bashref.html bash Reference Manual] distribuido por el proyecto GNU. Esta sección destaca algunas de sus únicas características.
  
Los scripts de bash reciben los parámetros que le pasa la shell como $1, $2, ..., $n. Podemos saber cuantos hemos recibido con el símbolo $#.
+
La mayoría de los shell Scripts ('''guiones de órdenes''') Bourne pueden ejecutarse por bash sin ningún cambio, con la excepción de aquellos scripts de shell Bourne que hacen referencia a variables especiales de Bourne o que utilizan una orden interna de Bourne.
  
Por ejemplo, si nuestro script necesita dos parámetros pondremos:
+
La sintaxis de órdenes de bash incluye ideas tomadas desde el [[Korn Shell]] (ksh) y el C Shell (csh), como la edición de la línea de órdenes, el historial de órdenes, la pila de directorios, las variables <tt>$RANDOM</tt> y <tt>$PPID</tt>, y la sintaxis de substitución de órdenes [[POSIX]]: <tt>$(...)</tt>. 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.
 +
 
 +
=== Acceso a los parámetros  ===
 +
 
 +
Los scripts de bash reciben los parámetros que le pasa la shell como $1, $2, ..., $n. Podemos saber cuantos hemos recibido con el símbolo $#.
 +
 
 +
Por ejemplo, si nuestro script necesita dos parámetros pondremos:  
  
<source lang="bash">
 
 
  if [ $# -lt 2 ]; then
 
  if [ $# -lt 2 ]; then
  echo "Necesitas pasar dos parámetros."
+
echo "Necesitas pasar dos parámetros."
  exit 1
+
exit 1
  fi
+
  fi  
</source>
 
  
Además disponemos del array $@, el cual contiene todos los parámetros pasados al script y podemos iterar sobre estos de la siguiente manera:
+
Además disponemos del array $@, el cual contiene todos los parámetros pasados al script y podemos iterar sobre estos de la siguiente manera:  
  
<source lang="bash">
+
for param in $@
  for param in $@
+
do
  do
+
echo $param
    echo $param
+
done
  done
 
</source>
 
  
=== Matemáticas con enteros ===
+
=== Matemáticas con enteros ===
  
Una gran limitación del intérprete Bourne es que no puede realizar cálculos con enteros sin lanzar un proceso externo. En cambio, un proceso bash puede realizar cálculos con enteros utilizando la orden <tt>((...))</tt> y la sintaxis de variables <tt>$[...]</tt> de la siguiente manera:
+
Una gran limitación del intérprete Bourne es que no puede realizar cálculos con enteros sin lanzar un proceso externo. En cambio, un proceso bash puede realizar cálculos con enteros utilizando la orden <tt>((...))</tt> y la sintaxis de variables de la siguiente manera:  
  
<source lang="bash">
 
 
  VAR=55            # Asigna el valor entero 55 a la variable VAR.
 
  VAR=55            # Asigna el valor entero 55 a la variable VAR.
 
  ((VAR = VAR + 1))  # Suma uno a la variable VAR.  Observe la ausencia del carácter '$'.
 
  ((VAR = VAR + 1))  # Suma uno a la variable VAR.  Observe la ausencia del carácter '$'.
Línea 45: Línea 73:
 
  echo $[VAR * 22]  # Multiplica la variable VAR por 22 y sustituye la orden por el resultado.
 
  echo $[VAR * 22]  # Multiplica la variable VAR por 22 y sustituye la orden por el resultado.
 
  echo $((VAR * 22)) # Otra forma de realizar lo mismo.
 
  echo $((VAR * 22)) # Otra forma de realizar lo mismo.
</source>
 
  
La orden <tt>((...))</tt> 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:
+
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:  
  
<source lang="bash">
 
 
  if ((VAR == Y * 3 + X * 2))
 
  if ((VAR == Y * 3 + X * 2))
 
  then
 
  then
        echo Si
+
echo Si
 
  fi
 
  fi
 
   
 
   
 
  ((Z > 23)) && echo Si
 
  ((Z > 23)) && echo Si
</source>
+
 
 
La orden <tt>((...))</tt> soporta los siguientes [http://en.wikipedia.org/wiki/Relational_operator operadores relacionales]: '<tt>==</tt>', '<tt>!=</tt>', '<tt>></tt>', '<tt>&lt;</tt>', '<tt>>=</tt>', y '<tt>&lt;=</tt>'.
 
 
 
Un proceso bash no puede realizar cálculos en [[coma flotante]]. Los únicos shell Unix capaces de esto son el [[Korn Shell]] (versión de 1993) y el [[zsh]] (a partir de la versión 4.0).
 
  
=== Redirecciones de entrada/salida ===
+
La orden soporta operadores relacionales.
  
La sintaxis de bash permite diferentes formas de [[redirección]] de entrada/salida de las que el Shell Bourne tradicional carece. bash puede redirigir la [[salida estándar]] y los flujos de [[error estándar]] a la vez utilizando la sintaxis:
+
Un proceso bash no puede realizar cálculos en [[Coma flotante]]. Los únicos shell Unix capaces de esto son el [[Korn Shell]] (versión de [[1993]]) y el Zsh (a partir de la versión 4.0).
  
<source lang="bash">
+
=== Redirecciones de entrada/salida ===
  orden &> archivo
 
</source>
 
  
que es más simple que teclear la orden Bourne equivalente, "<tt>orden > archivo 2>&1</tt>". Desde la versión 2.05b, bash puede redirigir la entrada estándar desde una cadena utilizando la siguiente sintaxis (denominada "'''here strings'''"):
+
La sintaxis de bash permite diferentes formas de Redirección de entrada/salida de las que el Shell Bourne tradicional carece. bash puede redirigir la Salida estándar y los flujos de Error estándar a la vez utilizando la sintaxis: orden y archivo que es más simple que teclear la orden Bourne equivalente, orden y archivo. Desde la versión 2.05b, bash puede redirigir la entrada estándar desde una cadena utilizando la siguiente sintaxis (denominada "'''here strings'''"):  
  
<source lang="bash">
+
orden "cadena a leer como entrada estándar"
orden <<< "cadena a leer como entrada estándar"
 
</source>
 
  
Si la cadena contiene espacios en blanco, deben utilizarse comillas.
+
Si la cadena contiene espacios en blanco, deben utilizarse comillas.  
  
'''Ejemplo''':
+
'''Ejemplo''': Redirige la salida estándar a un archivo, escribe datos, cierra el archivo y reinicia Stdout.
Redirige la salida estándar a un archivo, escribe datos, cierra el archivo y reinicia [[stdout]]
 
  
<source lang="bash">
 
 
  # hace que el descriptor de archivo 6 sea una copia de stdout (descriptor archivo 1)
 
  # hace que el descriptor de archivo 6 sea una copia de stdout (descriptor archivo 1)
  exec 6>&1
+
  exec 6>1
 
  # abre el archivo "test.data" para escritura
 
  # abre el archivo "test.data" para escritura
 
  exec 1>test.data
 
  exec 1>test.data
Línea 89: Línea 105:
 
  echo "data:data:data"
 
  echo "data:data:data"
 
  # recupera stdout original, al hacer que sea una copia del descriptor de archivo 6
 
  # recupera stdout original, al hacer que sea una copia del descriptor de archivo 6
  exec 1>&6
+
  exec 1>6
 
  # cierra el descriptor de archivo 6
 
  # cierra el descriptor de archivo 6
  exec 6>&-
+
  exec 6>
</source>
 
  
Abre y cierra archivos
+
Abre y cierra archivos  
  
<source lang="bash">
 
 
  # abre el archivo test.data para lectura
 
  # abre el archivo test.data para lectura
 
  exec 6<test.data
 
  exec 6<test.data
Línea 102: Línea 116:
 
  while read -u 6 dta
 
  while read -u 6 dta
 
  do
 
  do
  echo "$dta"  
+
echo "$dta"  
 
  done
 
  done
 
  # cierra el archivo test.data
 
  # cierra el archivo test.data
  exec 6<&-
+
  exec 6
</source>
 
 
 
Captura la salida de órdenes externas
 
  
<source lang="bash">
+
Captura la salida de órdenes externas
  # ejecuta 'find' y guarda los resultados en VAR
 
  # busca nombres de archivos que terminan con la letra "h"
 
  VAR=$(find . -name "*h")
 
</source>
 
  
=== Expresiones regulares ===
+
# ejecuta 'find' y guarda los resultados en VAR
 +
# busca nombres de archivos que terminan con la letra "h"
 +
VAR=$(find . -name "*h")
  
Los procesos bash 3.0 soportan emparejamiento de [[expresión regular|expresiones regulares]] utilizando la siguiente sintaxis, reminiscente de [[Perl]]:
+
=== Expresiones regulares ===
  
<source lang="bash">[[ string =~ regex]] </source>
+
Los procesos bash 3.0 soportan emparejamiento de Expresión regular utilizando la siguiente sintaxis, reminiscente de Perl:
  
La sintaxis de expresiones regulares es la misma que documenta la [[Man (Unix)|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 casan.
+
La sintaxis de expresiones regulares es la misma que documenta la Man (Unix)|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 casan. En las expresiones regulares puede accederse a las partes delimitadas por paréntesis, utilizando la variable shell BASH_REMATCH, de la siguiente manera:  
En las expresiones regulares puede accederse a las partes delimitadas por paréntesis, utilizando la variable shell <tt>BASH_REMATCH</tt>, de la siguiente manera:
 
  
<source lang="bash">
+
  if foobarbletch =~ 'foo(bar)bl(.*)'  
  if [[ foobarbletch =~ 'foo(bar)bl(.*)']]
 
 
  then
 
  then
        echo The regex matches!
+
echo The regex matches!
        echo $BASH_REMATCH      -- outputs: foobarbletch
+
echo $BASH_REMATCH      -- outputs: foobarbletch
        echo ${BASH_REMATCH[1]} -- outputs: bar
+
echo ${BASH_REMATCH[1]} -- outputs: bar
        echo ${BASH_REMATCH[2]} -- outputs: etch
+
echo ${BASH_REMATCH[2]} -- outputs: etch
 
  fi
 
  fi
</source>
 
  
Esta sintaxis proporciona un rendimiento superior a lanzar un proceso separado para ejecutar una orden <tt>[[grep]]</tt>, 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 '<tt>*</tt>' o '<tt>?</tt>'), debe ser entrecomillada.
+
Esta sintaxis proporciona un rendimiento superior a lanzar un proceso separado para ejecutar una orden <tt>[[Grep]]</tt>, 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 debe ser entrecomillada).  
  
=== Escape con contrabarra ===
+
=== Escape con contrabarra ===
  
Las palabras con la forma <tt>$'string'</tt> se tratan de un modo especial. Estas palabras se expanden a <tt>string</tt>, con los caracteres escapados por la contrabarra reemplazados según especifica el [[lenguaje de programación C]]. Las secuencias de escape con contrabarra, se decodifican del siguiente modo:
+
Las palabras con la forma se tratan de un modo especial. Estas palabras se expanden a , con los caracteres escapados por la contrabarra reemplazados según especifica el [[Lenguaje de Programación C]]. Las secuencias de escape con contrabarra, se decodifican del siguiente modo:  
  
{| class="wikitable" border="1"
+
{| border="1" class="wikitable"
|+ <big>Escapes con contrabarra</big>
+
|+ Escapes con contrabarra  
|-
 
! Backslash<br />Escape !! Se expande a ...
 
 
|-
 
|-
| align="center" | <tt>\a</tt> || Un carácter de alerta (''bell'')
+
! Backslash Escape
 +
! Se expande a ...
 
|-
 
|-
| align="center" | <tt>\b</tt> || Un carácter de retroceso
+
| align="center" |  
 +
| Un carácter de alerta (''bell'')
 
|-
 
|-
| align="center" | <tt>\e</tt> || Un carácter de escape
+
| align="center" |  
 +
| Un carácter de retroceso
 
|-
 
|-
| align="center" | <tt>\f</tt> || Un carácter de alimentación de línea (''form feed'')
+
| align="center" |  
 +
| Un carácter de escape
 
|-
 
|-
| align="center" | <tt>\n</tt> || Un carácter de nueva línea
+
| align="center" |  
 +
| Un carácter de alimentación de línea (''form feed'')
 
|-
 
|-
| align="center" | <tt>\r</tt> || Un carácter de retorno de carro
+
| align="center" |
 +
| Un carácter de nueva línea
 
|-
 
|-
| align="center" | <tt>\t</tt> || Un tabulador horizontal
+
| align="center" |
 +
| Un carácter de retorno de carro
 
|-
 
|-
| align="center" | <tt>\v</tt> || Un tabulador vertical
+
| align="center" |
 +
| Un tabulador horizontal
 
|-
 
|-
| align="center" | <tt>\\</tt> || Un carácter contrabarra
+
| align="center" |
 +
| Un tabulador vertical
 
|-
 
|-
| align="center" | <tt>\'</tt> || Un carácter de comilla simple
+
| align="center" |  
 +
| Un carácter contrabarra
 
|-
 
|-
| align="center" | <tt>\nnn</tt> || El carácter de 8 bits cuyo valor es el número octal nnn (de uno a tres dígitos)
+
| align="center" |
 +
| Un carácter de comilla simple
 
|-
 
|-
| align="center" | <tt>\xHH</tt> || El carácter de 8 bits cuyo valor es el número hexadecimal HH (uno o dos dígitos hexadecimales)
+
| align="center" |  
 +
| El carácter de 8 bits cuyo valor es el número octal nnn (de uno a tres dígitos)
 
|-
 
|-
| align="center" | <tt>\cx</tt> || Un carácter control-X
+
| align="center" |
 +
| El carácter de 8 bits cuyo valor es el número hexadecimal HH (uno o dos dígitos hexadecimales)
 +
|-
 +
| align="center" |
 +
| Un carácter control-X
 
|}
 
|}
  
El resultado expandido se encuentra entrecomillado con comilla simple, como si el signo [[$]] no estuviese presente.
+
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 $ (<tt>$"..."</tt>) será '''traducida''' de acuerdo al LOCALE 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.
 
  
== Enlaces externos ==
+
Una cadena entrecomillada con comillas dobles precedida por un signo $ ($"...") será '''traducida''' de acuerdo al LOCALE 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.
  
* [http://www.ss64.com/bash/index.html Lista de órdenes]
+
== Enlaces externos  ==
* [http://www.gnu.org/software/bash/bash.html bash home page]
 
* [ftp://ftp.cwru.edu/pub/bash/FAQ bash FAQ]
 
* [http://groups.google.com/groups?dq=&lr=&ie=UTF-8&group=gnu.announce&selm=mailman.1865.1091019304.1960.info-gnu%40gnu.org bash 3.0 Announcement]
 
* [http://www.network-theory.co.uk/bash/manual/ The GNU bash Reference Manual], ([http://www.network-theory.co.uk/docs/bashref/ HTML version]) by [[Chet Ramey]] and [[Brian Fox]], ISBN 0-9541617-7-7
 
  
Guías bash de [[TLDP|Linux Documentation Project]]:
+
*[http://www.ss64.com/bash/index.html Lista de órdenes]
 +
*[http://www.gnu.org/software/bash/bash.html bash home page]
 +
*[ftp://ftp.cwru.edu/pub/bash/FAQ bash FAQ]  
 +
*[http://groups.google.com/groups?dq=&lr=&ie=UTF-8&group=gnu.announce&selm=mailman.1865.1091019304.1960.info-gnu%40gnu.org bash 3.0 Announcement]  
 +
*[http://www.network-theory.co.uk/bash/manual/ The GNU bash Reference Manual], ([http://www.network-theory.co.uk/docs/bashref/ HTML version]) by [[Chet Ramey]] and [[Brian Fox]], ISBN 0-9541617-7-7
  
* [http://es.tldp.org/COMO-INSFLUG/COMOs/Bash-Prog-Intro-COMO/Bash-Prog-Intro-COMO.html Programación bash]
+
Guías bash de TLDP|Linux Documentation Project:  
* [http://www.tldp.org/LDP/Bash-Beginners-Guide/html/ bash Guide for Beginners]
 
* [http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html BASH Programming - Introduction HOW-TO]
 
* [http://www.tldp.org/LDP/abs/html/ Advanced bash-Scripting Guide]
 
  
Otras guías y tutoriales:
+
*[http://es.tldp.org/COMO-INSFLUG/COMOs/Bash-Prog-Intro-COMO/Bash-Prog-Intro-COMO.html Programación bash]
 +
*[http://www.tldp.org/LDP/Bash-Beginners-Guide/html/ bash Guide for Beginners]
 +
*[http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html BASH Programming - Introduction HOW-TO]
 +
*[http://www.tldp.org/LDP/abs/html/ Advanced bash-Scripting Guide]
  
* [http://www.cyberciti.biz/nixcraft/linux/docs/uniqlinuxfeatures/lsst/ Linux Shell Scripting Tutorial - A Beginner's handbook]
+
Otras guías y tutoriales:  
* [http://www.linux.ie/newusers/beginners-linux-guide/shells.php About Shells]
 
* [http://hypexr.homelinux.org/bash_tutorial.html Beginners bash Tutorial]
 
* [http://deadman.org/bash.html Advancing in the bash Shell tutorial]
 
* [http://www.vias.org/linux-knowhow/bbg_intro_10.html Linux Know-How] including the bash Guide for Beginners
 
* [http://snippets-tricks.org/topicos/programacion/shell-scripting/ Shell Scripting - Snippets Tricks]
 
  
Ejemplos y Utilidades realizadas en Bash
+
*[http://www.cyberciti.biz/nixcraft/linux/docs/uniqlinuxfeatures/lsst/ Linux Shell Scripting Tutorial - A Beginner's handbook]
* [http://www.gulix.cl/wiki/Programaci%C3%B3n_en_Bash Introducción y ejemplos varios /básicos/medios/avanzados en bash script]
+
*[http://www.linux.ie/newusers/beginners-linux-guide/shells.php About Shells]
 +
*[http://hypexr.homelinux.org/bash_tutorial.html Beginners bash Tutorial]
 +
*[http://deadman.org/bash.html Advancing in the bash Shell tutorial]
 +
*[http://www.vias.org/linux-knowhow/bbg_intro_10.html Linux Know-How] including the bash Guide for Beginners
 +
*[http://snippets-tricks.org/topicos/programacion/shell-scripting/ Shell Scripting - Snippets Tricks]
  
==Enlaces externos==
+
Ejemplos y Utilidades realizadas en Bash.  
* [http://www.gnome.org/ Gnome.org]
 
* [http://www.es.gnome.org GNOME Hispano]
 
* [http://planeta.es.gnome.org/ Planeta GNOME Hispano]
 
* [http://art.gnome.org/ Temas para GNOME]
 
* [http://www.gnome-look.org/ Más temas para GNOME]
 
  
[[Category:Solicitada]]
+
*[http://www.gulix.cl/wiki/Programaci%C3%B3n_en_Bash Introducción y ejemplos varios /básicos/medios/avanzados en bash script]
 +
</div>
 +
[[Category:Software_para_Linux]][[Category:GNU]]

última versión al 20:40 26 jul 2019

Bash
Información sobre la plantilla
Parte de la familia UNIX
BashLogo.jpg
Bash. Intérprete de comandos para entornos Unix
CreadorBrian Fox y Chet Ramey
Lanzamiento inicial1987
Última versión estableUltima versión estable 4.1.7. 14 de mayo, 2009
Sitio web
The GNU Bourne-Again SHell

Bash. Es un programa informático cuya función consiste en interpretar órdenes. Está basado en la shell de Unix y es compatible con POSIX. Fue escrito para el proyecto GNU y es el intérprete de comandos por defecto en la mayoría de las distribuciones de Linux. Su nombre es un acrónimo de Bourne-Again Shell (otro shell bourne) — haciendo un juego de palabras (born-again significa renacimiento) sobre el Bourne shell (sh), que fue uno de los primeros intérpretes importantes de Unix.

Historia

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 de Bourne. Brian Fox escribió bash en 1987. En 1990, Chet Ramey se convirtió en su principal desarrollador.

Bash es el intérprete predeterminado en la mayoría de sistemas GNU/Linux, además de Mac OS X Tiger, y puede ejecutarse en la mayoría de los sistemas operativos tipo Unix. También se ha llevado a Microsoft Windows por el proyecto Cygwin.

Sintaxis de bash

Ejemplo 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 distribuido por el proyecto GNU. Esta sección destaca algunas de sus únicas características.

La mayoría de los shell Scripts (guiones de órdenes) Bourne pueden ejecutarse por bash sin ningún cambio, con la excepción de aquellos scripts de shell 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 el Korn Shell (ksh) y el 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.

Acceso a los parámetros

Los scripts de bash reciben los parámetros que le pasa la shell como $1, $2, ..., $n. Podemos saber cuantos hemos recibido con el símbolo $#.

Por ejemplo, si nuestro script necesita dos parámetros pondremos:

if [ $# -lt 2 ]; then
echo "Necesitas pasar dos parámetros."
exit 1
fi 

Además disponemos del array $@, el cual contiene todos los parámetros pasados al script y podemos iterar sobre estos de la siguiente manera:

for param in $@
do
echo $param
done

Matemáticas con enteros

Una gran limitación del intérprete Bourne es que no puede realizar cálculos con enteros sin lanzar un proceso externo. En cambio, un proceso bash puede realizar cálculos con enteros utilizando la orden ((...)) y la sintaxis de variables de la siguiente manera:

VAR=55             # Asigna el valor entero 55 a la variable VAR.
((VAR = VAR + 1))  # Suma uno a la variable VAR.  Observe la ausencia del carácter '$'.
((++VAR))          # Otra forma de sumar uno a VAR.  Preincremento estilo C.
((VAR++))          # Otra forma de sumar uno a VAR.  Postincremento estilo C.
echo $[VAR * 22]   # Multiplica la variable VAR por 22 y sustituye la orden por el resultado.
echo $((VAR * 22)) # Otra forma de realizar lo mismo.

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

((Z > 23)) && echo Si

La orden soporta operadores relacionales.

Un proceso bash no puede realizar cálculos en Coma flotante. Los únicos shell Unix capaces de esto son el Korn Shell (versión de 1993) y el 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 el Shell Bourne tradicional carece. bash puede redirigir la Salida estándar y los flujos de Error estándar a la vez utilizando la sintaxis: orden y archivo que es más simple que teclear la orden Bourne equivalente, orden y archivo. Desde la versión 2.05b, bash puede redirigir la entrada estándar desde una cadena utilizando la siguiente sintaxis (denominada "here strings"):

orden "cadena a leer como entrada estándar"

Si la cadena contiene espacios en blanco, deben utilizarse comillas.

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>

Abre y cierra archivos

# abre el archivo test.data para lectura
exec 6<test.data
# lee hasta el final del archivo
while read -u 6 dta
do
echo "$dta" 
done
# cierra el archivo test.data
exec 6

Captura la salida de órdenes externas

# ejecuta 'find' y guarda los resultados en VAR
# busca nombres de archivos que terminan con la letra "h"
VAR=$(find . -name "*h")

Expresiones regulares

Los procesos bash 3.0 soportan emparejamiento de Expresión regular utilizando la siguiente sintaxis, reminiscente de Perl:

La sintaxis de expresiones regulares es la misma que documenta la Man (Unix)|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 casan. 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 debe ser entrecomillada).

Escape con contrabarra

Las palabras con la forma se tratan de un modo especial. Estas palabras se expanden a , con los caracteres escapados por la contrabarra reemplazados según especifica el Lenguaje de Programación C. Las secuencias de escape con contrabarra, se decodifican del siguiente modo:

Escapes con contrabarra
Backslash Escape Se expande a ...
Un carácter de alerta (bell)
Un carácter de retroceso
Un carácter de escape
Un carácter de alimentación de línea (form feed)
Un carácter de nueva línea
Un carácter de retorno de carro
Un tabulador horizontal
Un tabulador vertical
Un carácter contrabarra
Un carácter de comilla simple
El carácter de 8 bits cuyo valor es el número octal nnn (de uno a tres dígitos)
El carácter de 8 bits cuyo valor es el número hexadecimal HH (uno o dos dígitos hexadecimales)
Un carácter control-X

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 al LOCALE 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.

Enlaces externos

Guías bash de TLDP|Linux Documentation Project:

Otras guías y tutoriales:

Ejemplos y Utilidades realizadas en Bash.