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

Slides:



Advertisements
Presentaciones similares
Estructuras de control
Advertisements

Sesión 3 Estructuras Repetitivas
Pippy (Python para niños)‏ 1.
ALGORITMOS Y LENGUAJES Estructuras de Control CONDICIONAL
Programación Básica con NQC Pedro F. Toledo – Patricio Castillo 18/08/2006.
Estructuras de Repetición Algoritmos
PHP-MYSQL OPERADORES EN PHP
Programación II Ing. Diego J. Arcusin 3 – Uso del Shell.
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
Estructuras de Control
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
Entornos de programación
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Estructuras de control
PARADIGMA Es un esquema de pensamiento que nos lleva a concebir las cosas de una manera determinada. el término paradigma puede indicar el concepto de esquema.
TÉCNICO EN PROGRAMACIÓN DE SOFTWARE Instructor: Ingeniero Adrián Guerrero Taborda
Ingeniero Anyelo Quintero
ESTRUCTURAS DE CONTROL
Programación de Computadores
Semana 5 Subprogramas..
FUNDAMENTOS DE PROGRAMACIÓN
Capítulo 1 “Elementos de Programación”
Conversión cadena a número
PHP TODO SOBRE PHP.
Sesión 5 Sentencias de Selección y repetición Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
Informática Tema 5 - Estructuras de Control Estructuras de Repetición.
Informática Ingeniería en Electrónica y Automática Industrial
Ciclos (Loops, Repeticiones) Permiten ejecutar una secuencia de sentencias mas de una vez. Hay 2 tipos de loops:  WHILE repite la acción un número indefinido.
Teoría – Alejandro Gonzalez
PROGRAMACIÓN DE SHELL SCRIPTS
EXPRESIONES Y SENTENCIAS
MATERIA: SISTEMAS OPERATIVOS II INTEGRANTES: CARLOS NAJERA LUIS ACOSTA ANGEL CASTILLO.
Estructuras de Control.
2008 Escuela de Informática y Telecomunicaciones, DuocUC Escuela de Informática y Telecomunicaciones Clase 7: Control del flujo en BASH Nombre unidad de.
Programación Básica con “NQC” Pedro F. Toledo – Patricio Castillo 18/08/2006.
Administración de Servicios de Red 1 Escuela de Informática y Telecomunicaciones Suplementos: Shell scripts rpm RHA 030 Sistemas Operativos de Red.
2008 Escuela de Informática y Telecomunicaciones, DuocUC Escuela de Informática y Telecomunicaciones Clase 12: Introducción a AWK Nombre unidad de aprendizaje:
While En este ciclo el cuerpo de instrucciones se ejecuta mientras una condición permanezca como verdadera en el momento en que la condición se convierte.
Sentencias de repetición
COMPUTO III Ing. Jimmy Ojeda Arnica.
ELEMENTOS DE COMPUTACIÓN Profesor: Guillermo Figueroa
PEDRO ALBERTO ARIAS QUINTERO. El shell es un intérprete de órdenes, los intérpretes de órdenes de Linux son auténticos lenguajes de programación. Como.
Sesión 13: Python (4) – Estructura Repetición. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática.
Vamos a tratar algunos temas que es necesario conocer a la hora de administrar un sistema informático y que nos van a ser útiles sin importar el sistema.
INTRODUCCIÓN AL LENGUAJE C++. Instrucciones Temas.
Elaboración de algoritmos usando lógica de programación
2008 Escuela de Informática y Telecomunicaciones, DuocUC Escuela de Informática y Telecomunicaciones Clase 9: Funciones, variables y arreglos en BASH Nombre.
Estructuras de Control en Visual Basic.net
Se pueden incluir comentarios en cualquier parte de un programa pero deben delimitarse con llaves o con paréntesis y asterisco:
“variables , sentencia if y bucles”
ESTRUCTURAS REPETITIVAS
Práctica Profesional PHP.
Programación II Ing. Diego J. Arcusin 5 – Programación con Shell.
Estructuras de Decisión
Algoritmo.
2011/1 - CLASE 12. AGENDA 1 Introducción 2 Sentencia while 3 Sentencia for 14 Sentencia do-while 5 Instrucciones Especiales 6 Ciclos anidados.
Estructuras de Control
CICLOS EN C – PARTE 3.
ESTRUCTURA DE CONTROL REPETITIVAS: WHILE, DO… WHILE
 Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman unos valores de entrada, llamados parámetros y proporcionan.
PROGRAMACIÓN Grupo de Modelamiento de Sistemas
Tipos de ciclos en Visual Basic. Dinámicos y fijos. 6.1 Foro. Wuilson Valencia, Desarrollo de aplicaciones I y Laboratorio. 1.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
ESTRUCTURAS SELECTIVAS Elaborado por; Ing. Alberto Pérez.
Entrada y Salida en C++, Estructuras de Control Prof. Manuel B. Sánchez.
Ciclos de Repeticion Yoel Gutierrez Unidad 6. Contenido DefinicionExplicacionEjemplosReferencias.
Excel 2013 Informática en los negocios lci. Excel 2013  ¿Qué es un RANGO en Excel?  Es un conjunto de celdas contiguas que pueden ser seleccionadas.
Ciclos condicionales y exactos Estructura de control de ciclos
Materia: Informática II Semestre: 2 Mtra. Ericka Yazmin Medina Rodríguez Campus: Tonalá Competencia: Manejo de la información y aprendizaje permanente.
Transcripción de la presentación:

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

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© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa WHILE  La sintaxis de la SENTENCIA ITERATIVA WHILE es la siguiente: while test condición do sentencias done

4© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa WHILE  Las sentencias del WHILE se ejecutarán mientras la condición evaluada con test se mantenga en “verdadero”; cuando la condición alcance el valor de verdad “falso” el ciclo WHILE dejará de ejecutarse.  Una vez finalizado el ciclo WHILE, el control de la ejecución del SCRIPT es pasado a la siguiente instrucción después del bloque del WHILE.

5© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa WHILE

6© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa WHILE  Veamos un ejemplo de uso de WHILE: #!/bin/bash echo –e “Ingrese un número: \c” read num i=1 sum=0 while test $i –le $num do sum=$(expr $sum + $i) i=$(expr $i + 1) done echo –e “La suma de 1 a $num es: $sum\n”

7© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa WHILE  En el ejemplo anterior se obtiene la suma de los números entre 1 y un número (positivo) leído desde el teclado.  En el siguiente ejemplo, se imprimen en pantalla todos los divisores de un número (positivo) leído desde teclado:

8© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa WHILE #!/bin/bash echo –e “Ingrese un número: \c” read num i=1 while test $i –le $num do resto=$(expr $num % $i) if test $resto –eq 0 then echo –e “$i” fi i=$(expr $i + 1) done

9© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa WHILE  En el siguiente SCRIPT de ejemplo utilizaremos la sentencia WHILE para examinar la variable de ambiente PATH y mostrar los directorios que componen dicha variable.  Aprovecharemos el hecho de que una cadena en un test de condición evalúa como “verdadero” cuando NO está vacía y evalúa como “falso” cuando está vacía.

10© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa WHILE #!/bin/bash path=$PATH while [ $path ] do echo ${path%:*} if [ ${path#*:} = $path ] then path= else path=${path#*:} fi done

11© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa WHILE  En la solución propuesta al ejercicio planteado, la comprobación [ ${path#*:} = $path ] se hace para que cuando quede un solo directorio sin dos puntos pongamos la variable path a vacía, ya que el patrón del operador de búsqueda de patrones no se cumple si la cadena no tiene el símbolo de dos puntos (:).  Podemos usar el ciclo WHILE para leer todas las líneas de un archivo, tal como se muestra en el siguiente ejemplo:

12© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa WHILE  Este método de lectura del archivo tiene el inconveniente de eliminar el formateado de las líneas y especialmente los espacios y tabulaciones. #!/bin/bash while read línea do echo –e "$línea\n" done < file.txt

13© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencias true y false  Dos órdenes sencillas que pueden ser utilizadas, por ejemplo dentro de los ciclos, son true y false.  Como sus nombres lo indican, true siempre devuelve un valor cierto (cero), y false siempre devuelve un valor falso (distinto de cero).  La sentencia true usualmente se utiliza junto con WHILE para construir ciclos infinitos, por ejemplo, en la implementación de un menú:

14© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencias true y false while true do clear echo “\t\tMENU PRINCIPAL” echo “\t\t**********************\n\n” echo “\t\t1) Ver un archivo” echo “\t\t2) Listar un directorio” echo “\t\t5) Listar usuarios activos” echo “\t\t6) Salir\n\n\n” echo ““\t\tIngresar Opción: \c” read opc … done

15© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencias break y continue  Las sentencias break y continue tiene el mismo comportamiento que sus respectivas contrapartes en los lenguajes como C y PERL.  La ejecución de un break dentro de un ciclo WHILE o FOR hace que la ejecución de dicho ciclo finalice.  Por otro lado, la ejecución de un continue dentro de un ciclo hace que se descarte la iteración en curso y el flujo de programa “salte” a la siguiente iteración.

16© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencias break y continue #!/bin/bash while true do clear echo –e “Número: \c” read num if test $num –eq 0 then break fi done

17© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencias break y continue  En el ejemplo anterior, se ingresan números (TODOS los que uno quiera, pero no nulos) hasta cuando se ingresa cero, en ese instante el ciclo infinito termina de ejecutarse, pues se ejecuta la sentencia break.  Si existen varios ciclos anidados, break terminará la ejecución del último que se ha abierto.

18© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencias break y continue  Es posible salir de n niveles de ciclo mediante la instrucción break n.  La instrucción continue reinicia el bucle con la próxima iteración dejando de ejecutar cualquier orden posterior en la iteración en curso.

19© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa FOR  La sintaxis de la SENTENCIA ITERATIVA FOR es la siguiente: for variable [ in lista_de_valores ] do sentencias done

20© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa FOR  En el ciclo FOR, variable va tomando de uno en uno los valores de la lista_de_valores, el primer valor de la lista será tomado en la primera iteración, el segundo valor de la lista será tomando en la segunda iteración,…, así sucesivamente hasta tomar TODOS los valores de la lista.  Notar que en cada iteración se ejecutarán las sentencias que componen el cuerpo del FOR.

21© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa FOR

22© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa FOR  En resumen, el ciclo FOR no se repite un número fijo de veces (comportamiento por defecto), sino que se repite de acuerdo con la cantidad de palabras o argumentos que compongan la lista_de_valores especificada en la sentencia.  En el formato anterior, in lista_de_valores es opcional, si se omite, el FOR recorrerá el contenido de

23© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa FOR  Veamos un ejemplo sencillo de uso de FOR:  Aquí, claramente el FOR se ejecutará 3 veces, pues en la lista_de_valores aparecen 3 nombres. #!/bin/bash for nombre in María Juan Luis do echo –e “Hola $nombre” done

24© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa FOR  El delimitador que usa el ciclo FOR para lista_de_valores es el que se especifique en la variable de ambiente IFS, y por defecto es el “espacio”.  La lista_de_valores del ciclo FOR también puede contener comodines (como por ejemplo, el “*”). A modo de ejemplo, el siguiente SCRIPT muestra en pantalla la lista de los archivos del directorio actual:

25© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa FOR  Notar que para recorrer los argumentos recibidos por el SCRIPT, lo adecuado es utilizar entre comillas, es decir, usar #!/bin/bash for archivo in * do echo –e $archivo done

26© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa FOR  En el siguiente ejemplo de uso del ciclo FOR, se imprimirá en pantalla la lista de todos los archivos ejecutables que fueron pasados como parámetros al SCRIPT: #!/bin/bash for archivo in do if [ -x $archivo]; then echo –e $archivo fi done

27© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa FOR  Mediante el uso de la sentencia seq, podemos hacer que el comportamiento del ciclo FOR sea más parecido al FOR de C y PERL: #!/bin/bash for i in $(seq 1 10) do echo –e $i done

28© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa FOR  Por último, podemos usar el ciclo FOR para leer todas las líneas de un archivo, tal como se muestra en el siguiente ejemplo: #!/bin/bash oldIFS=$IFS IFS=$'\n' for línea in $(cat archivo) do echo –e "$línea\n" done IFS=$old_IFS

29© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa FOR  El ciclo FOR asociado a un cambio de IFS, a diferencia del WHILE, permite conservar la estructura del documento en la salida.

30© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa UNTIL  La sintaxis de la SENTENCIA ITERATIVA UNTIL es la siguiente:  El ciclo UNTIL se ejecuta hasta que la evaluación de la condición con test alcance “verdadero”. until test condición do sentencias done

31© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa UNTIL  Según esto último, UNTIL se puede interpretar como ejecutar varias veces un comando hasta que tenga éxito.  Veamos un ejemplo sencillo de uso de UNTIL: #!/bin/bash num=0 until test $num –gt 0 do echo –e “Ingresar un número positivo: \n” read num done

32© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia iterativa UNTIL  En este ejemplo, el UNTIL se repetirá hasta que el usuario ingrese un número positivo.  Veamos otro ejemplo de uso de UNTIL: #!/bin/bash cont=10 until test $cont -lt 0 do cont=$(expr $cont - 1) echo –e $cont done echo –e “Valor final del contador: $cont\n”

33© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia SELECT  Otra sentencia bastante útil al momento de definir SCRIPTS de menú y sus opciones es la sentencia SELECT.  La sintaxis de la sentencia SELECT es la siguiente: select variable in lista do sentencias done

34© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia SELECT  Mediante SELECT podemos crea menús de selección de manera muy cómoda; podemos definir un arreglo con todas las opciones y SELECT las mostrará en pantalla por nosotros.  Veamos un ejemplo de implementación de un SCRIPT de menú y sus opciones con la sentencia SELECT:

35© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia SELECT #!/bin/bash PS3="Ingresar Opción: " opciones="opción1 opción2 salir" echo opciones $opciones select opt in $opciones do echo $opt if [ "$opt" = "salir" ] then exit fi done

36© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia SELECT  Notar que en el ejemplo anterior se ha utilizado la sentencia PS3=“Ingresar Opción: “ para que este “prompt” aparezca una vez se ejecute el SCRIPT.  La línea leída se almacena en la variable REPLY, y obviamente puede ser desplegada usando echo $REPLY.  Veamos un ejemplo de SCRIPT con SELECT usando estas características:

37© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Sentencia SELECT #!/bin/bash PS3="Elegir el archivo a proteger: " Salir="Salir de este programa" touch "$Salir" select archivo in *; do case $archivo in "$Salir") exit;; *) echo "$archivo ($REPLY)" chmod go-rwx "$archivo";; esac done rm –f "$Salir"

38© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Resumen  Resumen de la clase  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.  select – Permite crear menús de selección de manera muy rápida y cómoda.