Está en la página 1de 8

GNU/Linux Programacin en BASH

PROGRAMACIN EN BASH. SHELL ARCHIVOS DE PROCESAMIENTO POR LOTES (SCRIPT) Un archivo de procesamiento por lotes (shell script) es un grupo de comandos, funciones y variales. Puede ser una lnea de comandos que preferimos no escribir o un complejo programa con bucles continuos, sentencias condicionales, operaciones matemticas y estructuras de control. Los archivos de procesamiento por lotes (shell script) tienen la misma sintaxis de varios lenguajes de programacin y son capaces de manejar las mismas tareas. Hay dos tipos de archivos de procesamiento por lotes (shell scripts): los basados en bourne shell y los derivados de C. Se escriben en un archivo de texto al que se le otorgan permisos de ejecucin. Una vez realizado este proceso se podr escribir en la consola el nombre del archivo y ste se ejecutar como un comando. Para escribir nuestros programas en shell usaremos cualquier clase de editor de texto, p.ej. Vi, mcedit cualquier otro con el cul nos hayamos familiarizado. Un archivo de procesamiento por lotes (shell script) es una forma de agrupar secuencias de comandos que corren sin tener que ser escritos en el prompt. En realidad pueden ser tan complejos como cualquier programa ejecutable. Por dnde comenzar? Nuestro archivo de procesamiento por lotes (shell script) debe comenzar con la siguiente lnea (OJO! debe ser la primera lnea del archivo): #!/bin/bash Los caracteres #! indican al sistema que el primer argumento que sigue en la lnea es el programa a utilizar para ejecutar este script. En este caso usamos el shell / bin/bash. Esto quiere decir que se invocar al shell bash para interpretar estos comandos y ejecutarlos. Luego de esta lnea escribiremos los comandos que queremos que ejecute nuestro script. Una vez que el archivo de procesamiento por lotes (shell script)ha sido terminado y guardado, tenemos que hacerlo ejecutable para poder correrlo. Para hacer el archivo de procesamiento por lotes (shell script) ejecutable escribiremos el siguiente comando: #chmod 755 nombre-del-script Despus vamos a poder ejecutar el archivo de procesamiento por lotes (shell script) escribiendo en la consola lo siguiente: ./nombre-del-archivo de procesamiento por lotes (shell script)

Marco Antonio de Hoyos

Pg 1

http://tecnicoslinux.com.ar

GNU/Linux Programacin en BASH


Recordemos que el ./ sirve para remplazar la ruta. Ejemplo: #!/bin/bash clear echo Ejecutando el comando ls. ls echo el comando se ejecut con xito. VARIABLES La asignacin de variables se realiza simplemente indicando su nombre, un signo =, y el valor, como en el siguiente ejemplo: nombre="Luis" El valor de una variable se toma anteponiendo un signo $ al nombre, as si queremos imprimir en pantalla el valor de la variable nombre que creamos antes, deberemos escribir: echo $nombre echo es el comando que nos permite enviar a la salida por pantalla el valor de la variable pasada como argumento. Este comando suele utilizarse si queremos testear en pantalla el progreso de un archivo de procesamiento por lotes (shell script) o si deseamos que el pueda ir obteniendo informacin mientras el archivo de procesamiento por lotes (shell script) se ejecuta. MANEJANDO ENTRADAS Y SALIDAS La entrada/salida puede manejarse con los comandos echo y read. Con ellos el archivo de procesamiento por lotes (script)podr interacturar con el usuario, recibiendo datos de l y mostrando en pantalla resultados. Ejemplo: #!/bin/bash clear echo "Por favor introduzca su nombre:" read nombre echo "Introduzca ahora su apellido" echo read apellido echo "Bienvenido al Departamento Computacin $nombre $apellido" VARIABLES PREDEFINIDAS Veamos las variables ya definidas por el shell y que podremos usar en nuestros scripts. 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)

Marco Antonio de Hoyos

Pg 2

http://tecnicoslinux.com.ar

GNU/Linux Programacin en BASH


ARGUMENTOS Los argumentos sirven para pasarle a un programa o una funcin valores desde la lnea de comando. Slo podemos pasar nueve argumentos. Si por algn motivo queremos usar ms de nueve: con el comando shift borramos el argumento n1 transformando al que hasta este momento era el n2 en n1 y as sucesivamente hasta que el n9 se transforma en 8 y deja uno libre para ser usado. Como veremos en la tabla siguiente, si quisiramos hacer mencin a todos los argumentos introducidos por pantalla podramos hacer uso de la variable $*. Si por ejemplo queremos indicar que debe utilizarse el primer argumento pasado tendremos que usar la variable $1 y as sucesivamente segn el argumento que deseemos utilizar en nuestro archivo de procesamiento por lotes (shell script). Variable $* $# $0 $1 $2 $n Ejemplo: #!/bin/bash # Programa que recibe argumentos y los imprime por pantalla echo "\$*: $*" echo "\$#: $#" echo "\$0: $0" echo "\$1: $1" echo "\$2: $2" En la lneas de impresin (echo), para imprimir el smbolo "$" (pesos) se tiene que anteponer el smbolo "\" (contra barra), de lo contrario el shell lo va a interpretar como una variable, y si sta existe imprimir su contenido. Los argumentos que se pasan en el momento de invocar el archivo de procesamiento por lotes (script)se asignan a las variables automticas $1, $2, $3, etc: ./archivo de procesamiento por lotes (shell script)perro gato loro $1 vale perro $2 vale gato $3 vale loro. En ocasiones se desea asignar a una variable el valor obtenido mediante la ejecucin de otro comando. Esto se logra encerrando el comando entre ' como podemos ver en este ejemplo horaydia='date' Significado Todos los argumentos Cant. de argumentos Nombre del archivo de procesamiento por lotes (shell script) Primer argumento Segundo argumento Argumento 'ensimo'

Marco Antonio de Hoyos

Pg 3

http://tecnicoslinux.com.ar

GNU/Linux Programacin en BASH


Otras variables automticas son $0 que contiene el nombre del script, y $# que contiene la cantidad de argumentos ingresados durante la ejecucin del script. EXPRESIONES Como en cualquier lenguaje de programacin podemos evaluar expresiones y hacer depender de dicha evaluacin la ejecucin de un comando o secuencias de comandos. El comando test devuelve verdadero o falso como resultado (usualmente se utiliza con el comando if test "$nombre" = "Luis" Este ejemplo chequea igualdad. Si deseamos chequear desigualdad debemos usar el operador != como en el lenguaje C: test "$nombre" != "Carlos" test $variable Chequea si la variable contiene algn dato, en cuyo caso devuelve verdadero. test -z $variable Chequea si la variable no contiene datos (longitud cero), en cuyo caso devuelve verdadero. test $variable1 -eq $variable2 Chequea igualdad entre variables numricas enteras, si son iguales devuelve verdadero. test $variable1 -ge $variable2 Chequea si el primer valor es mayor o igual que el segundo, en cuyo caso devuelve verdadero. test $variable1 -gt $variable2 Chequea si el primer valor es mayor que el segundo, en cuyo caso devuelve verdadero. test $variable1 -le $variable2 Chequea si el primer valor es menor o igual que el segundo, en cuyo caso devuelve verdadero. test $variable1 -lt $variable2 Chequea si el primer valor es menor que el segundo, en cuyo caso devuelve verdadero. test $variable1 -ne $variable2 Chequea que los dos valores no sean iguales, en cuyo caso devuelve verdadero. test $archivo1 -nt $archivo2 Chequea las fechas de modificacin de dos archivos, devolviendo verdadero si el archivo1 es ms nuevo que el archivo2. test -f $archivo Chequea si el archivo existe, en caso afirmativo devuelve verdadero. test -d $archivo Chequea si el archivo en cuestin es un directorio y si existe, en cuyo caso devuelve verdadero

Marco Antonio de Hoyos

Pg 4

http://tecnicoslinux.com.ar

GNU/Linux Programacin en BASH


test -r $archivo Chequea si tenemos permiso de lectura sobre el archivo, devolviendo verdadero en caso afirmativo. test -w $archivo Chequea si tenemos permiso de escritura sobre el archivo, devolviendo verdadero en caso afirmativo. test -x $archivo Chequea si tenemos permiso de ejecucin sobre el archivo, devolviendo verdadero en caso afirmativo. test -b $archivo Chequea si el archivo es un dispositivo de bloque (block device), devolviendo verdadero en caso afirmativo. test -c $archivo Chequea si el archivo es un dispositivo de caracter (character device), devolviendo verdadero en caso afirmativo. ESTRUCTURAS DE CONTROL Dentro de las estructuras de control encontramos dos categoras: Estructuras de decisin Estructuras de bucle

ESTRUCTURAS DE DECISIN Son las que nos permiten decidir por un camino entre dos ms posibles dada una condicin. Si la condicin se evala como verdadera, se cumplir el camino inmediato de secuencias, en caso de ser evaluada la condicin como falsa, se ejecutar el bloque de secuencias alternativas. Entre estas estructuras veremos dos: if y case. if .. then ... else ... fi Esta instruccin usa el status del ltimo comando y condicionalmente ejecuta la siguiente instruccin. La sintaxis general es la siguiente. if test then comandos else comandos fi Ejemplo: #!/bin/bash echo Ingrese estado del tiempo: read tiempo

Marco Antonio de Hoyos

Pg 5

http://tecnicoslinux.com.ar

GNU/Linux Programacin en BASH


if [ $tiempo = lluvia ] then echo $llueve else echo lindo dia!!!! fi Dos estructuras nos permiten ejecutar un cdigo si algo inmediatamente anterior result verdadero, lo contrario, ejecutarlo slo si lo anterior ha ido falso. && Permite un if...then rpido, en realidad es un AND lgico test "$nombre" = "Luis" && echo "Hola Luis!" || Similar al anterior pero para el caso falso, en realidad es un XOR lgico. test "$nombre" = "Luis" || echo "Ud. no es Luis!" La forma de acordarse de qu produce cada estructura, es tener bien en claro que el shell slo va ha ejecutar lo estrictamente necesario para saber cmo termina la condicin. case .. in ... esac Esta estructura evala el valor de una variable y ejecuta varias instrucciones en funcin de su valor. Es similar a usar varios if anidados. Si la variable no es igual a ninguno de los valores se ejecutan las instrucciones especificadas en el asterisco. #!/bin/bash echo Ingrese estado del tiempo: read estado case $estado in lluvia) echo llevar paraguas;; sol) echo hoy esta lindo;; *) echo Es un dia variable;; esac ESTRUCTURAS CICLICAS Estas estructuras se utilizan para ejecutar un bloque de instrucciones un nmero dado un nmero de veces hasta que la condicin se cumpla. Llamaremos bucle o ciclo a todo proceso que se repite un cierto nmero de veces dentro de un archivo de procesamiento por lotes (shell script) o programa. Dentro de estas estructuras encontramos while, until y for.

Marco Antonio de Hoyos

Pg 6

http://tecnicoslinux.com.ar

GNU/Linux Programacin en BASH


while .. do ... done while do ... done while sleep 3 do echo hola mundo. done until .. do ... done until do ... done until sleep 3 do echo pasaron 3 segundos. done La instruccin break termina la ejecucin del bucle ocasionando la ejecucin de la instruccin done ms cercana. for .. in ... do ... done Es otra de las estructuras importantes, permite dos sintxis: la primera, la del for ms o menos tradicional, es decir, dar un nombre de una variable y los valores por los que tiene que pasar: for i in `ls /` do file $i done

Marco Antonio de Hoyos

Pg 7

http://tecnicoslinux.com.ar

GNU/Linux Programacin en BASH


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, y as lograr minimizar el margen de error y tambin la cantidad de lneas codificadas en el programa. Para utilizarlas simplemente tendremos que hacer un llamado a la funcin. Las funciones pueden estar dentro del mismo archivo de procesamiento por lotes (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. # Cargando las funciones en memoria # (Hay un espacio despues del .) . /home/pepe/funciones/funciones-arch.sh for i in `ls /` do evaluar $i done archivo: lib/arch.sh # Funciones para manipulacin de archivos evaluar() { # A partir de aqu empieza la funcin file $1 #Termina la funcin } 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 <nombre_de_variable>". 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)" a la funcin se utiliza el operador "local

Veamos como inclumos esta opcin en una funcin:

Marco Antonio de Hoyos

Pg 8

http://tecnicoslinux.com.ar

También podría gustarte