programacion scripts bash

Upload: gustavoaragon2011

Post on 14-Jul-2015

164 views

Category:

Documents


2 download

DESCRIPTION

Programacion Scripts

TRANSCRIPT

Programacin de scripts en Bash - XTech Capacit...

http://wiki.xtech.com.ar/index.php?title=Programa...

Programacin de scripts en BashDe XTech Capacitacion

Tabla de contenidos1 Introduccin 2 Variables 3 Comillas 3.1 Escape ( \ ) 3.2 Comillas dobles ( " " ) 3.3 Comillas simples ( ' ' ) 3.4 Comilla invertida ( ` ` ) 4 Control de flujo 4.1 "if" 4.1.1 Comparaciones de cadenas alfanumricas 4.1.2 Comparacin de valores numricos 4.1.3 Atributos que se pueden comprobar 4.1.4 Ejercicios: if 4.2 "case" 4.2.1 Ejercicios: case 5 Ciclos 5.1 for 5.1.1 Ejercicios: for 5.2 while 5.3 until 6 Argumentos 7 Funciones 7.1 Uso 7.2 Valores de retorno 7.3 Variables locales a la funcin 8 Operaciones Aritmticas 8.1 Uso 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 9.1 test 10 Interaccin con el usuario 10.1 read 10.2 dialog

1 de 26

31/03/11 13:49

Programacin de scripts en Bash - XTech Capacit...

http://wiki.xtech.com.ar/index.php?title=Programa...

10.3 Ejercicio 1 10.3.1 Resolucin 10.4 Ejercicio 2 10.4.1 Resolucin 10.5 Ejercicio 3 10.5.1 Resolucin 1 10.5.2 Resolucin 2 (backup por SAMBA)

IntroduccinLinux, 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

2 de 26

31/03/11 13:49

Programacin de scripts en Bash - XTech Capacit...

http://wiki.xtech.com.ar/index.php?title=Programa...

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.

VariablesLas 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

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

3 de 26

31/03/11 13:49

Programacin de scripts en Bash - XTech Capacit...

http://wiki.xtech.com.ar/index.php?title=Programa...

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:

4 de 26

31/03/11 13:49

Programacin de scripts en Bash - XTech Capacit...

http://wiki.xtech.com.ar/index.php?title=Programa...

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.log experto.dvi #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.log experto.lyx experto.dvi #experto.lyx# experto.lyx~ [jose@xtech experto]$

experto.pdf experto.ps

experto.tex experto.toc

El uso ms frecuente de las comillas invertidas es poder asignar el "resultado" de un comando a una variable.

Control de flujoEsto 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 hacer5 de 26 31/03/11 13:49

Programacin de scripts en Bash - XTech Capacit...

http://wiki.xtech.com.ar/index.php?title=Programa...

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) El hecho de entregar algo como salida se toma como condicin lgica verdadera.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 fi

#Ninguna de las condiciones anteriores es verdadera

Esta es una manera de abreviar varias estructuras if - then - else - if en una sola, pudiendo utilizarse ms de dos condiciones. La estructura de control if, es muy utilizada con test, que no es ms que una operacin

6 de 26

31/03/11 13:49

Programacin de scripts en Bash - XTech Capacit...

http://wiki.xtech.com.ar/index.php?title=Programa...

de comparacin, en las condiciones que se requieran. Comparaciones de cadenas alfanumricasOperador Verdad (TRUE) si: -----------------------------------------cadena1 = cadena2 cadena1 es igual a cadena2 cadena1 != cadena2 cadena1 no es igual a cadena2 cadena1 < cadena2 cadena1 es menor que cadena2 cadena1 > cadena 2 cadena1 es mayor que cadena 2 -n cadena1 cadena1 no es igual al valor nulo (longitud mayorque 0) -z cadena1 cadena1 tiene un valor nulo (longitud 0)

Comparacin de valores numricosOperador Verdad (TRUE) si: -----------------------------------------x -lt y x menor que y x -le y x menor o igual que y x -eq y x igual que y x -ge y x mayor o igual que y x -gt y x mayor que y x -ne y x no igual que y

Atributos que se pueden comprobarOperador Verdad (TRUE) si: ------------------------------------------d archivo archivo existe y es un directorio -e archivo archivo existe -f archivo archivo existe y es un archivo regular (no un directorio, u otro tipo de archivo especial) -r -s -w -x archivo archivo archivo archivo Tienes permiso de lectura en archivo archivo existe y no esta vaco Tens permiso de escritura en archivo Tens permiso de ejecucin en archivo (o de bsqueda si es un directorio) Eres el dueo del archivo El grupo del archivo es igual al tuyo. archivo1 es mas reciente que archivo2 archivo1 es mas antiguo que archivo2

-O archivo -G archivo archivo1 -nt archivo2 archivo1 -ot archivo2

Ejercicios: if Realizar un script que permita emita por pantalla la leyenda "Ests usando KDE", "Ests usando Gnome" o "Ests usando algo que no es KDE o Gnome". Segn corresponda a cada caso. Se puede usar la presencia de kdm o gdm como prueba de que corre el correspondiente administrador de escritorio.

7 de 26

31/03/11 13:49

Programacin de scripts en Bash - XTech Capacit...

http://wiki.xtech.com.ar/index.php?title=Programa...

"case"El "case" es una proposicin que puede analizar y validar varios casos (opciones) del valor de una variable. Sintaxiscase 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

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.

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

forEl for debe ser el ciclo ms utilizado, es muy prctico cuando se trabaja con shell scripts.

8 de 26

31/03/11 13:49

Programacin de scripts en Bash - XTech Capacit...

http://wiki.xtech.com.ar/index.php?title=Programa...

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). 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"; segn corresponda.

whileEste 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:

9 de 26

31/03/11 13:49

Programacin de scripts en Bash - XTech Capacit...

http://wiki.xtech.com.ar/index.php?title=Programa...

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).

untilEste 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).

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

10 de 26

31/03/11 13:49

Programacin de scripts en Bash - XTech Capacit...

http://wiki.xtech.com.ar/index.php?title=Programa...

Ejemplo:#!/bin/sh # # Programa # echo "\$*: echo "\$#: echo "\$0: echo "\$1: echo "\$2:

que recibe argumentos y los imprime por pantalla $*" $#" $0" $1" $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.

FuncionesLas 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

UsoLa 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.

11 de 26

31/03/11 13:49

Programacin de scripts en Bash - XTech Capacit...

http://wiki.xtech.com.ar/index.php?title=Programa...

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 se12 de 26 31/03/11 13:49

Programacin de scripts en Bash - XTech Capacit...

http://wiki.xtech.com.ar/index.php?title=Programa...

los pasa como argumento a la funcin borrar.

Valores de retornoLas funciones pueden devolver valores de error utilizando el comando "return ". 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 echo func echo func echo func echo 0 "ret: 1 "ret: 2 "ret: 3 "ret:

($?)" ($?)" ($?)" ($?)"

Variables locales a la funcinExiste 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 ". 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 AritmticasExisten 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.

13 de 26

31/03/11 13:49

Programacin de scripts en Bash - XTech Capacit...

http://wiki.xtech.com.ar/index.php?title=Programa...

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.

UsoLa sintaxis para hacer operaciones aritmticas es la siguiente:$[]

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)"

bcA veces hay conjuntos de herramientas que nos suenan y no las aprovechamos al mximo. Quizs una de esas sea bc. 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:

14 de 26

31/03/11 13:49

Programacin de scripts en Bash - XTech Capacit...

http://wiki.xtech.com.ar/index.php?title=Programa...

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.

15 de 26

31/03/11 13:49

Programacin de scripts en Bash - XTech Capacit...

http://wiki.xtech.com.ar/index.php?title=Programa...

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 c a l e j (x) (x) (x) (x) (x) (n,x) Seno de x, en radianes Coseno de x Arcotangente de x Logaritmo neperiano de x Exponencial de 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:

16 de 26

31/03/11 13:49

Programacin de scripts en Bash - XTech Capacit...

http://wiki.xtech.com.ar/index.php?title=Programa...

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&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.

21 de 26

31/03/11 13:49

Programacin de scripts en Bash - XTech Capacit...

http://wiki.xtech.com.ar/index.php?title=Programa...

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 1Descompresin 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.22 de 26 31/03/11 13:49

Programacin de scripts en Bash - XTech Capacit...

http://wiki.xtech.com.ar/index.php?title=Programa...

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 2Listado 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.

23 de 26

31/03/11 13:49

Programacin de scripts en Bash - XTech Capacit...Resolucin

http://wiki.xtech.com.ar/index.php?title=Programa...

#/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 3Ralizacin 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

24 de 26

31/03/11 13:49

Programacin de scripts en Bash - XTech Capacit...

http://wiki.xtech.com.ar/index.php?title=Programa...

#!/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.

25 de 26 echo

echo "*** Comenzando la grabacion del CDROM ***" "Por favor, sea paciente. Este proceso puede tardar hasta 30 minutos." echo " " # Se comienza a grabar el CD con cdrecord.

31/03/11 13:49

Programacin de scripts en Bash - XTech Capacit...Resolucin 2 (backup por SAMBA)

http://wiki.xtech.com.ar/index.php?title=Programa...

#!/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

Obtenido de "http://wiki.xtech.com.ar/index.php/Programaci %C3%B3n_de_scripts_en_Bash" Categora: Material

Esta pgina fue modificada por ltima vez el 18:03 1 dic 2008. - Esta pgina ha sido visitada 41.850 veces. - Aviso legal - Acerca de XTech Capacitacion

26 de 26

31/03/11 13:49