Manual de bash

De doc.ubuntu-es
(Diferencias entre revisiones)
Saltar a: navegación, buscar
(Variables)
(División)
 
(No se muestran 19 ediciones intermedias realizadas por 4 usuarios)
Línea 1: Línea 1:
 
= Introducción =
 
= Introducción =
  
bash es un shell de Unix (intérprete de órdenes de Unix) escrito para el proyecto GNU. 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. Hacia 1978 el intérprete Bourne era el intérprete distribuido con el Unix Version 7. Stephen Bourne, por entonces investigador de los Laboratorios Bell, escribió el intérprete Bourne original . Brian Fox escribió el intérprete 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.
+
bash es un shell de Unix (intérprete de órdenes de Unix) escrito para el proyecto GNU. 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. Hacia 1978 el intérprete Bourne era el intérprete distribuido con el Unix Version 7. Stephen Bourne, por entonces investigador de los Laboratorios Bell, escribió el intérprete Bourne original. Brian Fox escribió el intérprete 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.
  
== Conecptos Básicos ==
+
== Conceptos Básicos ==
  
 
Para abrir una sesión de bash, lo más fácil es abrir una terminal. En GNOME está en el menú: Aplicaciones->Accesorios->Terminal. Lo que tendremos delante, se llama [[prompt]]. Se trata de una línea compuesta por el nombre de usuario "@" nombre de la máquina y un carácter separador. El separador será "$" si somos un usuario normal o "#" si somos root.
 
Para abrir una sesión de bash, lo más fácil es abrir una terminal. En GNOME está en el menú: Aplicaciones->Accesorios->Terminal. Lo que tendremos delante, se llama [[prompt]]. Se trata de una línea compuesta por el nombre de usuario "@" nombre de la máquina y un carácter separador. El separador será "$" si somos un usuario normal o "#" si somos root.
Línea 10: Línea 10:
 
=== Introduciendo Órdenes ===
 
=== Introduciendo Órdenes ===
  
Para introducir una órden o comando, nada más fácil que teclear el nombre de la órden y presionar enter. La mayoría de las órdenes o comandos acepta parámetros. Para introducir un parámetro lo haremos a continuación de la órden o comando. por ejemplo, para introducir la órden ls:
+
Para introducir una orden o comando, nada más fácil que teclear el nombre de la orden y presionar enter. La mayoría de las órdenes o comandos aceptan parámetros. Para introducir un parámetro lo haremos a continuación de la orden o comando. Por ejemplo, para introducir la orden ls:
  
Sin Parámetros:
+
Sin Parámetros:  
  
<pre>juan@portatil$ ls </pre>
+
<pre>juan@portátil$ ls </pre>
  
 
Con Parámetros:
 
Con Parámetros:
Línea 20: Línea 20:
 
<pre>juan@portátil$ ls -la </pre>
 
<pre>juan@portátil$ ls -la </pre>
  
[[ Terminal | Vea ésto antes de seguir ]]
+
[[ Terminal | Vea esto antes de seguir ]]
 +
 
 +
= Comandos y Rutas =
  
 
=== Autocompletado de órdenes y rutas ===
 
=== Autocompletado de órdenes y rutas ===
Línea 28: Línea 30:
 
Si quisiéramos que bash autocompletara una ruta, (por ejemplo /usr/lib/jvm/sun-java6) bastaría con empezar a escribirla e ir presionando la tecla tabulador de forma que: (-> equivale a tabulador)  
 
Si quisiéramos que bash autocompletara una ruta, (por ejemplo /usr/lib/jvm/sun-java6) bastaría con empezar a escribirla e ir presionando la tecla tabulador de forma que: (-> equivale a tabulador)  
  
Si hay más de una coincidencia, bash no autocompleta, si no que espera a que pulsemos de nuevo tabulador (->->) para mostrar todas las posibilidades.
+
Si hay más de una coincidencia, bash no autocompleta, sino que espera a que pulsemos de nuevo tabulador (->->) para mostrar todas las posibilidades.
  
 
<pre>
 
<pre>
Línea 72: Línea 74:
 
La lista de comandos que podemos usar es bastante extensa, hay comandos para todas las tareas que podamos imaginar, algunos más conocidos que otros. Aquí hay una lista de comandos con sus argumentos más comunes:
 
La lista de comandos que podemos usar es bastante extensa, hay comandos para todas las tareas que podamos imaginar, algunos más conocidos que otros. Aquí hay una lista de comandos con sus argumentos más comunes:
  
[[ Comandos_de_uso_frecuente | Vea ésto antes de continuar ]]
+
[[ Comandos_de_uso_frecuente | Vea esto antes de continuar ]]
  
 
== Variables de Entorno ==
 
== Variables de Entorno ==
Línea 110: Línea 112:
 
Nombre del anterior directorio de trabajo antes de ejecutar por última vez el comando cd
 
Nombre del anterior directorio de trabajo antes de ejecutar por última vez el comando cd
  
*RANDOM Un número entero generado al azar
+
*RANDOM
 +
 
 +
Un número entero generado al azar
 
        
 
        
 
* PS1
 
* PS1
Línea 123: Línea 127:
  
 
<pre>  
 
<pre>  
$echo $SEHLL
+
$echo $SHELL
 
xterm
 
xterm
 
</pre>
 
</pre>
 +
 +
= Sistema de Ficheros =
 +
 +
Tienes una referencia inicial [[Sistema_de_archivos | Aquí ]]. Debería leerlo antes de continuar.
 +
 +
== Cambiando de directorio ==
 +
 +
Para saber en qué directorio te encuentras, puedes usar el comando "pwd". Para cambiar de directorio debes usar el comando "cd" seguido del nombre del directorio.
 +
 +
<pre>
 +
$pwd
 +
/home/juan
 +
$ls
 +
.                ..
 +
Plantillas        Proyectos
 +
cpp              Público
 +
Documentos        Escritorio
 +
$cd EScritorio
 +
$pwd
 +
/home/juan/Escritorio
 +
</pre>
 +
 +
Los símbolos "." y ".." tienen un significado especial. el Símbolo "." significa ruta local, es decir, la ruta donde nos encontramos. y el ".." significa el directorio padre o anterior.
 +
 +
=== Rutas Absolutas ===
 +
 +
Por ejemplo, si quisiéramos copiar un fichero del directorio padre al directorio actual, una forma de hacerlo sería utilizando rutas absolutas.
 +
 +
<pre>
 +
$pwd
 +
/home/juan/Escritorio
 +
$cp /home/juan/fichero /home/juan/Escritorio
 +
</pre>
 +
 +
=== Rutas Relativas ===
 +
 +
Pero algo más sencillo es usar las rutas relativas:
 +
 +
<pre>
 +
$pwd
 +
/home/juan/Escritorio
 +
$cp ../fichero .
 +
</pre>
 +
 +
Eso copiaría el fichero "fichero" del directorio "/home/juan" al directorio "/home/juan/Escritorio".
 +
 +
== Enlaces Simbólicos ==
  
 
= Scripts =
 
= Scripts =
  
Los scripts, llamados también guiones, son secuencias de órdenes en un fichero. Se utilizan para automatizar tareas rutinarias. Por ejemplo, si todos los días cuando encendemos nuestro ordenador realizamos las mismas tareas, podemos hacer un guion o script que lo haga por nosotros.
+
Los scripts, llamados también guiones, son secuencias de órdenes en un fichero. Se utilizan para automatizar tareas rutinarias. Por ejemplo, si todos los días cuando encendemos nuestro ordenador realizamos las mismas tareas, podemos hacer un guión o script que lo haga por nosotros.
  
 
Por ejemplo, si deseamos lanzar una copia a un dispositivo externo todos los días, haríamos algo así:
 
Por ejemplo, si deseamos lanzar una copia a un dispositivo externo todos los días, haríamos algo así:
Línea 150: Línea 201:
 
</pre>
 
</pre>
  
El script anterior necesitaría permisos de root. Imaginemos que el script se llama backup.sh. Para lanzarlo necesitaría permisos de ejecución ( ver [[permisos]]) valdría con escribir: "./backup.sh"
+
El script anterior necesitaría permisos de root. Imaginemos que el script se llama backup.sh. Para lanzarlo necesitaría permisos de ejecución ( ver [[permisos]]); valdría con escribir: "./backup.sh"
  
 
== Variables ==
 
== Variables ==
Línea 173: Línea 224:
 
<pre> hola usuario </pre>
 
<pre> hola usuario </pre>
  
Para recuperar el valor de una variable, escribiremos "$" seguido del nombre de la variable. Cabe recordar que en ningún proceso de asignación debe predecer el "$" al nombre de la variable.
+
Para recuperar el valor de una variable, escribiremos "$" seguido del nombre de la variable. Cabe recordar que en ningún proceso de asignación debe preceder el "$" al nombre de la variable.
  
 
=== Asignación de Valores ===
 
=== Asignación de Valores ===
  
De nada sirve una variable si no podemos asignarle valores variables ¿no? La asignación devalores se hace igual de simple. variable=valor. "valor" puede ser un número entero (es importante, porque bash sólo soporta números enteros) También podremos asignarles resultados de operaciones y el retorno de los comandos.
+
De nada sirve una variable si no podemos asignarle valores variables ¿no? La asignación de valores se hace igual de simple. variable=valor. "valor" puede ser un número entero (es importante, porque bash sólo soporta números enteros). También podremos asignarles resultados de operaciones y el retorno de los comandos.
  
 
=== Asignación de la Salida de Comandos ===
 
=== Asignación de la Salida de Comandos ===
Línea 191: Línea 242:
 
</pre>
 
</pre>
  
Si éste script lo utilizara el usuario "pedro" la salida por pantalla sería:
+
Si este script lo utilizara el usuario "pedro" la salida por pantalla sería:
  
 
<pre> hola pedro </pre>
 
<pre> hola pedro </pre>
Línea 197: Línea 248:
 
=== Expansión de Variables ===
 
=== Expansión de Variables ===
  
Podemos obtener más datos sobre las variables, por ejemplo, cuántos carácteres tiene una variable:
+
Podemos obtener más datos sobre las variables, por ejemplo, cuántos caracteres tiene una variable:
  
 
*${v}    Idéntico a $v. Se utiliza en los casos de ambigüedad  
 
*${v}    Idéntico a $v. Se utiliza en los casos de ambigüedad  
Línea 211: Línea 262:
 
*${v+c}  Si v ha sido definida c, en otro caso la cadena vacía
 
*${v+c}  Si v ha sido definida c, en otro caso la cadena vacía
  
== Arrays ==
+
=== Arrays o Vectores ===
  
== Condicionales ==
+
En programación, un vector, array, arreglo o alineación es un conjunto o agrupación de variables del mismo tipo cuyo acceso se realiza por índices. Desde el punto de vista del programa, un arreglo (matriz, array o vector) es una zona de almacenamiento contiguo, que contiene una serie de elementos del mismo tipo. La única limitación en este caso es que el índice de los mismos debe estar entre 0 y 511, por lo que sólo son posibles vectores de hasta 512 componentes.
  
=== Introducción a Test ===
+
Para crear un vector basta con asignar un valor a uno de sus componentes. Los restantes se irán creando de forma dinámica conforme se vayan necesitando:
  
=== Evaluación If-Then ===
+
<pre>
 +
#!/bin/bash
 +
# Script de creación de un vector.
 +
 
 +
archivos[0]=carta.txt
 +
archivos[1]=informe.txt
 +
archivos[2]=membrete.txt
 +
 
 +
echo ${archivos[0]}
 +
echo ${archivos[1]}
 +
echo ${archivos[2]}
 +
echo "Tengo ${#archivos[*]} Archivos por hacer"
 +
echo "Archivos por hacer: ${archivos[*]}"
 +
 
 +
</pre>
 +
 
 +
El script generaría esta salida:
 +
 
 +
<pre>
 +
 
 +
carta.txt
 +
informe.txt
 +
membrete.txt
 +
Tengo 3 Archivos por hacer
 +
Archivos por hacer: carta.txt informe.txt membrete.txt
 +
 
 +
</pre>
 +
 
 +
 
 +
 
 +
== Operadores Aritméticos ==
 +
 
 +
Bash permite el uso de los operadores aritméticos comunes, pero tiene una limitación importante, sólo soporta números enteros, cualquier valor numérico con decimales es truncado a entero.
 +
 
 +
La forma común de calcular es:
 +
 
 +
let "expresión"
 +
 
 +
<pre> let res=1+3 </pre>
 +
 
 +
No se puede usar esta notación en las operaciones que aparecen los operadores *, < o >, puesto que estos caracteres tienen un significado especial para bash. Podemos evitar que shell los tome como caracteres especiales anidando la expresión dentro de dos paréntesis, de esta forma:
 +
 
 +
<pre> (( res= 1 + 3 )) </pre>
 +
 
 +
Lo que hace que en la práctica sólo se emplee ésta última notación.
 +
 
 +
Dentro de los paréntesis podemos llamar a las variables por su nombre con o sin "$".
 +
 
 +
=== Suma ===
 +
 
 +
<pre>
 +
#!/bin/bash
 +
echo " S U M A R "
 +
echo -e "Primer Operador:\c"
 +
read A
 +
echo -e "Segundo Operador:\c"
 +
read B
 +
((RES=A+B))
 +
echo "Resultado: $RES"
 +
</pre>
 +
 
 +
=== Resta ===
 +
 
 +
<pre>
 +
#!/bin/bash
 +
echo " R E S T A R "
 +
echo -e "Primer Operador:\c"
 +
read A
 +
echo -e "Segundo Operador:\c"
 +
read B
 +
((RES=A-B))
 +
echo "Resultado: $RES"
 +
</pre>
 +
 
 +
=== Multiplicación ===
 +
 
 +
<pre>
 +
#!/bin/bash
 +
echo " M U L T I P L I C A R  "
 +
echo -e "Primer Operador:\c"
 +
read A
 +
echo -e "Segundo Operador:\c"
 +
read B
 +
((RES=A*B))
 +
echo "Resultado: $RES"
 +
</pre>
 +
 
 +
=== División ===
 +
 
 +
<pre>
 +
#!/bin/bash
 +
echo " D I V I D I R  "
 +
echo -e "Primer Operador:\c"
 +
read A
 +
echo -e "Segundo Operador:\c"
 +
read B
 +
((RES=A/B))
 +
echo "Resultado: $RES"
 +
</pre>
 +
 
 +
=== Módulo ===
 +
 
 +
<pre>
 +
#!/bin/bash
 +
echo " R E S T O  "
 +
echo -e "Primer Operador:\c"
 +
read A
 +
echo -e "Segundo Operador:\c"
 +
read B
 +
((RES=A%B))
 +
echo "Resultado: $RES"
 +
</pre>
 +
 
 +
== Estructuras de Control ==
 +
 
 +
==== Evaluación If-Then ====
  
 
<pre>
 
<pre>
Línea 239: Línea 405:
 
</pre>
 
</pre>
  
== Bucles ==
 
  
=== While ===
+
==== Introducción a Test ====
  
=== For ===
+
=== Bucles ===
  
=== Until ===
+
==== While ====
  
== Operadores ==
+
==== For ====
 +
 
 +
==== Until ====
  
 
== Funciones ==
 
== Funciones ==
  
 +
= Véase También y Fuentes =
  
 
+
* [http://es.wikipedia.org/wiki/Array Array]
 
+
  
 
<!-- Categorías, NO BORRAR -->
 
<!-- Categorías, NO BORRAR -->
  
[[Categoría: Sistema Linux]]
+
[[Categoría:Terminal]]

Última revisión de 19:58 12 jun 2012

Contenido

[editar] Introducción

bash es un shell de Unix (intérprete de órdenes de Unix) escrito para el proyecto GNU. 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. Hacia 1978 el intérprete Bourne era el intérprete distribuido con el Unix Version 7. Stephen Bourne, por entonces investigador de los Laboratorios Bell, escribió el intérprete Bourne original. Brian Fox escribió el intérprete 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.

[editar] Conceptos Básicos

Para abrir una sesión de bash, lo más fácil es abrir una terminal. En GNOME está en el menú: Aplicaciones->Accesorios->Terminal. Lo que tendremos delante, se llama prompt. Se trata de una línea compuesta por el nombre de usuario "@" nombre de la máquina y un carácter separador. El separador será "$" si somos un usuario normal o "#" si somos root.


[editar] Introduciendo Órdenes

Para introducir una orden o comando, nada más fácil que teclear el nombre de la orden y presionar enter. La mayoría de las órdenes o comandos aceptan parámetros. Para introducir un parámetro lo haremos a continuación de la orden o comando. Por ejemplo, para introducir la orden ls:

Sin Parámetros:

juan@portátil$ ls 

Con Parámetros:

juan@portátil$ ls -la 

Vea esto antes de seguir

[editar] Comandos y Rutas

[editar] Autocompletado de órdenes y rutas

Bash nos da muchas facilidades de uso. Por ejemplo, podemos autocompletar órdenes o rutas.

Si quisiéramos que bash autocompletara una ruta, (por ejemplo /usr/lib/jvm/sun-java6) bastaría con empezar a escribirla e ir presionando la tecla tabulador de forma que: (-> equivale a tabulador)

Si hay más de una coincidencia, bash no autocompleta, sino que espera a que pulsemos de nuevo tabulador (->->) para mostrar todas las posibilidades.

$/us->
$/usr/l->->
/lib /local
$/usr/li->
$/usr/lib->->
consolekit/        i686/              pcmciautils/       sudo/
dbus-1.0/          initramfs-tools/   perl/              tasksel/
dpkg/              jvm/               perl5/             tc/

Lo mismo ocurre con los comandos. Si queremos ejecutar, por ejemplo depkg-reconfigure: (imaginemos que no recordamos cómo se escribe)

$dpkg->->
dpkg                 dpkg-gencontrol      dpkg-scansources
dpkg-architecture    dpkg-gensymbols      dpkg-shlibdeps
dpkg-buildpackage    dpkg-name            dpkg-source
dpkg-checkbuilddeps  dpkg-parsechangelog  dpkg-split
dpkg-deb             dpkg-preconfigure    dpkg-statoverride
dpkg-distaddfile     dpkg-query           dpkg-trigger
dpkg-divert          dpkg-reconfigure     
dpkg-genchanges      dpkg-scanpackages    
$dpkg-rec->
$dpkg-reconfigure

[editar] Búsqueda de Comandos Ejecutados

Si queremos recuperar un comando ya ejecutado, podemos usar la flecha arriba para ir navegando por los comandos que ya hemos introducido. Si queremos buscar uno concreto y que además nos lo autocomplete, podemos pulsar control+r y empezar a escribir hasta que lo encuentre, entonces pulsaremos enter para introducirlo.

$^R
$(reverse-i-search)`su': sudo aptitude install links

'su' Es la parte que hemos escrito y lo siguiente a los dos puntos lo que ha encontrado.

[editar] Comandos u Órdenes

La lista de comandos que podemos usar es bastante extensa, hay comandos para todas las tareas que podamos imaginar, algunos más conocidos que otros. Aquí hay una lista de comandos con sus argumentos más comunes:

Vea esto antes de continuar

[editar] Variables de Entorno

Las variables de entorno son un tipo de variables que están definidas en el archivo .bashrc de cada usuario. En ellas se almacenan datos que serán legibles desde cualquier script o programa ejecutado en el terminal.

  • HOME

Nombre del directorio con la cuenta del usuario

  • PATH

Un conjunto de nombres de directorio separados por el símbolo : en los que buscar los comandos

  • LOGNAME

Nombre del usuario

  • SHELL

Nombre completo del shell que se está utilizando

  • TERM

Tipo de terminal que se está utilizando

  • PPID

Número identificador del proceso padre

  • PWD

Nombre del directorio de trabajo actual

  • OLDPWD

Nombre del anterior directorio de trabajo antes de ejecutar por última vez el comando cd

  • RANDOM

Un número entero generado al azar

  • PS1

Cadena que presenta el shell cada vez que solicita un comando

  • PS2

Cadena que presenta el shell cada vez que solicita la continuación de un comando que ocupa varias líneas de pantalla

Para ver los valores de cada una de ellas basta con ejecutar: echo $NOMBRE DE LA VARIABLE. Por ejemplo:

 
$echo $SHELL
xterm

[editar] Sistema de Ficheros

Tienes una referencia inicial Aquí . Debería leerlo antes de continuar.

[editar] Cambiando de directorio

Para saber en qué directorio te encuentras, puedes usar el comando "pwd". Para cambiar de directorio debes usar el comando "cd" seguido del nombre del directorio.

$pwd
/home/juan
$ls
.                 ..
Plantillas        Proyectos
cpp               Público
Documentos        Escritorio
$cd EScritorio
$pwd
/home/juan/Escritorio

Los símbolos "." y ".." tienen un significado especial. el Símbolo "." significa ruta local, es decir, la ruta donde nos encontramos. y el ".." significa el directorio padre o anterior.

[editar] Rutas Absolutas

Por ejemplo, si quisiéramos copiar un fichero del directorio padre al directorio actual, una forma de hacerlo sería utilizando rutas absolutas.

$pwd
/home/juan/Escritorio
$cp /home/juan/fichero /home/juan/Escritorio

[editar] Rutas Relativas

Pero algo más sencillo es usar las rutas relativas:

$pwd
/home/juan/Escritorio
$cp ../fichero .

Eso copiaría el fichero "fichero" del directorio "/home/juan" al directorio "/home/juan/Escritorio".

[editar] Enlaces Simbólicos

[editar] Scripts

Los scripts, llamados también guiones, son secuencias de órdenes en un fichero. Se utilizan para automatizar tareas rutinarias. Por ejemplo, si todos los días cuando encendemos nuestro ordenador realizamos las mismas tareas, podemos hacer un guión o script que lo haga por nosotros.

Por ejemplo, si deseamos lanzar una copia a un dispositivo externo todos los días, haríamos algo así:

#!/bin/bash
#La línea anterior indica el intérprete de comandos a utilizar. No es lo mismo bash que sh.
#Las líneas que empiezan por "#" son comentarios

echo "Montando Tu unidad Externa"
mount /dev/sdd1 /media/unidad_externa

echo "Copiando Ficheros de tu home a /media/unidad_externa"
cp -vr /home/pedro/* /media/unidad_externa

echo "Copiado, desmontando unidad"

umount /dev/sdd1

El script anterior necesitaría permisos de root. Imaginemos que el script se llama backup.sh. Para lanzarlo necesitaría permisos de ejecución ( ver permisos); valdría con escribir: "./backup.sh"

[editar] Variables

Las variables son espacios de memoria en los que podremos almacenar datos. Dentro de un script, para crear una variable simplemente escribiremos su nombre seguido de un igual (y si somos elegantes le asignaremos un valor inicial, aunque no es imperativo)

Por ejemplo:


#!/bin/bash
#Se declaran las variables
variable1=hola
variable2=usuario
#Se sacan por pantalla
echo $variable1 $variable2

Produciría la siguiente salida:

 hola usuario 

Para recuperar el valor de una variable, escribiremos "$" seguido del nombre de la variable. Cabe recordar que en ningún proceso de asignación debe preceder el "$" al nombre de la variable.

[editar] Asignación de Valores

De nada sirve una variable si no podemos asignarle valores variables ¿no? La asignación de valores se hace igual de simple. variable=valor. "valor" puede ser un número entero (es importante, porque bash sólo soporta números enteros). También podremos asignarles resultados de operaciones y el retorno de los comandos.

[editar] Asignación de la Salida de Comandos

Muchas veces desearemos asignar la salida de un comando a una variable, por ejemplo, para obtener el usuario que ejecuta el script. El comando "whoami" nos devuelve el nombre del usuario.

 
#!/bin/bash

usuario=$(whoami)
echo "hola $usuario"

Si este script lo utilizara el usuario "pedro" la salida por pantalla sería:

 hola pedro 

[editar] Expansión de Variables

Podemos obtener más datos sobre las variables, por ejemplo, cuántos caracteres tiene una variable:

  • ${v} Idéntico a $v. Se utiliza en los casos de ambigüedad
  • ${#v} Número de caracteres de la cadena que contiene v
  • ${#v[*]} Número de elementos del vector v (Después Explicamos lo del vector)
  • ${v­c} Si v ha sido definida su valor, en otro caso retorna c
  • ${v=c} Si v ha sido definida su valor, en otro caso le asigna ahora el valor c
  • ${v+c} Si v ha sido definida c, en otro caso la cadena vacía

[editar] Arrays o Vectores

En programación, un vector, array, arreglo o alineación es un conjunto o agrupación de variables del mismo tipo cuyo acceso se realiza por índices. Desde el punto de vista del programa, un arreglo (matriz, array o vector) es una zona de almacenamiento contiguo, que contiene una serie de elementos del mismo tipo. La única limitación en este caso es que el índice de los mismos debe estar entre 0 y 511, por lo que sólo son posibles vectores de hasta 512 componentes.

Para crear un vector basta con asignar un valor a uno de sus componentes. Los restantes se irán creando de forma dinámica conforme se vayan necesitando:

#!/bin/bash
# Script de creación de un vector.

archivos[0]=carta.txt
archivos[1]=informe.txt
archivos[2]=membrete.txt

echo ${archivos[0]}
echo ${archivos[1]}
echo ${archivos[2]}
echo "Tengo ${#archivos[*]} Archivos por hacer"
echo "Archivos por hacer: ${archivos[*]}"

El script generaría esta salida:


carta.txt
informe.txt
membrete.txt
Tengo 3 Archivos por hacer
Archivos por hacer: carta.txt informe.txt membrete.txt


[editar] Operadores Aritméticos

Bash permite el uso de los operadores aritméticos comunes, pero tiene una limitación importante, sólo soporta números enteros, cualquier valor numérico con decimales es truncado a entero.

La forma común de calcular es:

let "expresión"

 let res=1+3 

No se puede usar esta notación en las operaciones que aparecen los operadores *, < o >, puesto que estos caracteres tienen un significado especial para bash. Podemos evitar que shell los tome como caracteres especiales anidando la expresión dentro de dos paréntesis, de esta forma:

 (( res= 1 + 3 )) 

Lo que hace que en la práctica sólo se emplee ésta última notación.

Dentro de los paréntesis podemos llamar a las variables por su nombre con o sin "$".

[editar] Suma

 
#!/bin/bash
echo " S U M A R "
echo -e "Primer Operador:\c"
read A
echo -e "Segundo Operador:\c"
read B
((RES=A+B))
echo "Resultado: $RES"

[editar] Resta

 
#!/bin/bash
echo " R E S T A R "
echo -e "Primer Operador:\c"
read A
echo -e "Segundo Operador:\c"
read B
((RES=A-B))
echo "Resultado: $RES"

[editar] Multiplicación

#!/bin/bash
echo " M U L T I P L I C A R  "
echo -e "Primer Operador:\c"
read A
echo -e "Segundo Operador:\c"
read B
((RES=A*B))
echo "Resultado: $RES"

[editar] División

#!/bin/bash
echo " D I V I D I R  "
echo -e "Primer Operador:\c"
read A
echo -e "Segundo Operador:\c"
read B
((RES=A/B))
echo "Resultado: $RES"

[editar] Módulo

#!/bin/bash
echo " R E S T O  "
echo -e "Primer Operador:\c"
read A
echo -e "Segundo Operador:\c"
read B
((RES=A%B))
echo "Resultado: $RES"

[editar] Estructuras de Control

[editar] Evaluación If-Then


#!/bin/bash

echo "Introduce tu Edad"
read edad

if [[ $edad -gt 18 ]]
then
    echo "Eres Mayor de Edad"
else
    echo -e "Eres Menor de Edad\c"
    if test  $edad -lt 18  -a  $edad -gt 13 
    then
        echo " y estás en plena edad del pavo.. brrrlll"
    fi
fi


[editar] Introducción a Test

[editar] Bucles

[editar] While

[editar] For

[editar] Until

[editar] Funciones

[editar] Véase También y Fuentes

Herramientas personales