Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porJosue Aros Modificado hace 9 años
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.
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.