You are on page 1of 38

rogramacin de scripts en Bash

Tabla de contenidos

1 Introduccin 2 Variables 3 Comillas o 3.1 Escape ( \ ) o 3.2 Comillas dobles ( " " ) o 3.3 Comillas simples ( ' ' ) o 3.4 Comilla invertida ( ` ` ) 4 Control de flujo o 4.1 "if" o 4.2 "case" 5 Ciclos o 5.1 for o 5.2 while o 5.3 until 6 Argumentos 7 Funciones o 7.1 Uso o 7.2 Valores de retorno o 7.3 Variables locales a la funcin 8 Operaciones Aritmticas o 8.1 Uso o 8.2 bc 8.2.1 Variables 8.2.2 Cambios en la base numrica 8.2.3 Otras operaciones matemticas 9 Operaciones lgicas y de comparacin o 9.1 test 10 Interaccin con el usuario o 10.1 read o 10.2 dialog o 10.3 Ejercicio 1 10.3.1 Resolucin o 10.4 Ejercicio 2 10.4.1 Resolucin o 10.5 Ejercicio 3 10.5.1 Resolucin 1 10.5.2 Resolucin 2 (backup por SAMBA)

Introduccin
Linux, as como la mayora 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. Un shell script es bsicamente un programa que llama a otros programas, con la posibilidad de hacer algun tipo de procesamiento propio (como control de flujo, operaciones matemticas simples, etc). Por lo tanto la forma de crear un shell script es hacer un archivo con nuestro ya querido vi: vi holam Luego lo llenamos con las instrucciones que deseamos. Por ejemplo: #!/bin/bash echo "Hola mundo!" # Esto es por costumbre utilizado como ejemplo del primer programa. # Se dice que trae suerte! Luego le damos permisos de ejecucin a ese archivo: chmod +x holam Y de esta manera ya tendremos listo un shell script que se ejecuta de la siguiente forma: ./holam Debemos destacar la primera linea de nuestro script bash: #!/bin/bash esta lnea le indica al sistema que el script ser interpretado por el programa que se encuentra a continuacin de #!, en este caso, /bin/bash Las ltimas dos lneas son comentarios # Esto es por costumbre utilizado como ejemplo del primer programa.

# Se dice que trae suerte! Los comentarios comienzan con # y se extienden hasta el final de la lnea. Es muy til ir comentando el cdigo que uno escribe, para recordar qu realizan ciertas funciones o algoritmos, y otra persona pueda comprender el funcionamiento de nuestro script.

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: [jose@xtech experto]$ MIVARIABLE=4 Por convencin, los nombres de las variables se usan en maysculas, aunque no es obligatorio. Para usar el contenido de la variable, dentro de un script, se usa el operador $. Por ejemplo: [jose@xtech experto]$ echo $MIVARIABLE 4 [jose@xtech experto]$ Para utilizar el contenido de una variable, seguida de un texto, debemos usar las llaves {} Consideremos este ejemplo: ARCHIVO="/tmp/ej" mv $ARCHIVO $ARCHIVO-bak En este caso, bash interpretara a $ARCHIVO y $ARCHIVO-bak como dos variables distintas, para evitar esto debemos reescribirlo de esta manera: ARCHIVO="/tmp/ej" mv $ARCHIVO ${ARCHIVO}-bak

Comillas
En el shell, el espacio, o el tab, son separadores. Es decir, que cuando al shell le indicamos

ls -l hola que tal Lo interpreta como que le pedimos que nos de informacin sobre tres archivos, llamados: hola, que, y tal. Si en realidad, lo que queramos, era informacin 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.

Escape ( \ )
Hay un caracter de escape, que indica al shell que el siguiente carcter no es especial. Y es la barra invertida. Por lo tanto, podramos obtener la informacin del archivo "hola que tal" de la siguiente forma: ls -l hola\ que\ tal Los espacios no son especiales, no son separadores, y "hola que tal" es una sola palabra. Algunos caracteres especiales ms:
\ @ ! | < > [ ] { } ( ) ? * $ ' ^ ` " # & ;

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 carcter especial lo que sigue y la segunda como ese carcter que queremos inclur. Esto es muy comn en casos como: cd algn\ directorio\ con\ espacios

Comillas dobles ( " " )


Las comillas dobles hacen que los espacios entre las comillas no sean especiales. Por lo tanto, podramos haber utilizado: ls -l "hola que tal" Todos los otros carcteres siguen siendo especiales.

Comillas simples ( ' ' )


Las comillas simples logran que ningn caracter (salvo la comilla simple misma) sea especial. Por ejemplo, si quisieramos crear un archivo que se llame *@$&, lo debemos hacer rodendolo de comillas simples:

touch '*@$&' Si queremos poner una comilla simple, debemos "escaparla". Para crear un archivo llamado que'tal, deberamos hacerlo as: touch 'que\'tal' Ya que si no lo hacemos, la segunda comilla "cierra" la primera!

Comilla invertida ( ` ` )
Las comillas invertidas son ms 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 ms sencillo sea un ejemplo: [jose@xtech experto]$ ls experto.aux experto.dvi experto.log #experto.lyx# experto.lyx experto.lyx~ experto.pdf experto.ps experto.tex experto.toc

[jose@xtech experto]$ V=`ls` [jose@xtech experto]$ echo $V experto.aux experto.dvi experto.log #experto.lyx# experto.lyx experto.lyx~ experto.pdf experto.ps experto.tex experto.toc

[jose@xtech experto]$ El uso ms frecuente de las comillas invertidas es poder asignar el "resultado" de un comando a una variable.

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, segn las condiciones de las variables a interpretar.

"if"

El"if" es un proposicin de control que verifica si es verdadera o falsa una condicin. Sintaxis: if comando-condicin then Comandos si la condicin es verdadera else Comandos si la condicin es falsa fi Es importante que la ubicacin de las lineas se mantenga, ya que las proposiciones if/then/else/fi se controlan lnea por lnea. La parte else es opcional. En caso de querer hacer todo el control en una sola lnea, las proposiciones debern estar separadas por un punto y coma (;). Los comandos que estn debajo del then se ejecutarn si la condicin dio verdadera. Esto quiere decir que el valor de retorno de la condicin fue 0 (cero). En caso contrario se ejecutarn los comandos que le siguen al else, si es que se utiliz esta proposicin. En la condicin se puede poner un comando, donde la ejecucin del mismo (su valor de retorno) definir qu comandos (de qu proposicin) se ejecutarn. Si se verifica una condicin, se debern utilizar los corchetes para mayor comprensin. Ejemplos: (utilizando comandos) if ps ax | grep httpd | grep -v grep then echo "El web server est funcionando" else echo "El web server NO esta funcionando" fi

(utilizando condiciones) if [ -w /etc/passwd ] then echo "Tengo permisos de escritura en el archivo /etc/passwd" else echo "NO tengo permisos de escritura en el archivo /etc/passwd" fi Puede suceder que tengamos que testear mas de una condicion, para esto, podemos utilizar la siguiente estructura: if condicin1 then Comando1 Comando2 elif condicin2 then Comando1 Comando2 else Comando-por-defecto verdadera fi Esta es una manera de abreviar varias estructuras if - then - else - if en una sola, pudiendo utilizarse ms de dos condiciones. #Ninguna de las condiciones anteriores es

La estructura de control if, es muy utilizada con test, que no es ms que una operacin de comparacin, en las condiciones que se requieran.

"case"

El "case" es una proposicin que puede analizar y validar varios casos (opciones) del valor de una variable. Sintaxis case variable in patrn | patrn) Comando; Comando; Comando;;

patrn | patrn) Comando; Comando; Comando;; *) Comandos si ningn otro valor fue igualado;; esac El case es raramente usado, pero es muy eficiente en algunos casos. Ejemplos: case $mes in ene*|Ene*) echo "Mes de Enero";;

feb*|Feb*) echo "Mes de Febrero";; mar*|Mar*) echo "Mes de Marzo";; *) echo "Algn otro mes!";; esac

Ciclos
Los ciclos contienen secciones del programa que se repetirn una determinada cantidad de veces o hasta que alguna condicin cambie.

for
El for debe ser el ciclo ms utilizado, es muy prctico cuando se trabaja con shell scripts. A diferencia de los lenguajes de programacin ms comunes, un ciclo for dentro de un shell script realiza una accin dada sobre cada uno de los elementos de una lista, y no sobre una variable que se va incrementando en cada ciclo. 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: for i in lista de palabras do cuerpo del ciclo, $i tiene el valor de elementos sucesivos de la lista done Ejemplos: for i in `ls -1 /tmp`

do echo $i rm -i $i done 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 (opcin -i del comando rm).

while
Este ciclo utiliza la condicin de terminacin de un comando (valor de retorno) para controlar la ejecucin de los comando dentro del ciclo. Termina la ejecucin del ciclo, cuando el comando devuelve falso (algo diferente a 0). Sintaxis: while comando do cuerpo del ciclo ejecutado a condicin 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).

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: until comando do cuerpo del ciclo ejecutado a condicin de que el comando devuelva falso. done Ejemplo: until who | grep daniel do sleep 60 done 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).

Argumentos
Los argumentos sirven para pasarle a un programa o una funcin valores desde la lnea de comando.

Variable $# $* $$? $$

Descripcin Nmero de argumentos Todos los argumentos del shell Opciones suministradas al shell Valor de retorno del ltimo comando ejecutado Identificacin del PID (nmero de proceso)

$0 $1 $n
Ejemplo: #!/bin/sh #

Nombre del script Primer argumento Argumento "n"

# Programa que recibe argumentos y los imprime por pantalla # echo "\$*: $*" echo "\$#: $#" echo "\$0: $0" echo "\$1: $1" echo "\$2: $2" Notas sobre el ejemplo: En la lneas de impresin (echo), para imprimir el smbolo "$" (pesos) se tiene que anteponer el smbolo "\" (contra barra), sino el shell lo va a interpretar como una variable, y si esta existe imprimir su contenido.

Funciones
Las funciones son un recurso esencial para la buena programacin, permiten escribir una sola vez un pedazo de cdigo que se repita varias veces en el script, y as, minimizar el margen de error y tambin la cantidad de lneas en el programa. Para utilizarlas simplemente se hace un llamado a la funcin. 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 estarn disponibles. Ejemplo: #

# Cargando las funciones en memoria # . /home/jose/funciones/funciones-arch.sh

Uso
La sintaxis para utilizar funciones es muy sencilla y no agrega mayor dificultad. El modo de uso se remite a definir la funcin especificando el nombre y parentesis que abren y cierran. Todos los comandos que involucran la funcin se encierran con llaves. Ejemplo: (archivo: lib/arch.sh) # # Funciones para manipulacin de archivos # borrar () { arch=$1 if [ -z "$arch" ] then echo "No se recibi ningn 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 Notas sobre el ejemplo: (archivo: lib/arch.sh) Esta funcin 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. (archivo: principal.sh) El programa hace un ciclo con los archivos de un directorio especfico (for i in $dir/*) y se los pasa como argumento a la funcin borrar.

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 funcin. Desafortunadamente no es posible asignar el valor retornado en una sola lnea, 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: ($?)"

Variables locales a la funcin


Existe la posibilidad de utilizar variables locales a la funcin, esto significa que la variable solamente va a existir durante la ejecucin de la funcin. Para crear una variable local a la funcin se utilizar el operador "local <nombre_de_variable>". Ejemplo: func () { local x x=$1 echo "Dentro de la funcin \$x vale ($x)" }

echo "Antes de ejecutar la funcin \$x vale ($x)" func HOLA!! echo "Despus de ejecutar la funcin \$x vale ($x)"

Operaciones Aritmticas
Existen varias formas de calcular valores dentro de un shell script. Tradicionalmente, estos clculos se hicieron con programas externos, esto generaba un retardo inmenso en la ejecucin del shell script.

Hoy los nuevos intrpretes traen la posibilidad de hacer clculos internamente. Para esto se utiliza una sintaxis especial, y es muy importante que los valores de las variables que utilicen para hacer estos clculos sean nmeros nicamente.

Uso
La sintaxis para hacer operaciones aritmticas es la siguiente: $[<expresin>] Las operaciones que se pueden realizar son: suma $((1+1)) resta $((2-1)) multiplicacin $((2*2)) divisin $((2/2]) otras como suma de bits, sacar el mdulo, evaluacin de igualdad, etc.

Ejemplo: #!/bin/sh # # Operaciones aritmticas # x=2 tot=$[$x+1] echo "tot: ($tot)"

bc
A veces hay conjuntos de herramientas que nos suenan y no las aprovechamos al mximo. Quizs una de esas seabc. La calculadora que podemos usar desde la consola, que aparte de sumar y restar puede realizar clculos con una precisin de varios decimales, cambiar de base numrica 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'. Ac espera que trabajemos desde la entrada estndar, por ejemplo: 4+8 12 scale=3 27/68 .397 halt Sabe sumar (y restar, dividir, multiplicar; sin problemas).

Variables
Si queremos que trabaje con decimales, asignaremos un valor a la variable scale. scale=3 2/3 .666 Tambin podemos hacer: scale=9;2/3 .666666666 Al ser scale una variable ms, podemos consultar su valor sencillamente escribindola: scale

3 #o tambin usando print print scale 3 Otro ejemplo de usos de variables podra ser: scale=5 variable=3 100/variable 33.33333 Hay una variable especial llamada last, almacena el resultado de la ltima operacin: 100/3 33.33333 last*2 66.66666

Cambios en la base numrica


Hay dos variables especiales que son ibase y obase que definen la base de entrada y de salida de los nmeros, respectivamente. Si queremos calcular el nmero 5 en base 10 (decimal) a base 2 (binario), haremos: obase=2 5 101 Si queremos pasar de binario a hexadecimal: obase=16

ibase=2 11111111 FF

Otras operaciones matemticas


Podemos usar tambin sqrt, 2^3, etc. Si queremos tener operaciones matemticas ms complejas tenemos que ejecutar el bc -l para cargar la librera matemtica: s (x) c (x) a (x) l (x) e (x) Seno de x, en radianes Coseno de x Arcotangente de x Logaritmo neperiano de x Exponencial de x

j (n,x) Funcin de Bessel de un entero de orden n de x

Aplicacin en un script
Si queremos pedir que el usuario teclee algo por teclado, la funcin es read. Por tanto. variable=read() Esperar que tecleemos algo y lo pondr en variable. Tambin podemos hacer un programa en un archivo y ejecutarlo: print "Hola\n" print "Escribe tu ao de nacimiento\n" nacimiento=read() edad=2003-nacimiento print edad print " aos\n"

halt Y lo ejecutamos con bc -q archivo.bc (el -q es para que no muestre el Copyright) estaremos preguntando el ao nacimiento y mostrando la edad. Ahora un ejemplo definiendo una funcin, pasndole un parmetro y retornndolo. Veremos que es totalmente intuitivo: define mayor_edad(edad) { if (edad < 18) return 0 if (edad >= 18) return 1 }

print "D tus edad\n" edad=read()

if (mayor_edad(edad)) print "Eres mayor de edad\n"

if (!mayor_edad(edad)) print "Eres menor de edad\n"

halt Un ltimo ejemplo, con un for:

for (i=0;i<10;i++) { print i,"\n" } halt Observemos en la , para separar la variable y la cadena en el print. Para salir halt Otra forma muy til en los scripts es: resultado=$(echo "scale=3;2/3" | bc)

Operaciones lgicas y de comparacin


test
Para usar if podemos usar un nuevo elemento, los corchetes que evalan las condiciones, esto esta basado directamente en test. Y ste nos sirve para comparar variables. Por ejemplo: -lt Menor que -eq Igual que -gt Mayor que -le Menor o igual que -ge Mayor o igual que -ne No coinciden -a Operador lgico and -o Operador lgico or != Distinto Sintxis: exp1 operador exp2

Uso de test: test 8 -lt 9 Usando variables en test: 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 ] O (si $HACER es distinto de 1): [ $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. Cuando necesitamos utilizar la negacin, debemos usar el signo ! Ejemplo: if [ ! -x $FILE ] then

chmod +x $FILE else echo "$FILE es ejecutable" fi Si el archivo no es ejecutable, le damos permiso de ejecucin, sino, imprimimos el mensaje por pantalla

Interaccin con el usuario


Muchos programas no seran factibles si no tuviramos algn mecanismo para interactuar con el usuario, ya sea un simple "Presione Enter para continuar" o algo ms sofisticado, como una lista de opciones de las cuales escoger. Cuando el programa est escrito en shell, es muy sencillo lograr ambas cosas, utilizando dos herramientas: read y dialog.

read
El comando read es muy sencillo. Le indicamos que pida el valor de una variable al usuario, el usuario escribe una lnea de texto (es decir, cualquier cosa hasta que presione enter), y la variable toma el valor que el usuario ingres. Ejemplo: [jose@xtech experto]$ read V Hola mundo! [jose@xtech experto]$ echo $V Hola mundo! [jose@xtech experto]$ Si deseamos slo un "Presione enter para continuar" es exactamente lo mismo, simplemente ignoramos el valor de la variable :-)

dialog
Dialog es un programa que crea una "interfaz" para que el usuario interacte, y entrega por la salida estndar el resultado de la accin del usuario, variable $?.

Puede producir preguntas si/no, men, lista, calendario, barra de progreso, dilogo de contrasea, cuadro de texto, cuadro de mensaje, etc. Recomendamos leer la documentacin 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 grfica, por X11, para el dilogo. Sintaxis: dialog <opciones> { --opciones especficas } Ejemplo 1 (Dilogo "yesno"): [jose@xtech experto]$ dialog --yesno "Desea salir?" 6 30 Produce esto:

Los argumentos 6 y 30 corresponden a la altura y ancho, respectivamente, del cuadro. En su versin X11, sera: [jose@xtech experto]$ gdialog --yesno "Desea salir?" Y se vera as:

Ejemplo 2 (Dilogo "inputbox"): [jose@xtech experto]$ dialog --inputbox "Ingrese su nombre" 9 30 Juan Note que agregamos el argumento "Juan", que ser el valor predeterminado para este inputbox:

O tambin: [jose@xtech experto]$ gdialog --inputbox "Ingrese su nombre" 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 sintxis: VARIABLE=`gdialog --inputbox "Ingrese su nombre" 2>&1` Note que pusimos todo el comando entre comillas invertidas para que reemplace el mismo por el valor que el comando representa despus 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 estndar. Ejemplo 3 (Dilogo "msgbox"): [jose@xtech experto]$ dialog --msgbox "Esto es muy bueno para mensajes" 5 50 Produce esto:

O tambin: [jose@xtech experto]$ gdialog --msgbox "Esto es muy bueno para mostrar mensajes largos o de advertencia" Produce esto:

Ejercicio 1
Descompresin Automtica de Archivos

Se debe ingresar el nombre de un archivo por la lnea de comandos, y el script debe reconocer con qu herramienta est comprimida y proceder a descomprimirlo. Si el archivo no est comprimido, el script deber devolver un mensaje de error. TIP: utilizar el programa "file" Resolucin

#!/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 ;; *) echo "No esta comprimido" ;; esac

exit 0

Ejercicio 2
Listado del Directorio Home

Se debe realizar un listado recursivo del directorio personal, y guardar la informacin en un archivo. Luego debe comprimirse ese archivo y preguntar al usuario en qu directorio quiere guardar el archivo comprimido. Resolucin #/bin/bash # Listado del Home

# Iniciamos la variable. rm -rf ./listado.txt touch ./listado.txt ARCHIVO="./listado.txt"

# Listamos los archivos y los guardamos en el archivo ls -1 ~ >> $ARCHIVO cat $ARCHIVO

# Comprimimos el archivo como tar.gz tar -czvf listado.tar.gz $ARCHIVO COMPRIMIDO=listado.tar.gz

# Preguntamos al usuario donde desea guardar ese archivo. echo "Por favor, ingrese el PATH donde desea almacenar $COMPRIMIDO." read PATH echo $PATH echo $COMPRIMIDO

# Guardamos el archivo donde se indico. mv $COMPRIMIDO $PATH

# Se imprime donde se guardo el archivo. echo "Se guardo $COMPRIMIDO en $PATH"

exit 0

Ejercicio 3
Ralizacin 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. Resolucin 1 #!/bin/bash # # Se limpia la pantalla para tener una salida ms prolija.

clear

# Se procede a desmontar el CD por si alguien olvid hacerlo.

echo "*** Desmontando CDROM ***" umount /mnt/cdrom

# Se limpia nuevamente la pantalla.

clear

# Se anuncia al usuario que se comienza a borrar el CD.

echo "*** Borrando CDROM ***" echo "Por favor, sea paciente. Este proceso puede demorar hasta 20 minutos." echo " "

# Se utiliza el programa cdrecord para borrar el CD.

cdrecord -v -dev=ATAPI:0,0,0 -blank=fast > /dev/null

# Se borra nuevamente la pantalla.

clear

# Se anuncia por pantalla el comienzo del backup del directorio.

echo "*** Comenzando el backup ***"

# Se crea un directorio temporal para almacenar el backup.

mkdir /tmp/backup02

# Se limpia la pantalla.

clear

# Se anuncia por pantalla que se comienza a salvar el directorio personal.

echo "*** Backup del directorio Personal ***"

# Se comprime el directorio personal.

tar -cvzf /tmp/backuo02/home.tar.gz ~/ > /dev/null

# Se limpia la pantalla.

clear

# Se anuncia por pantalla que se realiza el ISO a grabar.

echo "*** Creando archivo de Resguardo ***"

# Se crea la imgen ISO.

mkisofs -r -J -o backup02.iso backup02/ > /dev/null

# Se borra la pantalla.

clear

# Se anuncia el comiezo de la grabacin del CD.

echo "*** Comenzando la grabacion del CDROM ***" echo "Por favor, sea paciente. Este proceso puede tardar hasta 30 minutos." echo " "

# Se comienza a grabar el CD con cdrecord.

cdrecord -v speed=4 dev=ATAPI:0,0,0 -data backup02.iso > /dev/null

# Se anuncia en pantalla el borrado de los archivos auxiliares.

echo "*** Limpiando archivos extras ***" rm -Rf /tmp/backup02.iso > /dev/null rm -Rf /tmp/backup02 > /dev/null

# Se desmonta el CD.

umount /mnt/cdrom

# Se limpia la pantalla.

clear

# Se anuncia que el proceso finaliz con xito.

echo "*** Se realizo el backup con exito ***"

exit 0 Resolucin 2 (backup por SAMBA) #!/bin/bash # # Se limpia la pantalla para tener una salida ms prolija.

clear

# Se procede a desmontar el CD por si alguien olvid hacerlo.

echo "*** Desmontando CDROM ***" umount /mnt/cdrom

# Se limpia nuevamente la pantalla.

clear

# Se monta por red el CD de un cliente windows.

smbmount //pc3/d /mnt/cdrom -o username=usuario,password=contrasea

# Se borra nuevamente la pantalla.

clear

# Se anuncia por pantalla el comienzo del backup del directorio.

echo "*** Backup del directorio Personal ***"

# Se comprime el directorio personal.

tar -cvzf /mnt/cdrom/home.tar.gz ~/ > /dev/null

# Se desmonta el CD.

umount /mnt/cdrom

# Se limpia la pantalla.

clear

# Se anuncia que el proceso finaliz con xito.

echo "*** Se realizo el backup con exito ***"

exit 0

You might also like