La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

2008 Escuela de Informática y Telecomunicaciones, DuocUC Escuela de Informática y Telecomunicaciones Clase 7: Control del flujo en BASH Nombre unidad de.

Presentaciones similares


Presentación del tema: "2008 Escuela de Informática y Telecomunicaciones, DuocUC Escuela de Informática y Telecomunicaciones Clase 7: Control del flujo en BASH Nombre unidad de."— Transcripción de la presentación:

1 2008 Escuela de Informática y Telecomunicaciones, DuocUC Escuela de Informática y Telecomunicaciones Clase 7: Control del flujo en BASH Nombre unidad de aprendizaje: Introducción a los SCRIPTS Programación Aplicada

2 2© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Objetivos  Objetivos de la clase  Programa rutinas utilizando los diferentes tipos de variables, constantes, operadores y sentencias de control en lenguaje Bash.

3 3© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Operaciones aritméticas con BASH  Para realizar operaciones aritméticas en BASH se utiliza el comando expr.  La sintaxis de expr es la siguiente:  Las operaciones pueden ser las habituales +, -, * y / (división), además de % (módulo o resto de una división entre enteros). expr argumento1 operación argumento2

4 4© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Operaciones aritméticas con BASH  En la multiplicación se debe anteponer al signo asterisco (*), una barra invertida (carácter de arranque) para que BASH no realice sustitución de nombres de archivo. [alumno@localhost ~]$ expr 15 + 10 25 [alumno@localhost ~]$ expr 15 \* 10 150

5 5© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Operaciones aritméticas con BASH  El resultado del comando expr es enviado a la salida estándar (pantalla).  Para hacer que el resultado de una operación aritmética se almacene en una variable debemos usar una orden de la forma: variable=$(expr arg1 operación arg2). [alumno@localhost ~]$ Resto=$(expr 17 % 2) [alumno@localhost ~]$ echo $Resto 1

6 6© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Operaciones aritméticas con BASH  Existen varias formas alternativas de realizar OPERACIONES ARITMÉTICAS en BASH, por ejemplo, considere: [alumno@localhost ~]$ echo $((1 + 1)) 2 [alumno@localhost ~]$ echo $[1+1] 2 [alumno@localhost ~]$ echo $[3/4] 0

7 7© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Operaciones aritméticas con BASH  El último resultado del ejemplo anterior se debe a que BASH sólo utiliza enteros en sus respuestas.  Para operaciones con reales se debe usar el programa bc; a modo de ejemplo considere: [alumno@localhost ~]$ echo 3/4 | bc -l 0.75

8 8© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Operaciones aritméticas con BASH  bc se incluye con (todas?) las distribuciones LINUX como estándar, así como en casi todas las UNIX.  Los resultados de cálculos en algunos formatos propietarios de bc tienen hasta 99 dígitos decimales antes y después del punto decimal. Este límite se ha superado mucho en GNU bc, en al menos varias decenas de miles!!!.

9 9© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Operaciones aritméticas con BASH  bc acepta entrada de datos desde archivos y desde la entrada estándar, esto nos permite dirigir los datos para hacer cálculos muy rápidamente.  Veamos algunos ejemplos de uso de bc: [alumno@localhost ~]$ echo '57+43' | bc 100 [alumno@localhost ~]$ echo '57*43' | bc 2451

10 10© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Operaciones aritméticas con BASH  La variable scale determina el número de dígitos que siguen al punto decimal en el resultado presentado por bc. Por defecto, el valor de la variable scale es cero, salvo que usemos la opción -l en cuyo caso por defecto vale 20 posiciones decimales.  Esto se puede configurar declarando scale antes de hacer los cálculos, como en el siguiente ejemplo de división:

11 11© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Operaciones aritméticas con BASH  En resumen, bc puede efectuar cálculos estándar en la línea de comandos incluyendo suma, resta, multiplicación, división, raíz cuadrada, potencias, conversión de decimal a hexadecimal, decimal a binario, hexadecimal a decimal, binario a decimal, entre otros. [alumno@localhost ~]$ echo 'scale=25;57/43' | bc 1.3255813953488372093023255

12 12© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Control del flujo en BASH  El CONTROL DEL FLUJO es la manera que poseen los lenguajes de programación de provocar que el flujo de la ejecución avance y se ramifique en función de los cambios de estado de los datos.  La ramificación, iteración, selección y llamadas a subrutinas son formas de CONTROL DE FLUJO implementadas en prácticamente todos los lenguajes de programación.

13 13© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Control del flujo en BASH  El BASH de GNU/LINUX soporta dos tipos de sentencias de CONTROL DEL FLUJO: SENTENCIAS CONDICIONALES, como por ejemplo: if-then,if-then-else, case. SENTENCIAS ITERATIVAS, como por ejemplo: while, for, until.

14 14© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Control del flujo en BASH  Las SENTENCIAS CONDICIONALES (también llamadas ESTRUCTURAS DE DECISIÓN) son las que nos permiten decidir por un camino, entre dos ó más posibles, dada una condición.  Si la condición se evalúa como “verdadera”, se cumplirá el camino inmediato de secuencias, en caso de ser evaluada la condición como “falsa”, se ejecutará el bloque de secuencias alternativas.

15 15© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Control del flujo en BASH  If-then, if-then-else – Permiten ejecutar una serie de comandos dependiendo si una cierta condición se cumple o no.  Case – Permite ejecutar una o varias listas de comandos dependiendo del valor de una variable.

16 16© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Control del flujo en BASH  Las SENTENCIAS ITERATIVAS (también denominadas ESTRUCTURAS CICLICAS) se utilizan para ejecutar un bloque de instrucciones un número dado ó un número de veces hasta que una condición se cumpla.  Llamaremos CICLO (o BUCLE) a todo proceso que se repite un cierto número de veces dentro de un archivo de SHELL SCRIPT o programa.

17 17© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Control del flujo en BASH  while – Permite ejecutar una serie de comandos mientras que una determinada condición se cumpla.  for – Permite ejecutar una serie de comandos un número determinado de veces.  until – Permite ejecutar una serie de comandos hasta que una determinada condición se cumpla.

18 18© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo “condiciones” en el control del flujo en BASH  La mayoría de las condiciones utilizadas con estas sentencias son principalmente: Comparaciones de cadenas alfanuméricas o numéricas. Valores de terminación de comandos. Comprobaciones de atributos de archivos.

19 19© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo “condiciones” en el control del flujo en BASH  Comparación de valores numéricos:

20 20© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo “condiciones” en el control del flujo en BASH  Para realizar comparaciones entre valores o cadenas alfanuméricas test adopta las siguientes formas: test cadena1 operador cadena2 test operador cadena

21 21© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo “condiciones” en el control del flujo en BASH  Comparación de cadenas alfanuméricas:

22 22© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo “condiciones” en el control del flujo en BASH  Comprobación de atributos de archivos:

23 23© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo “condiciones” en el control del flujo en BASH  Comparación de cadenas alfanuméricas:

24 24© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo “condiciones” en el control del flujo en BASH  Hay que notar que las condiciones en BASH se pueden comprobar con test, tal como hemos visto anteriormente, y usando [ ].  Así, “test condición” será equivalente a [condición], por ejemplo: test –f archivo será equivalente a [ –f archivo ].

25 25© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia condicional IF  La sintaxis de la SENTENCIA CONDICIONAL IF es la siguiente: if test condición then sentencias_1 else sentencias_2 fi

26 26© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia condicional IF  Si test evalúa la condición como “verdadera” se ejecutan las sentencias del IF, es decir, el grupo de ordenes sentencias_1.  Si test determina que la condición es “falsa” se ejecutan las sentencias del ELSE, es decir, el grupo de ordenes sentencias_2.

27 27© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia condicional IF

28 28© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia condicional IF  En una sentencia IF el ELSE es opcional; con esto IF adopta la siguiente forma:  Veamos algunos ejemplos de uso de la SENTENCIA CONDICIONAL IF: if test condición then sentencias fi

29 29© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia condicional IF #!/bin/bash clear echo –e “Ingresar un numero: \c” read num if test $num –gt 0 then echo –e “$num es positivo\n” else echo –e “$num es negativo\n” fi

30 30© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia condicional IF #!/bin/bash clear echo –e “Ingresar nombre de archivo: \c” read arch if test –f $arch then more $arch else echo –e “$arch no es archivo regular\n” fi

31 31© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia condicional CASE  La sintaxis de la SENTENCIA CONDICIONAL CASE es la siguiente: case $opción in opc_1) comandos;; opc_2) comandos;; ….. *) comandos;; esac

32 32© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia condicional CASE

33 33© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia condicional CASE  La SENTENCIA CONDICIONAL CASE evalúa el valor de una variable y ejecuta varias instrucciones en función de su valor.  Es similar a usar varios IF anidados.  Si la variable NO es igual a ninguno de los valores especificados como opciones, se ejecutan las instrucciones especificadas en el asterisco.

34 34© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia condicional CASE #!/bin/bash clear echo –e “ingresar un número: \c” read num resto=num%2 case $resto in 0) echo –e “$num es par\n”;; 1) echo –e “$num es impar\n”;; esac

35 35© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia condicional CASE  El final de cada acción a tomar en una opción de la SENTENCIA CONDICIONAL CASE, o conjunto de órdenes a ejecutar, se indica con un doble punto y coma, ";;".  Esto se hace para evitar que una vez se haya ejecutado un conjunto de órdenes, se continúe con la ejecución de las órdenes de las siguientes opciones.

36 36© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia condicional CASE  En el siguiente ejemplo se comprueba si el archivo ingresado encaja con los patrones dados en la primera opción del CASE. En el caso de tener extensión.c se compila a través del programa GCC.  En el caso por defecto, es decir, si no encaja con los patrones de la primera opción, se da un mensaje informando de tal situación.

37 37© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia condicional CASE #!/bin/bash clear echo –e “ingrese nombre archivo: \c” read arch case $arch in *.c) echo compilando $arch gcc $arch;; *) echo $arch no es un fichero c;; esac

38 38© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia condicional CASE  El siguiente SCRIPT muestra un menú para ejecutar, mediante un CASE, el escritorio que queramos. #!/bin/bash clear echo –e “\n\n\t\t\tMENU\n” echo –e “\t\t1) Iniciar KDE” echo –e “\t\t2) Iniciar GNOME” echo –e “\t\t3) Terminar ejecución” echo –e “\t\tElegir opción [_]\b\b\c” read opc

39 39© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia condicional CASE  Notar que la sentencia exit termina la ejecución del SCRIPT. case $opc in 1) startx kde;; 2) startx gnome;; 3) exit;; esac

40 40© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Resumen  Resumen de la clase  Para realizar operaciones aritméticas en BASH se utiliza el comando expr. Los LINUX actuales ofrecen varias formas de realizar operaciones aritméticas.  El BASH de GNU/LINUX soporta dos tipos de sentencias de control del flujo: SENTENCIAS CONDICIONALES (if, case) y SENTENCIAS ITERATIVAS (while, for).  Las SENTENCIAS CONDICIONALES son las que nos permiten decidir por un camino, entre dos ó más posibles, dada una condición.  If-then, if-then-else – Permiten ejecutar una serie de comandos dependiendo si una cierta condición se cumple o no.  Case – Permite ejecutar una o varias listas de comandos dependiendo del valor de una variable.


Descargar ppt "2008 Escuela de Informática y Telecomunicaciones, DuocUC Escuela de Informática y Telecomunicaciones Clase 7: Control del flujo en BASH Nombre unidad de."

Presentaciones similares


Anuncios Google