Documentos de Académico
Documentos de Profesional
Documentos de Cultura
istas
rtículo
iscusión
ditar
istorial
erramientas personales
Registrarse/Entrar
Programación de scripts en Bash
avegación
[editar]
Portada
Cambios recientes Tabla de contenidos
Ayuda [esconder]
1 Introducción
ursos
2 Variables
Administrador 1 3 Comillas
Administrador 2 3.1 Escape ( \ )
Linux en el escritorio 3.2 Comillas dobles ( " " )
Ofimática Bronce 3.3 Comillas simples ( ' ' )
Ofimática Plata 3.4 Comilla invertida ( ` ` )
Asterisk base 4 Control de flujo
Integración de 4.1 "if"
lataformas 4.1.1 Comparaciones de cadenas alfanuméricas
Clustering 4.1.2 Comparación de valores numéricos
Seguridad avanzado 4.1.3 Atributos que se pueden comprobar
4.1.4 Ejercicios: if
ecursos 4.2 "case"
4.2.1 Ejercicios: case
Material didáctico
5 Ciclos
5.1 for
uscar 5.1.1 Ejercicios: for
5.2 while
Ir 5.3 until
Buscar
6 Argumentos
7 Funciones
7.1 Uso
erramientas 7.2 Valores de retorno
Lo que enlaza aquí 7.3 Variables locales a la función
Seguimiento de enlaces 8 Operaciones Aritméticas
Subir archivo 8.1 Uso
Páginas especiales 8.2 bc
Versión para imprimir 8.2.1 Variables
8.2.2 Cambios en la base numérica
8.2.3 Otras operaciones matemáticas
9 Operaciones lógicas y de comparación
9.1 test
10 Interacción con el usuario
10.1 read
10.2 dialog
10.3 Ejercicio 1
10.3.1 Resolución
10.4 Ejercicio 2
10.4.1 Resolución
10.5 Ejercicio 3
10.5.1 Resolución 1
10.5.2 Resolución 2 (backup por SAMBA)
Introducción
Linux, así como la mayoría de los UNIX, utilizan shell scripts para realizar una infinidad de
tareas. Un shell script es un programa que se escribe con una sintaxis particular, en un
archivo de texto plano, para que sea interpretado por un shell, en este caso /bin/bash.
http://wiki.xtech.com.ar/index.php/Programación_de_scripts_en_Bash[27/11/2011 15:32:28]
Programación de scripts en Bash - XTech Capacitacion
Por lo tanto la forma de crear un shell script es hacer un archivo con nuestro ya querido
vi:
vi holam
#!/bin/bash
echo "Hola mundo!"
# Esto es por costumbre utilizado como ejemplo del primer programa.
# Se dice que trae suerte!
chmod +x holam
Y de esta manera ya tendremos listo un shell script que se ejecuta de la siguiente forma:
./holam
#!/bin/bash
esta línea le indica al sistema que el script será interpretado por el programa que se
encuentra a continuación de #!, en este caso, /bin/bash
Los comentarios comienzan con # y se extienden hasta el final de la línea. Es muy útil ir
comentando el código que uno escribe, para recordar qué realizan ciertas funciones o
algoritmos, y otra persona pueda comprender el funcionamiento de nuestro script.
[editar]
Variables
Las variables en un script BASH son simplemente identificadores, sin tipo. Para asignar un
valor a una variable, se utiliza el operador =, por ejemplo:
Para utilizar el contenido de una variable, seguida de un texto, debemos usar las llaves {}
ARCHIVO="/tmp/ej"
mv $ARCHIVO $ARCHIVO-bak
En este caso, bash interpretaría a $ARCHIVO y $ARCHIVO-bak como dos variables distintas,
para evitar esto debemos reescribirlo de esta manera:
ARCHIVO="/tmp/ej"
mv $ARCHIVO ${ARCHIVO} -bak
http://wiki.xtech.com.ar/index.php/Programación_de_scripts_en_Bash[27/11/2011 15:32:28]
Programación de scripts en Bash - XTech Capacitacion
[editar]
Comillas
En el shell, el espacio, o el tab, son separadores. Es decir, que cuando al shell le
indicamos
Lo interpreta como que le pedimos que nos de información sobre tres archivos, llamados:
hola, que, y tal.
Si en realidad, lo que queríamos, era información sobre un archivo llamado "hola que tal",
entonces hay varias maneras de indicarle al shell que los espacios entre esas palabras no
deben ser separadores.
[editar]
Escape ( \ )
Hay un caracter de escape, que indica al shell que el siguiente carácter no es especial. Y
es la barra invertida. Por lo tanto, podríamos obtener la información del archivo "hola que
tal" de la siguiente forma:
Los espacios no son especiales, no son separadores, y "hola que tal" es una sola palabra.
Por lo tanto, si queremos incluir la \ en alguna parte, entonces debemos ponerla 2 veces
(\\), la primera para decirle a BASH que no tome como carácter especial lo que sigue y la
segunda como ese carácter que queremos incluír. Esto es muy común en casos como:
[editar]
[editar]
touch '*@$&'
Si queremos poner una comilla simple, debemos "escaparla". Para crear un archivo llamado
que'tal, deberíamos hacerlo así:
touch 'que\'tal'
[editar]
Comilla invertida ( ` ` )
http://wiki.xtech.com.ar/index.php/Programación_de_scripts_en_Bash[27/11/2011 15:32:28]
Programación de scripts en Bash - XTech Capacitacion
Las comillas invertidas son más raras. Deben rodear un comando. Ese comando será
ejecutado, y lo que ese comando imprima reemplazará al contenido de las comillas
invertidas. Tal vez lo más sencillo sea un ejemplo:
[jose@xtech experto]$ ls
experto.aux experto.log experto.lyx experto.pdf experto.tex
experto.dvi #experto.lyx# experto.lyx~ experto.ps experto.toc
[editar]
Control de flujo
Esto refiere al cauce o flujo normal de los programas. No siempre hay un solo camino a
seguir y estas proposiciones permiten que el programa realice distintas tareas, según las
condiciones de las variables a interpretar.
[editar]
"if"
El"if" es un proposición de control que verifica si es verdadera o falsa una condición.
Sintaxis:
if comando-condición
then
Comandos si la condición es verdadera
else
Comandos si la condición es falsa
fi
Los comandos que estén debajo del then se ejecutarán si la condición dio verdadera. Esto
quiere decir que el valor de retorno de la condición fue 0 (cero). En caso contrario se
ejecutarán los comandos que le siguen al else, si es que se utilizó esta proposición.
En la condición se puede poner un comando, donde la ejecución del mismo (su valor de
retorno) definirá qué comandos (de qué proposición) se ejecutarán.
Si se verifica una condición, se deberán utilizar los corchetes para mayor comprensión.
Ejemplos:
(utilizando comandos)
El hecho de entregar algo como salida se toma como condición lógica verdadera.
(utilizando condiciones)
if [ -w /etc/passwd ]
then
http://wiki.xtech.com.ar/index.php/Programación_de_scripts_en_Bash[27/11/2011 15:32:28]
Programación de scripts en Bash - XTech Capacitacion
Puede suceder que tengamos que testear mas de una condicion, para esto, podemos
utilizar la siguiente estructura:
if condición1
then
Comando1
Comando2
elif condición2
then
Comando1
Comando2
else
Comando-por-defecto #Ninguna de las condiciones anteriores es verdadera
fi
Esta es una manera de abreviar varias estructuras if - then - else - if en una sola,
pudiendo utilizarse más de dos condiciones.
La estructura de control if, es muy utilizada con test , que no es más que una operación
de comparación, en las condiciones que se requieran.
[editar]
[editar]
[editar]
http://wiki.xtech.com.ar/index.php/Programación_de_scripts_en_Bash[27/11/2011 15:32:28]
Programación de scripts en Bash - XTech Capacitacion
[editar]
Ejercicios: if
Realizar un script que permita emita por pantalla la leyenda "Estás usando KDE",
"Estás usando Gnome" o "Estás usando algo que no es KDE o Gnome". Según
corresponda a cada caso. Se puede usar la presencia de kdm o gdm como prueba
de que corre el correspondiente administrador de escritorio.
[editar]
"case"
El "case" es una proposición que puede analizar y validar varios casos (opciones) del valor
de una variable.
Sintaxis
case variable in
patrón | patrón)
Comando;
Comando;
Comando;;
patrón | patrón)
Comando;
Comando;
Comando;;
*)
Comandos si ningún otro valor fue igualado;;
esac
Ejemplos:
case $mes in
ene*|Ene*)
echo "Mes de Enero";;
feb*|Feb*)
echo "Mes de Febrero";;
mar*|Mar*)
echo "Mes de Marzo";;
*)
echo "Algún otro mes!";;
esac
[editar]
Ejercicios: case
Realizar un script que nos permita tocar una tecla y detecte la zona del teclado
donde está la misma. Las zonas que usamos son: izquierda arriba, izquierda al
medio, izquierda abajo, derecha arriba, derecha al medio, derecha abajo y
tocaste cualquier cosa. Para ingresar la tecla usaremos el comando read.
[editar]
Ciclos
Los ciclos contienen secciones del programa que se repetirán una determinada cantidad de
veces o hasta que alguna condición cambie.
[editar]
for
http://wiki.xtech.com.ar/index.php/Programación_de_scripts_en_Bash[27/11/2011 15:32:28]
Programación de scripts en Bash - XTech Capacitacion
El for debe ser el ciclo más utilizado, es muy práctico cuando se trabaja con shell scripts.
La variable utilizada en el for (en este caso $i) es reemplazada por cada una de las
palabras de la lista, en cada ciclo del for.
Sintaxis:
Ejemplos:
En este ciclo, el comando ls -1 /tmp, generará una lista de todos los archivos que existen
en el directorio /tmp. Dentro del cuerpo del ciclo imprimimos el contenido de la variable
y luego preguntamos si se desea borrar ese archivo (opción -i del comando rm).
[editar]
Ejercicios: for
Realizar un script que permita ingresar un nombre de directorio y de como
resultado el nombre de cada archivo en él y una leyenda que diga "Directorio",
"Enlace" o "Archivo regular"; según corresponda.
[editar]
while
Este ciclo utiliza la condición de terminación de un comando (valor de retorno) para
controlar la ejecución de los comando dentro del ciclo. Termina la ejecución del ciclo,
cuando el comando devuelve falso (algo diferente a 0).
Sintaxis:
while comando
do
cuerpo del ciclo ejecutado a condición de
que el comando devuelva verdadero
done
Ejemplos:
while sleep 60
do
who | grep daniel
done
En este ejemplo, cada 60 segundos (definidos por el comando sleep 60), verificará si el
usuario daniel ha ingresado al equipo. En caso de que lo haya hecho, el listado del who
saldrá por pantalla (cada 60 segundos).
[editar]
until
Este ciclo se comporta de una manera muy similar al anterior, ya que define su control
dependiendo del comando que ejecuta (si éste da verdadero, se sigue ejecutando el ciclo).
Sintaxis:
http://wiki.xtech.com.ar/index.php/Programación_de_scripts_en_Bash[27/11/2011 15:32:28]
Programación de scripts en Bash - XTech Capacitacion
until comando
do
cuerpo del ciclo ejecutado a condición
de que el comando devuelva falso.
done
Ejemplo:
En este ejemplo, a diferencia del ejemplo del ciclo while, el ciclo ejecuta primero el
comando, de esta forma no es necesario esperar 60 segundos para saber si el usuario
daniel esta logueado en el equipo (si el usuario esta logueado, el ciclo termina).
[editar]
Argumentos
Los argumentos sirven para pasarle a un programa o una función valores desde la línea de
comando.
Variable Descripción
$# Número de argumentos
$* Todos los argumentos del shell
$- Opciones suministradas al shell
$? Valor de retorno del último comando ejecutado
$$ Identificación del PID (número de proceso)
$0 Nombre del script
$1 Primer argumento
$n Argumento "n"
Ejemplo:
#!/bin/sh
#
# Programa que recibe argumentos y los imprime por pantalla
#
echo "\$*: $*"
echo "\$#: $#"
echo "\$0: $0"
echo "\$1: $1"
echo "\$2: $2"
En la líneas de impresión (echo), para imprimir el símbolo "$" (pesos) se tiene que
anteponer el símbolo "\" (contra barra), sino el shell lo va a interpretar como una
variable, y si esta existe imprimirá su contenido.
[editar]
Funciones
Las funciones son un recurso esencial para la buena programación, permiten escribir una
sola vez un pedazo de código que se repita varias veces en el script, y así, minimizar el
margen de error y también la cantidad de líneas en el programa.
Para utilizarlas simplemente se hace un llamado a la función. Las funciones pueden estar
dentro del mismo shell script, o en un archivo aparte. Cuando se escriben las funciones en
un archivo aparte, es muy importante utilizar el comando "." (punto) para cargarlas en
memoria. Si no se cargan en memoria de esta manera, las funciones no estarán
disponibles.
http://wiki.xtech.com.ar/index.php/Programación_de_scripts_en_Bash[27/11/2011 15:32:28]
Programación de scripts en Bash - XTech Capacitacion
Ejemplo:
#
# Cargando las funciones en memoria
#
. /home/jose/funciones/funciones -arch.sh
[editar]
Uso
La sintaxis para utilizar funciones es muy sencilla y no agrega mayor dificultad. El modo de
uso se remite a definir la función especificando el nombre y parentesis que abren y
cierran. Todos los comandos que involucran la función se encierran con llaves.
Ejemplo:
(archivo: lib/arch.sh)
#
# Funciones para manipulación de archivos
#
borrar ()
{
arch=$1
if [ -z "$arch" ]
then
echo "No se recibió ningún archivo"
return 2
else
if [ -f "$arch" ]
then
if [ -w "$arch" ]
then
rm -i $arch
else
echo "No tengo permisos para borrar $arch"
fi
else
echo "$arch no es un archivo"
fi
fi
}
(archivo: principal.sh)
#!/bin/bash
#
# Programa ejemplo para el uso de funciones en shell script
#
#
# Cargo las funciones en memoria
#
. lib/arch.sh
dir=./
for i in $dir/*
do
borrar $i
done
(archivo: lib/arch.sh)
Esta función toma el archivo a borrar como argumento (arch=$1), verifica que se le haya
pasado un argumento realmente (if [ -z "$arch" ]), que un archivo pasado como argumento
sea regular (if [ -f "$arch" ]) y que tenga permisos de escritura. En todos los casos de
falsedad responde con un mensaje avisando el problema.
http://wiki.xtech.com.ar/index.php/Programación_de_scripts_en_Bash[27/11/2011 15:32:28]
Programación de scripts en Bash - XTech Capacitacion
(archivo: principal.sh)
El programa hace un ciclo con los archivos de un directorio específico (for i in $dir/*) y se
los pasa como argumento a la función borrar.
[editar]
Valores de retorno
Las funciones pueden devolver valores de error utilizando el comando "return <valor>". En
caso de que no se especifique un valor de retorno de esta forma, el valor retornado será
el que retorne el último comando ejecutado dentro de la función. Desafortunadamente no
es posible asignar el valor retornado en una sola línea, siempre es necesario utilizar la
variable especial "$?".
Ejemplo:
#!/bin/sh
func () {
return $1
}
func 0
echo "ret: ($?)"
func 1
echo "ret: ($?)"
func 2
echo "ret: ($?)"
func 3
echo "ret: ($?)"
[editar]
Ejemplo:
func () {
local x
x=$1
echo "Dentro de la función \$x vale ($x)"
}
[editar]
Operaciones Aritméticas
Existen varias formas de calcular valores dentro de un shell script. Tradicionalmente, estos
cálculos se hicieron con programas externos, esto generaba un retardo inmenso en la
ejecución del shell script.
Hoy los nuevos intérpretes traen la posibilidad de hacer cálculos internamente. Para esto
se utiliza una sintaxis especial, y es muy importante que los valores de las variables que
utilicen para hacer estos cálculos sean números únicamente.
[editar]
Uso
http://wiki.xtech.com.ar/index.php/Programación_de_scripts_en_Bash[27/11/2011 15:32:28]
Programación de scripts en Bash - XTech Capacitacion
$[<expresión>]
suma $((1+1))
resta $((2-1))
multiplicación $((2*2))
división $((2/2])
otras como suma de bits, sacar el módulo, evaluación de igualdad, etc.
Ejemplo:
#!/bin/sh
#
# Operaciones aritméticas
#
x=2
tot=$[$x+1]
echo "tot: ($tot)"
[editar]
bc
A veces hay conjuntos de herramientas que nos suenan y no las aprovechamos al máximo.
Quizás una de esas sea bc . La calculadora que podemos usar desde la consola, que aparte
de sumar y restar puede realizar cálculos con una precisión de varios decimales, cambiar
de base numérica o programarla, etc. veremos como...
Si ejecutamos bc veremos:
$ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
4+8
12
scale=3
27/68
.397
halt
[editar]
Variables
scale=3
2/3
.666
scale=9;2/3
.666666666
Al ser scale una variable más, podemos consultar su valor sencillamente escribiéndola:
scale
3
#o también usando print
print scale
http://wiki.xtech.com.ar/index.php/Programación_de_scripts_en_Bash[27/11/2011 15:32:28]
Programación de scripts en Bash - XTech Capacitacion
scale=5
variable=3
100/variable
33.33333
Hay una variable especial llamada last , almacena el resultado de la última operación:
100/3
33.33333
last*2
66.66666
[editar]
Hay dos variables especiales que son ibase y obase que definen la base de entrada y de
salida de los números, respectivamente.
obase=2
5
101
obase=16
ibase=2
11111111
FF
[editar]
Aplicación en un script
Si queremos pedir que el usuario teclee algo por teclado, la función es read . Por tanto.
variable=read()
print "Hola\n"
print "Escribe tu año de nacimiento\n"
nacimiento=read()
edad=2003-nacimiento
print edad
print " años\n"
halt
http://wiki.xtech.com.ar/index.php/Programación_de_scripts_en_Bash[27/11/2011 15:32:28]
Programación de scripts en Bash - XTech Capacitacion
define mayor_edad(edad) {
if (edad < 18)
return 0
if (edad >= 18)
return 1
}
if (mayor_edad(edad))
print "Eres mayor de edad\n"
if (!mayor_edad(edad))
print "Eres menor de edad\n"
halt
for (i=0;i<10;i++) {
print i,"\n"
}
halt
Para salir
halt
[editar]
[editar]
test
Para usar if podemos usar un nuevo elemento, los corchetes que evalúan las condiciones,
esto esta basado directamente en test. Y éste nos sirve para comparar variables.
Por ejemplo:
Sintáxis:
Uso de test:
http://wiki.xtech.com.ar/index.php/Programación_de_scripts_en_Bash[27/11/2011 15:32:28]
Programación de scripts en Bash - XTech Capacitacion
test 8 -lt 9
variable1=5
variable2=3
test $variable1 -gt $variable2
Otra forma muy útil de uso de test (si 3 es menor que 5):
[ 3 -lt 5 ]
[ $HACER != 1 ]
Ejemplo:
#!/bin/bash
variable1=5
variable2=3
[ $variable1 -lt $variable2 ]
echo $?
Aqui hemos evaluado dos variables para ver si la variable1 era menor que la variable2 y
para ver el resultado hemos acudido a la “variable de retorno”, que nos mostrara 0 o 1.
Ejemplo:
if [ ! -x $FILE ]
then
chmod +x $FILE
else
echo "$FILE es ejecutable"
fi
[editar]
Cuando el programa está escrito en shell, es muy sencillo lograr ambas cosas, utilizando
dos herramientas: read y dialog.
[editar]
read
El comando read es muy sencillo. Le indicamos que pida el valor de una variable al
usuario, el usuario escribe una línea de texto (es decir, cualquier cosa hasta que presione
enter), y la variable toma el valor que el usuario ingresó.
Ejemplo:
http://wiki.xtech.com.ar/index.php/Programación_de_scripts_en_Bash[27/11/2011 15:32:28]
Programación de scripts en Bash - XTech Capacitacion
[editar]
dialog
Dialog es un programa que crea una "interfaz" para que el usuario interactúe, y entrega
por la salida estándar el resultado de la acción del usuario, variable $?.
Puede producir preguntas si/no, menú, lista, calendario, barra de progreso, diálogo de
contraseña, cuadro de texto, cuadro de mensaje, etc. Recomendamos leer la
documentación del manual (man dialog) o ejecutar
dialog --help
Aparte del programa "dialog", que produce una salida por consola, puede ser que tenga en
su sistema un programa "gdialog", Xdialog o "dldialog" (dependiendo del Linux que utilice),
que son lo mismo, solo que abren una ventana gráfica, por X11, para el diálogo.
Sintaxis:
Produce esto:
Y se vería así:
Note que agregamos el argumento "Juan", que será el valor predeterminado para este
inputbox:
http://wiki.xtech.com.ar/index.php/Programación_de_scripts_en_Bash[27/11/2011 15:32:28]
Programación de scripts en Bash - XTech Capacitacion
O también:
Produce esto:
El caso del "inputbox" suele tener aparejado la necesidad de asignar ese valor ingresado a
una variable. Para hacer eso tendremos que usar la siguiente sintáxis:
Note que pusimos todo el comando entre comillas invertidas para que reemplace el mismo
por el valor que el comando representa después de ejecutarse.
El 2>&1 es un truco que permite redirigir la STDERR hacia la STDOUT, ya que el valor
ingresado sale por la salida de error en vez de la estándar.
Produce esto:
http://wiki.xtech.com.ar/index.php/Programación_de_scripts_en_Bash[27/11/2011 15:32:28]
Programación de scripts en Bash - XTech Capacitacion
O también:
[jose@xtech experto]$ gdialog --msgbox "Esto es muy bueno para mostrar mensajes
largos o de advertencia"
Produce esto:
[editar]
Ejercicio 1
Descompresión Automática de Archivos
[editar]
Resolución
#!/bin/bash
#
# Decompresor inteligente
if [ -z $1 ]
then
#
# Si no hay argumento salimos del script con error "1!
#
echo "Debe ingresar el nombre del archivo"
exit 1
else
ARCHIVO=$1
fi
TIPO=`file $ARCHIVO`
#
# Verificamos el tipo de archivo
# Salida del comando file:
#
# Para GZIP
# file ejemplo.gz
# ejemplo.gz: gzip compressed data, was "ejemplo",from Unix
#
# Para BZIP2
# file ejemplo.bz2
# ejemplo.bz2: bzip2 compressed data, block size =900k
case $TIPO in
"${ARCHIVO}: bzip2"*)
bunzip2 $ARCHIVO
;;
"${ARCHIVO}: gzip"*)
gunzip $ARCHIVO
;;
http://wiki.xtech.com.ar/index.php/Programación_de_scripts_en_Bash[27/11/2011 15:32:28]
Programación de scripts en Bash - XTech Capacitacion
*)
echo "No esta comprimido"
;;
esac
exit 0
[editar]
Ejercicio 2
Listado del Directorio Home
[editar]
Resolución
#/bin/bash
# Listado del Home
# Iniciamos la variable.
rm -rf ./listado.txt
touch ./listado.txt
ARCHIVO="./listado.txt"
exit 0
[editar]
Ejercicio 3
Ralización de un backup diario
Se debe archivar como "tarball" (archivo .tar.gz) todos los archivos del directorio personal.
Esto se debe hacer grabando un CR regrabable.
[editar]
Resolución 1
#!/bin/bash
#
# Se limpia la pantalla para tener una salida más prolija.
http://wiki.xtech.com.ar/index.php/Programación_de_scripts_en_Bash[27/11/2011 15:32:28]
Programación de scripts en Bash - XTech Capacitacion
clear
clear
clear
mkdir /tmp/backup02
# Se limpia la pantalla.
clear
# Se limpia la pantalla.
clear
# Se borra la pantalla.
clear
http://wiki.xtech.com.ar/index.php/Programación_de_scripts_en_Bash[27/11/2011 15:32:28]
Programación de scripts en Bash - XTech Capacitacion
# Se desmonta el CD.
umount /mnt/cdrom
# Se limpia la pantalla.
clear
exit 0
[editar]
Resolución 2 (backup por SAMBA)
#!/bin/bash
#
# Se limpia la pantalla para tener una salida más prolija.
clear
clear
clear
# Se desmonta el CD.
umount /mnt/cdrom
# Se limpia la pantalla.
clear
http://wiki.xtech.com.ar/index.php/Programación_de_scripts_en_Bash[27/11/2011 15:32:28]
Programación de scripts en Bash - XTech Capacitacion
exit 0
Categoría: Material
Esta página fue modificada por última vez el 18:03 1 dic 2008. - Esta página ha sido visitada 52.178 veces. - Aviso
legal - Acerca de XTech Capacitacion
http://wiki.xtech.com.ar/index.php/Programación_de_scripts_en_Bash[27/11/2011 15:32:28]