Tema 7: Shell Scripting

Documentos relacionados
Sistemas Operativos sesión 13: shell-scripting

Shell Script Sistemas Operativos III - ITS EMT - CETP

Tema 1: Introducción al S.O.

Programación shell en Unix/Linux sh, ksh, bash (con ejercicios corregidos) (3ª edición)

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

GNU/Linux desde la línea de comandos. Pablo Garaizar Sagarminaga (txipi) Alvaro Uría Avellanal (Fermat)

Programación shell-scripts 1 LA SHELL

Operadores de comparación

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

LINUX - El intérprete de órdenes II

Generador de analizadores léxicos FLEX

El sistema operativo Linux

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Comandos básicos MS-DOS

Lenguaje de programación C. Introducción

PHP: Lenguaje de programación

Ficheros conceptos. Manejo de ficheros en C. Apertura del fichero Función fopen: nombre del fichero. Apertura del fichero Función fopen

PROGRAMACIÓN DEL SHELL

Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

TUTORIAL SOBRE EXPRESIONES REGULARES EN JAVASCRIPT PARA VALIDACIÓN DE CAMPOS EN FORMULARIOS HTML:

Programación con bash

JavaScript: Expresiones regulares

No todos los LRs finitos se representan mejor con ERs. Observe el siguiente ejemplo:

TEMA 3. CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO. Definición y objetivos de un S.O

Fila: Es un conjunto de varias celdas dispuestas en sentido horizontal.

Prácticas de Fundamentos del Software

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Facultad de Ingeniería Universidad de Buenos Aires Sistemas Operativos Lic. Ing. Osvaldo Clúa Lic. Adrián Muccio.

UNIDAD DIDACTICA 3 REDIRECCIONAMIENTO Y TUBERIAS

PROGRAMACION / Clave: 11214

Unidad II. Fundamentos de programación en Java. Ing. José Luis Llamas Cárdenas

Manual de turbo pascal

Laboratorio de Sistemas Operativos. Ingenierías Técnicas en Informática de Sistemas y Gestión 2006/2007

ESTRUCTURAS DE CONTROL

Estatutos de Control C# Estatutos de Decisión (Selección)

PROGRAMACIÓN DE LA SHELL DE UNIX/LINUX

Estructuras de control

Programando con el intérprete de órdenes (shell) de UNIX

REFERENCIA DEL LENGUAJE

4. Operadores Operador asignación

Operaciones básicas con hojas de cálculo

Auxiliar 1 CC31A. Comandos útiles: Profesor: José Miguel Piquer

Estructuras de Control. Cecilia Curlango Rosas

Conceptos Fundamentales sobre UNIX Laboratorio Listados de Directorios con Metacaracteres (Tiempo estimado: 30 min.)

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

FUNDAMENTOS DE INFORMÁTICA

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

GUÍA BÁSICA DE SCHEME v.4

LENGUAJE. Tema 2 Elementos de un programa

Fundamentos de Programación Visual Basic

Programación en Lenguaje C

Palabras reservadas de C++ y C. Una palabra reservada no puede declararse como un identificador, esto haría un conflicto entre conectores y funciones.

Tema 3.- Predicados y sentencias condicionales

Taller de Sistemas Operativos. Índice de Comandos según su función

Introducción a PL/SQL

Programación MATLAB: Programas y Funciones.

Expresiones regulares y distancia de edición.

Nociones de informática. Qué es una computadora? GNU/Linux. Lo mínimo que hay que saber para empezar a trabajar con una computadora del aula

LEX. Las definiciones y subrutinas son opcionales. El segundo %% es opcional pero el primer %% indica el comienzo de las reglas.

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

Introducción a Linux. El regreso a los años 70: la consola (III)

1. Cadenas EJERCICIO 1

donde <directorio> es el nombre del directorio al que queremos ingresar.

Shell de Unix ProgPLN

Introducción al Uso del Sistema Operativo. Segunda Parte. Unix. Edición y procesamiento de texto. 1. Edición y Procesamiento de Texto

Manual de PHP Básico - WebEstilo

Introducción a Matlab. Ing. Laura López López

Elementos de un programa en C

Introducción a Linux. II.

Texto estructurado (ST)

LINUX - Los archivos de órdenes I

SENA Distrito Capital Centro de Electricidad, Electrónica y Telecomunicaciones ADSI - Ing. Espec. Javier Vaquiro

TP N 4 Redirección de entrada y salida estándar

Funciones & Estructuras de control

Anexo: Lenguajes de Scripting

Problema 1 (3 puntos)

Herramientas computacionales para la matemática MATLAB: Cómo guardar el trabajo?

Funciones Definición de función

MATERIAL INTRODUCTORIO ORACLE 11G

GENERALIDADES DEL LENGUAJE C

Introducción a GNU/Linux y la Programación

Tema 2. El lenguaje JAVA

El lenguaje C. 1. Identificadores, constantes y variables

Estructuras de Control

Comandos MS-DOS carpetas archivos Ampliación de Comandos: DATE TIME PATH

III. Generación de Código orientado a objetos

Que es el Shell? Kernel. Other programs. csh. bash. X window

Programación SHELL. Resumen de Programación en Shell. Álvaro Tomás Marín Vílchez

SSL Guia de Ejercicios

Construcciones del Lenguaje Java

INTRODUCCIÓN A LA PROGRAMACIÓN EN FORTRAN. Métodos Numéricos Carlos Zotelo

Transcripción:

Tema 7: Shell Scripting Enrique Soriano Laboratorio de Sistemas, Grupo de Sistemas y Comunicaciones, URJC 22 de abril de 2010

(cc) 2010 Grupo de Sistemas y Comunicaciones. Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial - SinObraDerivada (by-nc-nd). Para obtener la licencia completa, véase http://creativecommons.org/licenses/by-sa/2.1/es. También puede solicitarse a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

Cuándo hago un script de Shell? Pasos para realizar una tarea: 1. Mirar si hay alguna herramienta que haga lo que queremos buscar en el manual. 2. Si no encontramos, intentar combinar distintas herramientas programar un script de Shell. IDEA: combinar herramientas que hacen bien una única tarea para llevar a cabo tareas más complejas. 3. Si no podemos, hacer una herramienta programar en C (u otro lenguaje).

Un script: Tiene que acabar en una nueva de ĺınea. Tiene que tener permisos de ejecución. El comando built-in exit sale del script con el status indicado en su argumento. Si no se le especifica, sale con el valor de $status. term % cat holamundo #!/bin/rc echo Hola mundo exit term %

Listas Cada elemento es una string (acabada en un caracter nulo). La llamada getenv() reemplaza los nulos por un espacio (menos el último).

Listas term % x=(hola que tal) term % x=(hola (que tal)) term % x=((hola que) (tal)) # es lo mismo! term % echo $x(2) # el índice empieza en 1! term % echo $#x # n o de elementos term % cat /env/x term % xd -c /env/x

Argumentos de un script $* Lista con todos los argumentos. $#* Número de argumentos (elementos de $*). $1,$2,.. Primer argumento, segundo... $0 Nombre del programa

Variables especiales $home $pid $apid $prompt $path $status $ifs

Operador de concatenación term % z=$aˆ$b Si $#a es igual que $#b, se concatena el enésimo elemento de $a con el enésimo de $b. Si es una cadena o una lista de un único elemento, concatena ese elemento con todas (distribución). Si el número de elementos es distinto y mayor que uno, o alguna lista está vacía: error. term % chmod +x /un/path/largo/ ˆ(file1 file2)

De lista a cadena $"var Se sustituye por una única cadena con todos los elementos de $var concatenados. Por tanto, el número de elementos es 1. term % var=(uno dos tres) term % b=$"var term % echo $var $b term % echo $#var $#b term % cat /env/var /env/b term % xd -c /env/var /env/b

Variables vacías lista vacía variable con una string vacía term % var1=() term % var2= term % echo $#var1 $#var2 term % echo $var1 $var2

Más vale prevenir... rfork(1) es un built-in que permite configurar el proceso en el que ejecuta el script. Padre e hijo comparten cosas por defecto: espacio de nombres y entorno, entre otras. rfork n nuevo espacio de nombres, copiado del padre. rfork N nuevo espacio de nombres, limpio. rfork e nuevo entorno, copiado del padre. rfork E nuevo entorno, limpio. #!/bin/rc rfork e # casi siempre queremos esto...

Operaciones aritméticas La Shell no sabe nada sobre números. hoc(1) es potente para cálculos con coma flotante, tiene un lenguaje parecido a C, constantes definidas (PI, PHI, E)... bc(1) es otra calculadora, más cómoda para cambiar de bases (ibase y obase). term % echo 7 + 4 hoc term % echo 7 + 4 bc term % result= {echo 7 + 4 bc} term % echo obase=16 ; 77 bc

Test También nos permite Comparaciones Comprobar si existen ficheros y directorios Comprobar permiso para leer, escribir y ejecutar

Constructor de agrupaciones {...} Los comandos se ejecutan como si fuera un único comando. term % { echo hola ; echo adios } > /tmp/afile term % { echo hola ; echo adios } tr o O term % { sleep 100 ; echo tiempo } &

Subshell @{...} Los comandos se ejecutan en un nuevo shell. term % @{ cd /sys/src/cmd ; 8c -FVw ls.c}

For for ( var in lista ) {...} Se itera por cada elemento en la lista. En n-ésima iteración, $var contendrá el n-ésimo elemento de la lista. term % for (i in a b c ) { echo elemento: $i } term % for (i in { ls } ) { echo entrada: $i } term % for (i in { seq 1 10 } ) { echo contador: $i }

If if ( comando ) {...} if not {...} Se ejecutan los comandos si el comando acaba con un estatus correcto. En otro caso, se ejecutan los comandos del if not. No puede haber un if not sin if. term % if ( test -f fich.txt ) { echo si existe } ; if not { echo no existe }

Comparación de cadenas ~ cadena patrón... Compara la cadena con cada patrón. Si algún patrón coincide con la cadena, el status será correcto. En otro caso, el status será erróneo. No confundir con globbing: no se intenta encajar el patrón con los nombres de los ficheros. Para el patrón: *? [] Si cadena es una lista, se pasa a una string. term % if ( ~ term % if ( ~ $var fich1.txt ){echo var es fich1.txt} $var *.txt *.pdf){echo acaba en.txt o en.pdf}

Negación! comando Si el status fue correcto, se cambia a erróneo, y viceversa. term % if (! ~ $var *.txt) { echo var no acaba en.txt }

Switch switch( cadena ){ case patron1;...; case patron2 ;... } Se ejecutan todos los comandos que correspondan al primer patrón con el que encaje la cadena. term % switch( $var ){ case *.txt echo acaba en.txt case *.pdf echo acaba en.pdf case * echo acaba en otra cosa }

And y Or comando1 && comando2 &&... Se ejecuta el siguiente comando si el actual acaba con un status correcto. Al final el status es un AND de todos. comando1 comando2... Se ejecuta el siguiente comando si el actual acaba con status incorrecto. Al final, el status es un OR de todos. term % if ( test -f file1 && test -d dir1 ) { echo existen } term % test -f file1 && test -d dir1 && echo existen

While while ( comando ) {... } Se itera mientras que el comando salga con status correcto. term % while ( test -f /tmp/file ){ echo /tmp/file sigue existiendo sleep 10 } term % while ( sleep 1 ){ # sleep siempre sale bien!!! cat /tmp/file }

Filtros útiles sort ordena las ĺıneas de varias formas. uniq elimina ĺıneas contiguas repetidas. tail muestra las últimas ĺıneas. P. ej: term % ps tail +3 # a partir de la 3 a term % ps tail -3 # las 3 ultimas term % seq 1 1000 sort term % seq 1 1000 sort -n

Tr Traduce caracteres. El primer argumento es el conjunto de caracteres a traducir. El segundo es el conjunto al que se traducen. El enésimo carácter del primer conjunto se traduce por el enésimo carácter del segundo. -d Borra los caracteres del único conjunto que se le pasa como argumento. Se le pueden dar rangos, p. ej. term % cat fichero tr a-z A-Z

Expresiones regulares (regexp) Es un lenguaje formal para describir/buscar cadenas de caracteres. Parecidas a los patrones de la Shell o de globbing, pero más potentes. Una string encaja con sí misma, por ejemplo a con a.

Expresiones regulares (regexp). encaja con cualquier carácter, por ejemplo a. [conjunto] encaja con cualquier carácter en el conjunto, por ejemplo [abc] encaja con a. Se pueden especificar rangos, p. ej. [a-za-z]. [ˆconjunto] encaja con cualquier carácter que no esté en el conjunto, por ejemplo [ˆabc] NO encaja con a, sin embargo sí encaja con z.

Expresiones regulares (regexp) ˆ encaja con principio de ĺınea. $ encaja con final de ĺınea. Una regexp e 1 concatenada a otra regexp e 2, e 1 e 2, encaja con una string si una parte p 1 de la string encaja con e 1 y otra parte contigua, p 2, encaja con e 2. P. ej: az encaja con la regexp [a-d]z

Expresiones regulares (regexp) exp* encaja si aparece cero o más veces la regexp que lo precede. exp+ encaja si aparece una o más veces la regexp que lo precede. P. ej: aaa encaja con la regexp a* baaa encaja con la regexp ba+ bb encaja con la regexp ba* bb no encaja con la regexp ba+

Expresiones regulares (regexp) exp? encaja si aparece cero o una vez la regexp que lo precede. Se utiliza para partes opcionales. (exp) agrupa expresiones regulares. P. ej: az, av, a encajan con la regexp az? abab encaja con la regexp (ab)+ abab, ababab, ababababa encajan con la regexp (ab)+

Expresiones regulares (regexp) exp exp si encaja con alguna de las regexp que están separadas por la barras \ carácter de escape: hace que el símbolo pierda su significado especial. P. ej: aass encaja con la regexp (aass booo) hola* encaja con la regexp a\*

Grep Filtra ĺıneas usando expresiones regulares. -v Realiza lo inverso: imprime las ĺıneas que no encajan. -n Indica el número de ĺınea. -e indica que el siguiente argumento es una expresión.

Sed Es un editor: aplica el comando de sed a cada ĺınea que lee y escribe el resultado por su salida. Sin el modificador -n, escribe todas las ĺıneas después de procesarlas. Comandos: q Sale del programa. d Borra la ĺınea. p Imprime la ĺınea. r Lee e inserta un fichero. s Sustituye. la que más se usa!!!

Sed Direcciones: número actúa sobre esa ĺınea. /regexp/ ĺıneas que encajan con la regexp. $ la última ĺınea. Se pueden usar intervalos: número,número actúa en ese intervalo. número,$ desde la ĺınea número hasta la última. número,/regexp/ desde la ĺınea número hasta la primera que encaje con regexp.

Sed Ejemplos: sed 3,6d borra las ĺıneas de la 3 a la 6 sed -n /BEGIN begin/,/end end/p imprime las ĺıneas entre esas regexp sed 3q imprime las 3 primeras ĺıneas. sed -n 13,$p imprime desde la ĺınea 13 hasta la última. sed /[Hh]ola/d borra las ĺıneas que contienen Hola u hola.

Sed Sustitución sed s/regexp/sustitución/ sustituye la primero subcadena que encaja con la exp. por la cadena sustitución. sed s/regexp/sustitución/g sustituye todas las subcadenas de la ĺınea que encajan con la exp. por la cadena sustitución. sed s/(regexp)regexp.../ \1 sustitución/g usa las subcadenas que encajaron con las agrupaciones en la cadena de sustitución.

Sed Ejemplos sed s/[o-9]/x/ el primer número de la ĺınea se sustituye por una X. sed s/[o-9]/x/g todos los números de la ĺınea se sustituyen por una X. sed s/ˆ([a-za-z]+)[ ]+([A-Z]+)/NOMBRE:\1 NOTA:\2/g hacer mykill.rc

Read Lee una ĺınea de su entrada estándar y lo escribe en su salida estándar. Muy útil si no queremos partir por la salida de un comando con los caracteres de $ifs. Ejemplos: term % echo nombre; n= {read} ; echo tu nombre es $n term % ps while(l= {read}) { echo linea:$"l } NO ES LO MISMO QUE: term % for(i in {ps}) { echo item:$i }

AWK AWK es un lenguaje de programación completo pensado para procesar ĺıneas separadas en campos. Se le puede pasar el programa como parámetro. Lo puede leer de un fichero si usamos el modificador -f ver total.awk

AWK El modificador -F indica el separador de campos, en forma de regexp. Por omisión, se usa [ ]+ term % ls -q awk -F \) { print $2 }

AWK Imprimir: print Sentencia que imprime los operandos. Si se separan con comas, inserta un espacio. Al final imprime un salto de ĺınea. printf() Función que imprime, ofrece control sobre el formato de forma similar a la función de libc para C: term % ls -l awk { printf("size: %08d KBytes\n", $6) }

AWK Variables: $0 La ĺınea que está procesando. $1, $2... El primer, segundo... campo de la ĺınea. NR Número del registro (ĺınea) que se está procesando.

AWK Variables: NF Número del campos del registro que se está procesando. var=contenido Se pueden declarar variables dentro del programa. Con el modificador -v se pueden pasar variables al programa. term % ls -l awk { size=$6 ; printf("size: %08d KBytes\n", size) }

AWK patrón { programa } Actuando sólo en unas ĺıneas, que se ajustan a un patrón, que puede ser: Expresión regular Se procesan las ĺıneas que encajen con la regexp. term % ls -l awk /[Dd]esktop/{ print $1 } term % ls -l awk $1 ~ /[Dd]esktop/ { print $1 }

AWK Expresión de relación Se comparan valores y se evalúa la expresión. term % ls -l awk NR >= 5 && NR <= 10 { print $1 }

AWK Inicialización y finalización: BEGIN{... } patrón{... } END{... }