Programación II Ing. Diego J. Arcusin 5 – Programación con Shell.

Slides:



Advertisements
Presentaciones similares
Capítulo 2 Algoritmos.
Advertisements

PHP-MYSQL OPERADORES EN PHP
Programación II Ing. Diego J. Arcusin 3 – Uso del Shell.
Concepto de programa. Directorio Concepto de programa. Analisis del problema. Resolucion del problema. Desarroollo de un programa. Partes constitutivas.
Módulo 5: Estructuras de Decisión y Bucles
Entornos de programación
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Estructuras de control
Es el medio que permite enviar mensajes privados a otros usuarios de Internet que se encuentren en cualquier parte del mundo. Para ello, los usuarios.
Una breve introducción
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.
Funciones en lenguaje C
TÉCNICO EN PROGRAMACIÓN DE SOFTWARE Instructor: Ingeniero Adrián Guerrero Taborda
Ingeniero Anyelo Quintero
ESTRUCTURAS DE CONTROL
Tema 3 Entrada y Salida.
Lenguaje C.
Semana 5 Subprogramas..
Almacenar variables en cookies en PHP
Programación II Ing. Diego J. Arcusin 8 – Perl.
Capítulo 1 “Elementos de Programación”
Informática Ingeniería en Electrónica y Automática Industrial
Conversión cadena a número
Tablas de verdad en PHP Programación en Internet II.
Sesión 5 Sentencias de Selección y repetición Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
COMPUTACION 2009 C lase 4 Programa PASCAL SENTENCIAS DATOS Expresiones Tipos Declaración de variables Declaración de variables Asignación Entrada/Salida.
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.
Archivos Programación I MC Beatriz Beltrán Martínez.
Teoría – Alejandro Gonzalez
PROGRAMACIÓN DE SHELL SCRIPTS
Módulo 8: Manejo de Errores y Excepciones
EXPRESIONES Y SENTENCIAS
Unidad II: Fundamentos de Programación
MATERIA: SISTEMAS OPERATIVOS II INTEGRANTES: CARLOS NAJERA LUIS ACOSTA ANGEL CASTILLO.
FILTROS. Un filtro es un programa que recibe una entrada, la procesa y devuelve una salida. Relacionando filtros simples podemos hacer prácticamente cualquier.
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.
Introducción a Procesos.  Contexto de ejecución: Conjunto de variables y parámetros, que tiene independencia de otro procesos.  Contexto de E/S ◦ Descriptores.
Informática Ingeniería en Electrónica y Automática Industrial
Red de Datos Universidad del Cauca
Administración de Servicios de Red 1 Escuela de Informática y Telecomunicaciones Suplementos: Shell scripts rpm RHA 030 Sistemas Operativos de Red.
Elementos básicos del lenguaje
2008 Escuela de Informática y Telecomunicaciones, DuocUC Escuela de Informática y Telecomunicaciones Clase 8: Control del flujo en BASH Nombre unidad de.
Objetivo Mostrar los fundamentos de la programación a través de ejemplos y prácticas utilizadas cotidianamente en el desarrollo de aplicaciones.
COMPUTO III Ing. Jimmy Ojeda Arnica.
Términos algoritmo diseñar algoritmo implementar algoritmo
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.
Programación Básica con NQC Patricio A. Castillo 12/04/2008.
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.
PRINCIPIOS 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.
Se pueden incluir comentarios en cualquier parte de un programa pero deben delimitarse con llaves o con paréntesis y asterisco:
Presente un cuestionario con los aspectos mas importantes sobre los
Hoja de Cálculo EXCEL Introducción a la informática
ESTRUCTURAS REPETITIVAS
Práctica Profesional PHP.
Estructuras de Decisión
Lic. Carla Aguirre Montalvo
Algoritmo.
CICLOS EN C – PARTE 3.
Lenguaje de Programación LISP
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
Entrada y Salida en C++, Estructuras de Control Prof. Manuel B. Sánchez.
ALGORITMOS Asignatura: Informática. Algoritmos Conjunto de instrucciones ordenadas de forma lógica y precisa, con un inicio y fin que permite resolver.
Transcripción de la presentación:

Programación II Ing. Diego J. Arcusin 5 – Programación con Shell

CASE La proposición case. Sintáxis: case palabra in patrón )comandos;;... esac Compara la palabra con los patrones en sentido descendente y ejecuta los comandos asociados al primer patrón que se reconozca y sólo a ese patrón. Este ejemplo, indica el Shell en uso: case $SHELL in /bin/sh) echo “Usted está usando el Bourne Shell”;; /bin/ksh) echo “Usted está usando el Korn Shell”;; /bin/csh) echo “Usted está usando el C Shell”;; /bin/rsh) echo “Usted está usando el Restricted Shell”;; *) echo “Usted está usando un Shell desconocido”;;

IF La proposición if de shell ejecuta comandos basados en la condición de terminación de un comando. Sintáxis: if comando then comandos si la condición es verdadera else comandos si la condición es falsa fi La parte else es opcional Todo comando devuelve una condición de terminación: una valor retornado al shell para indicar qué sucedió. Por convención, 0 significa “verdadero” (el comando ejecutó bien) y no cero significa “falso” (el comando no ejecutó correctamente). el Shell guarda la condición de terminación del último comando en la variable $?

El comando test Permite verificar la existencia de archivos y ciertas condiciones de los mismos. Además permite la comparación de valores. La única finalidad del comando test es devolver una condición de terminación. Algunas opciones: test “$1” = cadenaVerifica si el primer parámetro es igual a “cadena” test int1 -eq int2Verifica si el el entero int1 es igual al entero int2 test –f archivoVerifica si existe el archivo y no es un directorio test –d archivoVerifica si existe el archivo y es un directorio test –r archivoVerifica si existe el archivo y si puede leerse test –w archivoVerifica si existe el archivo y si puede escribirse Si test no está predefinido en el Shell (es un comando aparte) es más eficiente el uso de case que el de un if con un test en la condición. Test se puede resumir mediante: [ expresión ]. Por ejemplo: test –f “$1” es igual que[ -f “$1” ]

Ejemplo: Comado “which” $ cat which # which cmd: Indica cuál comando de PATH se ejecuta case $# in 0)echo ‘Uso: which commando’ 1>&2; exit 2 esac for i in `echo $PATH | sed ´s/:/ /g´` do if test –x $i/$1 then echo $i/$1 exit 0;#Se encontró fi done exit 1#No se encontró

¿Qué ocurriría si tenemos en nuestro directorio de trabajo otro programa llamado echo que hace otra cosa, y en la variable $PATH tenemos el directorio. primero? Dos soluciones posibles: i) Utilizar los comandos con su ruta completa. Por ejemplo: /bin/echo ii) Redefinir la variable PATH dentro del SCRIPT incluyendo sólo los directorios necesarios. ¿Qué ocurre con la variable PATH original? Ejemplo: Comado “which” (cont.)

|| es un operador condicional que significa OR (Disyunción). Sintáxis: $ comando1 || comando2 El comando a la izquierda se ejecuta; si la condición de terminación es cero (éxito), el comano a la derecha de || se ignora. Si la condición de terminación es no cero (fracaso) el lado derecho se ejecuta y el valor de la expresión completa es la condición de terminación del lado derecho. De forma similar && es un operador condicional que significa AND (conjunción): ejecuta el comando de la derecha sólo si el de la izquierda tiene éxito. Los comandos || y &&

Así como vimos que el comando for ejecuta un conjunto de comandos una vez para cada elemento de un conjunto de palabras, los ciclos while y until usan la condición de terminación de un comando para controlar la condición de terminación de un comando para controlar la ejecución de comandos en el cuerpo del ciclo. El cuerpo del ciclo se ejecuta hasta que el comando de la condición de no-cero (para while) o de cero (para until). Sintáxis: while comando do cuerpo del ciclo ejecutado mientras el comando devuelva verdadero done until comando do cuerpo del ciclo ejecutado mientras el comando devuelve falso done While y Until

while sleep 60# Hace una espera de 60’ y luego do# verifica si carlos está en sesión who | grep carlos done until who | grep carlos # Si carlos está logueado lo muestra y do# espera 60 segundos para un nuevo sleep 60 # control (¡Más eficiente! sólo ejecuta donde# el sleep si carlos está en sesión) While y Until (Ejemplo)

El comando integrado de shell shift mueve la lista completa de argumentos una posición hacia la izquiera: $2 se convierte en $1, $3 en $2, etc. proporciona todos los argumentos (después del comando shift), a semejanza de $*. Por ejemplo estos dos ciclos son equivalentes: for i in $*for i in $* dodo echo $iecho $1 doneshift done El comando shift

Reglas para la evaluación de variables de Shell $varValor de var o Nada si var no está definida ${var}Idem anterior, útil si la variable está mezclada dentro de una cadena alfanumérica. ${var-algo}Valor de var si está definido; de lo contrario algo $var no cambia. ${var=algo}Valor de var si está definido; de lo contrario algo Si no está definido, a $var se le asigna algo ${var?mensaje} Valor de var si está definido; de lo contrario se imprime mensaje y abandona el shell. Si mensaje está vacío muestra: var: parameter not set. ${var+algo}algo si $var está definido, de lo contrario nada Evaluación de variables

El comando trap establece una secuencia de comandos que se ejecutan al producirse una seña. Sintáxis: $ trap secuencia-de-comandos números de señal La secuencia de comandos es un argumento individual, por lo cuál casi siempre irá entre delimitadores. Los números de señal son enteros pequeños que identifican la señal de acuerdo a la siguiente lista: 0 Salida del shell (Por cualquier razón incluyendo fin de archivo) 1 Corte 2 Interrupción (Tecla suprimir) 3 Abandonar (Ctrl-\; hace que el programa produzca una vaciado de memoria 9 Cancelar (No puede detectarse ni ignorarse) 15 Terminar, señal por default generada por kill Por ejemplo: Util para incluir una instrucción para borrar un archivo temporal en el caso de que se produzca una interrupción a un script: trap ‘rm –f $ARCHIVOTEMPORAL: exit 1’ Traps: Detección de interrupciones

La secuencia de comandos que forma el primer argumento de trap se parece a una llamada a una subrutina que se presenta de inmediato al producirse la señal. Cuando finalizan las instrucciones asociadas a la señal, el programa se reanudará donde había quedado interrumpido a menos que la señal lo cancele explicitamente mediante exit. La secuencia nula de comandos significa ‘ignorar las interrupciones’ en este proceso y sus hijos. Ejemplo: $ ( trap ‘ ‘ 1; comando-largo ) & La señal –9 no puede detectarse ni detenerse es por eso que: kill –9 identificador-de-proceso siempre cancela el proceso no así kill identificador-de-proceso ya que puede contar con algún trap que ignore la señal. Traps (Cont.)

Todas las variables del Shell Bourne se almacenan en forma de cadenas de caracteres. Para poder realizar operaciones aritméticas y lógicas con números enteros es preciso traducirlos a enteros, y hay que volver a traducir el resultado a una cadena de caracteres para almacenarla correctamente en una variable shell. Para esto se utiliza el comando expr Sintáxis: expr argumentos Evalúa los argumentos de la expresión y envia el resultado a la salida estándar. Operadores =, \>, \>=, \<, \<=, !=Operadores de comparación +, -, \*, /, %Operadores de aritmética entera \| Proporciona la 1era expresión si no es nula o 0, de lo contrario, proporciona la segunda expresión. \& Proporciona la 1era expresión si ninguna es nula o 0, de lo contrario, proporciona 0. Los metacaracteres del shell como * deben ir precedidos de la barra invertida. Datos Numéricos. comando expr

$ cat contar if [ $# != 1 ] then echo “Uso: $0 argumento-entero” exit 1 fi maximo = “$1”# Fijamos el número pasado como parámetro actual = 1# Primer número while [ $actual –le $maximo ] do echo “$actual \c” actual=`expr $actual + 1` done echo exit 0 $contar $ Comando expr (Ejemplo)

$ cat sumador if [ $# = 0 ] then echo “Uso: $0 lista de números” exit 1 fi suma = 0# Fijamos el acumulador en cero while [ $# != 0 ] do suma=`expr $suma + $1` shift done echo “La suma es: $suma” exit 0 $ Comando expr (Otro ejemplo)

Preguntas ?

Ejercicios 5.1. a) Desarrollar un Shell Script que busque ordenadamente el nombre de un comando (que se recibe como parámetro) en cada uno de los directorios de la variable $PATH e indica la ruta completa del que se ejecutaría al imbocarlo. b) Incorpore una breve descripción del comando en la caso de que el mismo tenga página de manual Elabore un script que reciba un directorio como parámetro y analice todo el árbol de archivos y directorios debajo del mismo y produzca la siguiente información: a) Cantidad de archivos de los que disponemos permiso de lectura. b) Cantidad de archivos de los que disponemos permiso de escritura. c) Cantidad de archivos de los que disponemos permiso de ejecución. d) Cantidad de directorios de los que disponemos permiso de lectura. e) Cantidad de directorios de los que disponemos permiso de escritura. f) Cantidad de directorios de los que disponemos permiso de ejecución. g) Cantidad de archivos de dispositivos encontrados. h) Cantidad de archivos con SUID encontrados.

Ejercicios 5.3. a) Desarrolle un Shell Script que reciba como parámetros pares formados por “comando” y “descripción” y que construya un menú de opciones donde cualquiera de los comandos pueda ser ejecutado seleccionando la descripción correspondiente. b) Desarrolle una segunda versión de este programa que toma la lista de comandos y descripciones de una archivo con cada par en cada línea separados por : 5.4.) Elaborar un Shell Script que reciba como parámetros n números de 1 a 75. Por cada argumento recibido, imprimir una línea con un caracter a elección tantas veces como indique el número. 5.5) Crear un Shell Script llamado “promedio” que calcule el promedio de todos los números recibidos cómo parámetro. 5.6) Incorpore un saludo de bienvenida al.profile. de acuerdo al siguiente criterio: de 06:00 a 13:00 hs. “Buenos días [su nombre de usuario]” de 13:00 a 19:00 hs. “Buenos tardes [su nombre de usuario]” de 19:00 a 06:00 hs. “Buenas noches [su nombre de usuario]”

Ejercicios 5.7. Modifique el comando which para que acepte más de un comando de entrada Desarrollar un script que reciba como parámetro un directorio. Verificar que el mismo existe y devolver la suma de los tamaños de todos los archivos que se encuentran en ese directorio.