Programación en Shell Bash

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

PROGRAMACIÓ E SHELL DE LI UX.

Taller de programación shell

PROGRAMACIÓN DEL INTÉRPRETE DE COMANDOS DE UNIX/LINUX

BASH Scripting. Contenidos. BASH: Bourne-Again SHell. Hola mundo!

Scripts en GNU/Linux

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

Shell Script Sistemas Operativos III - ITS EMT - CETP

Inmersión Linux: de 0 a 100 en 30 Horas Tema 4: Shell Scripting. J. Félix Ontañón

Administración UNIX: Programación en bash

LINUX - El intérprete de órdenes II

PROGRAMACIÓN DEL SHELL

Programación shell-scripts 1 LA SHELL

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

Prácticas de Fundamentos del Software

Shell Power!!! Comandos básicos de consola

EJERCICIOS MANEJO DE ESTRUCTURAS BÁSICAS SCRIPTS

Introducción. Ejemplo 1: Variables. Ejemplo 2: Perl (Practical Extraction Report Language).

PROGRAMACIÓN DE LA SHELL DE UNIX/LINUX

PHP: Lenguaje de programación

Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Tipos de Esquema

Creación De Scripts Ejecutables

Problema 1 (3 puntos)

Introducción a Python. Cecilia Manzino

Esquemas repetitivos en Fortran 90

Sistemas Operativos. Bourne Again Shell. Dr. Wenceslao Palma M.

Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;)

Python. Características Básicas

LINUX - Los archivos de órdenes I

Características de JavaScript

JavaScript Básico. Elementos Básicos: Comentarios: Literales: Valores que puede tomar una variable o una constante.

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

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

LINUX - El intérprete de órdenes I

Tema 3. Estructuras de control

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

Informática Ingeniería en Electrónica y Automática Industrial

Linux Principios básicos de uso del sistema [4ª edición]

Curso de PHP. Tema 2: Lenguaje PHP básico

Práctica 1: Intérprete de mandatos. Sistemas Operativos Área de Arquitectura y Tecnología de Computadores

SISTEMAS OPERATIVOS INTRODUCCIÓN. Pedro de Miguel Anasagast

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

Estructuras de Control. Cecilia Curlango Rosas

PROGRAMACION PARAMETRICA LENGUAJE DE ALTO NIVEL. MILTRONICS CNC MACHINES Control Centurion 7. Ing. Roberto Spicacci

INTRODUCCIÓN A SHELL SCRIPT PARA ABRIR BOCA

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

Laboratorio de Arquitectura de Redes. Sentencias de control en lenguaje C

Sesión 1. Comandos básicos. Curso 09/10. Fernando Rincón Escuela Superior de Informática Universidad de Castilla-La Mancha

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

El shell de GNU/Linux

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

PROGRAMACIÓN DEL SHELL

Nombre:... Fecha: / 12 /2010

Introducción a BASH. Francisco Alonso Sarría

FUNDAMENTOS DE INFORMÁTICA

PYTHON. Programación estructurada

Introducción a la programación en PHP

El sistema operativo Linux

Semántica: principales usos. Semántica: principales enfoques. Semántica Operacional. Sintaxis abstracta de un lenguaje (sujeto) Semántica Operacional

66.69 Criptografía y Seguridad Informática TP Shell Scripting en Unix/Linux

Programación con bash

Funciones como parámetros, funciones como resultados. Introducción a la Computación Patricia Borensztejn Clase 26

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

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

Objetivos y Temario CURSO LINUX. PRINCIPIOS BASICOS

Introducción a Python Qué es Python?

SEMANA N 9 NOMBRE EXPERIENCIA: Funciones, variables y arreglos en BASH UNIDAD DE APRENDIZAJE: Introducción a los SCRIPTS

Ejercicios sobre tuberías

PRÁCTICA 20 MANDATOS DE TRATAMIENTO DE CADENAS. CREACIÓN DE SCRIPTS DE SHELL SENCILLOS

ING1310 Introducción a la Computación. Python. Conceptos Básicos. Carlos Reveco

Resumen de comandos usuales de Unix y uso básico del shell bash

Tema 7: Shell Scripting

La resolución de problemas es una tarea únicamente humana comprobable en todos los casos con los mismos resultados.

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

Transcripción:

Redes de Area Local Miguel Ortuño <miguel.ortuno@urjc.es> Curso 2007 2008 Introducción 1 Introducción comans, programas de usuario, procesamiento de ĺıneas, etc. a="hola mun" echo $a Un fichero de texto con permiso ejecución, empieza por #!, es ejecuta por /bin/bash

Introducción (cont.) 2 En la mayoria de los lenguajes modernos Las cadenas se entrecomillan Un identificar de variable es secuencia de letras y digitos Las cadenas se concatenan con algun operar print "hola, soy " + nombre put_line("hola, soy " & nombre); # python --ada Introducción (cont.) 3 bash es diferente Las variables empiezan por $ cuan son referenciadas No llevan $ en la asignación No puede haber espacios antes y despues del igual Los $ se interpretan en el interior de comillas bles nombre="juan Pérez" echo hola, soy $nombre echo "hola, soy $nombre"

Introducción (cont.) 4 bash es diferente No hace falta operar para concatenar cadenas (to son cadenas) cp $nombre_fichero $nombre_fichero.bak Para evitar algunas ambigüedades, puede ser necesario poner el nombre de la variable entre llaves singular=perro plural=${singular}s echo $singular, $plural Comillas bles 5 Comillas bles La shell interpreta los $ y considera 1 argumento lo que va entre comillas bles. En algunos casos resulta equivalente ponerlas u omitirlas Ej: echo saca por stut tos sus argumentos echo me llamo $nombre el coman echo recibe 3 argumentos echo "me llamo $nombre" el coman echo recibe 1 argumentos

Comillas bles (cont.) 6 En otros, no Ej:El primer argumento de grep es el patrón, el resto, los ficheros nde buscarlo grep "la mancha" quijote.txt el coman grep recibe 2 argumentos grep la mancha quijote.txt el coman grep recibe 3 argumentos Busca la cadena la en el fichero mancha y en quijote.txt Comillas bles (cont.) 7 fichero="mi fichero" touch $fichero #crea o cambia la fecha a s ficheros: mi y fichero fichero= mi fichero touch "$fichero" #crea o cambia la fecha el fichero mi fichero

paso de parámetros 8 paso de parámetros $0 Nombre del script $1 Primer argumento $2 Segun argumento [...] $* Tos los argumentos (exclui $0) $# N o de argumentos (exclui $0) $$ pid del proceso. (Uso típico: Identificares únicos) echo "primer parametro que recibo: $1, segun: $2, total $#" echo "la lista completa de parametros es $*" paso de parámetros (cont.) 9 condicional Cada programa devuelve s cosas diferentes e independientes Texto por stut y stderr El exit status: Un valor cierto o falso, según considere que ha teni éxito o ha fracasa. Este valor lo puede ler el condicional if grep hidalgo quijote.txt then echo si else echo no fi

paso de parámetros (cont.) 10 if ping -c1 mazinger && ping -c1 localhost then echo si else echo no fi && y lógico o lógico! negación paso de parámetros (cont.) 11 Expresiones bash no sabe comparar, necesita test if test 2 -eq 2 then echo iguales else echo distintos fi if [ garcia \< fernandez ] then echo mayor else echo no mayor fi Atención: Debe haber espacios antes y después del corchete

(cont.) 12 test -z cadena # cadena vacia? test -n cadena # cadena no vacia? test cadena1 = cadena2 test cadena1!= cadena2 test cadena1 \< cadena2 test cadena1 \> cadena2 test a -eq b # el entero a es igual a b? test a -ne b # no igual? test a -lt b # menor que? test a -le b # menor o igual? test a -gt b # mayor que? test a -ge b # mayor o igual? test -e fichero # Existe el fichero? test -f fichero # Es normal? (Ni dir ni dev) 13 test -d fichero test -r fichero test -x fichero test -w fichero # es un dir? # existe y legible por usuario? # existe y ejecutable por usuario? # escribible por el usuario? if test -z $mi_variable then echo "cadena nula" >&2 #mensaje a stderr else echo "cadena no nula" fi

(cont.) 14 bash no sabe operar expr 5 \* 3 echo "2 * 2" bc echo $((2+2)) (cont.) 15 read read variable Lee una ĺınea de stdin y la asigna a una variable. Devuelve cierto si hay texto en stdin Devuelve falso cuan llega fin de fichero en stdin echo Dime tu nombre read nombre echo hola $nombre

(cont.) 16 bucles while while true sleep 1 echo -n "tic" sleep 1 echo " tac" ne (cont.) 17 a=0 while [ $a -lt 10 ] echo $a a=$(($a+1)) ne

(cont.) 18 while read linea echo $linea ne while read linea echo $linea ne < quijote.txt (cont.) 19 Cuida con los bucles despues de un pipe. Es preferible evitarlos: el bucle se ejecuta en una segunda shell, con su propio espacio de nombres mi_variable=0 echo hola while read auxiliar #DESACONSEJADO echo $auxiliar mi_variable=1 ne echo "mi_variable vale $mi_variable" El resulta es: mi_variable vale 0

(cont.) 20 seq Los bucles que en la mayoría de los lenguajes se harían con for, en bash pueden hacerse con seq seq 0 9 seq 9-1 0 #bucle de 0 a 9, ambos incluis #bucle de 9 a 0, ambos incluis (cont.) 21 bucles for Muy distinto a otros lenguajes Recorre los parámetros recibis de ĺınea de comans for i echo "recibo el parametro $i" ne

(cont.) 22 Recorre las palabras de una cadena for i in "perro zapato tomate" echo "el $i" ne Atención: for itera sobre todas las palabras de una cadena. Para procesar ĺınea a ĺınea, debe usarse while read... (cont.) 23 Es típico usar metacaracteres. Entonces la shell los expande, con los nombres de los ficheros en el directorio actual que encajen en el patrón for i in * echo $i ne for i in *.bak rm $i ne

(cont.) 24 source Equivale a coman punto. Importa código dentro del script actual. Las variables usadas en el script importa serán por tanto variables del script actual. Tras ejecutarse el script importa, el script actual continúa.. ~/.bashrc # Ejecuta el código de.bashrc # en el entorno actual source ~/.bashrc # Forma equivalente (cont.) 25 exec Invoca a otro programa. El proceso actual desaparece, es reemplaza por el otro exec mi_script echo Esta linea nunca se muestra, no se vuelve de un exec

(cont.) 26 exit Concluye el script actual Se le puede pasar como argumento un valor entre 0 y 255: el exit status 0: Cierto. To ha i bien 1-255: Falso. Algún error Algunos valores están reservas, por convenio (exit codes with special meanings) El programar puede usar libremente los valores 3-125, 166-254 exit true exit 14 (cont.) 27 Comillas Comilla invertida (comilla grave, comilla de ejecución)... Se ejecuta... y el resulta reemplaza... Los retornos de carro se reemplazan por espacios Comilla recta...... se toma literalmente Comilla ble...... se toma literalmente, tras interpretar $ $() equivale a comilla invertida

(cont.) 28 Atención a la tipografía: El aspecto de la comilla normal (recta) y de la invertida puede cambiar con el tipo de letra El significa de ambas es completamente distinto comilla invertida (La que abre comillas, a la dcha. de la p en el tecla) comilla recta (a la dcha. del cero en el tecla) (cont.) 29 Ejemplo 1: a=ls echo $a echo "$a" echo $a #Comilla recta #Comilla ble #Comilla invertida Ejemplo 2: ls a=ls a= ls ls #Llama al coman ls, genera un lista #ls a la dcha de =, la vble contiene una l y una s #la vble contiene un lista, sin retornos de carro #Intenta ejecutar el primer fichero del lista, #pasanle el resto como argumento

(cont.) 30 Funciones mi_suma(){ rval=$(($1+$2)) } mi_suma 3 2 echo $rval La función debe declararse antes de ser usada Los parámetros se pasan por valor (cont.) 31 La forma menos mala de que una función bash devuelva un valor es con una variable global Recomendaciones: Usar siempre la misma variable global para todas las funciones del script (p.e. rval ) No usar esta variable global para ninguna otra cosa Formas alternativas de devolver un valor Usar return. Pero solo sirve para enteros entre 0 y 255 Usar stut y capturarlo. Pero entonces dentro de la función no podemos usar stut para ninguna otra cosa Usar otros ficheros

(cont.) 32 Depuración La opción -x muestra una traza de cada orden y de su resulta Traza de to el script -x echo hola mun Resulta de la ejecución: + echo hola mun hola mun Forma alternativa: bash -x holamun.sh (cont.) 33 Traza de parte del script: set -x #activamos la depuración echo codigo que falla set +x #desactivamos la depuración echo codigo que funciona

Ejercicio 34 Ejercicio Fichero con notas fgarcia amartin jcano apto no apto no apto Realizar un script bash que: 1. Reciba como primer argumento el nombre del fichero con las notas 2. Cuente n o de presentas y n o aprobas 3. Envie a cada estudiante correo con su nota, n o de presentas, el n o de aprobas 35 if test $# -ne 1 then echo Uso: >&2 echo $0 fichero_de_notas>&2 exit fi suspensos=$(cat $1 grep "no apto" wc -l) presentas=$(cat $1 wc -l) aprobas=$(($presentas - $suspensos))

36 logins=$(cat $1 cut -d -f1 ) for login in $logins su_nota=$(grep $login $1) estadisticas="presentas: $presentas, Aprobas:$aprobas" echo $su_nota. $estadisticas mail $login@pantuflo.es ne Enlaces 37 Enlaces Sobre este tema hay muchísima cumentación. Entre la disponible en el web recomendamos Luis Cearra. Sistemas Abiertos Mark Burgess. The Unix Programming Environment