Un pequeño manual de Shells

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

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

Programación shell-scripts 1 LA SHELL

LINUX - Los archivos de órdenes I

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

Shell Script Sistemas Operativos III - ITS EMT - CETP

El sistema operativo Linux

LINUX - El intérprete de órdenes II

PROGRAMACIÓN DEL SHELL

Instituto Tecnológico de Las Américas (ITLA)

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

Funciones & Estructuras de control

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

PROGRAMACIÓN DE LA SHELL DE UNIX/LINUX

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

Creación de Scripts. Qué es un script? Como funciona un shell script en Linux?

CAR. Responsable : María del Carmen Heras Sánchez. Asesores Técnicos : Daniel Mendoza Camacho Yessica Vidal Quintanar.

Las características principales de la shell son las siguientes:

Programación con bash

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

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

Uso básico de la terminal

Creacion de Script. Que es un Script?

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

TEMA 7: Ficheros. TEMA 7: Ficheros Concepto de fichero

Ficha de Aprendizaje N 13

TEMA 2: Sistemas Operativos

MANUAL DE RUBY (PARTE I) Luis José Sánchez González

Manual de turbo pascal

Nombres de archivo. Sistemas Operativos III - ETB EMT - CETP

Introducción a Linux

CURSO: SISTEMA OPERATIVO LINUX, ADMINISTRACIÓN Y CONFIGURACIÓN

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

Curso de administración de sistemas GNU/Linux Módulo de Bash scripting Construcciones if-then-else-fi y comparaciones.

Comandos. Sistemas Operativos III - ETB EMT - CETP

INDICE Parte 1. Visual Basic Capitulo 1. Qué es Visual Basic? Capitulo 22. Mi Primera Aplicación Capitulo 3. Elementos del lenguaje

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

Introducción a Matlab

LINUX: Guiones Shell (Shell scripts)

Sistemas Operativos: Programación de Sistemas. Curso Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J.

CREACIÓN DE SCRIPTS EN LINUX

Estructuras de Control

PHP. Introducción (1) Introducción (3) Introducción (2) PHP 1

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

Cuando no está abierto ningún menú, las teclas activas para poder desplazarse a través de la hoja son:

Introducción a Linux. II.

GUÍA BÁSICA DE SCHEME v.4

Creación de imágenes. Pablo Sanz Mercado.

Estructuras de control

MATEMÁTICAS PARA LA COMPUTACIÓN CAPÍTULO 1. SISTEMAS NUMÉRICOS

PHP: Lenguaje de programación

Práctica 1ª: Introducción a Matlab. 1er curso de Ingeniería Industrial: Ingeniería de Control

Índice general. Capítulo 1 Conceptos básicos. Capítulo 2 Controles básicos I. Pág. N. 1

Introducción a Matlab.

1. Introducción Linux. 2. Comandos de Linux Comandos básicos

UNIVERSIDAD NACIONAL SAN ANTONIO ABAD DEL CUSCO CARRERA PROFESIONAL DE INGENIERIA ELECTRONICA LINUX AVID ROMAN GONZALEZ

INTRODUCCIÓN BÁSICA AL SISTEMA OPERATIVO UNIX

Las Etapas de la Compilación

REFERENCIA DEL LENGUAJE

El lenguaje C. 1. Identificadores, constantes y variables

Temario Programación Web para Web

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

FÓRMULAS Y FUNCIONES

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Guía práctica de estudio 05: Diagramas de flujo

MANUAL RAPIDO DE UNIX

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

El Sistema Operativo Linux

Parte 4: Estructuras de Control

Elementos de un programa en C

Denme un shell y moveré al mundo! o Por qué la linea de comandos no es una interfaz anticuada?

SAGE (ENTORNO DE CÁLCULOS MATEMÁTICOS)

FUNCIONES PHP: DECLARACIÓN Y LLAMADAS. PARÁMETROS, RETURN. EJERCICIOS EJEMPLOS RESUELTOS. (CU00827B)

Taller de Informática I Dpto. Computación F.C.E. y N. - UBA 2010

Guía Comandos Básicos sobre Unix/Linux

Programando Scripts en Bourne Shell

GLOSARIO DE MICROSOFT VISUAL BASIC (HAZ CLIC EN LA OPCION DEL MENU Y ACCEDERAS RAPIDAMENTE)

Microsoft Visual Studio está basado en.net framework. Definiciones de.net Framework:

1. Visualización de datos con Octave

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

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

DISPONE DE 50 MINUTOS PARA REALIZAR EL EJERCICIO

En este artículo vamos a conocer los tipos de datos que podemos manejar programando en C.

Unidad 21: Resumir los datos

Existe en cualquier sistema operativo parecido a UNIX y forma parte de la instalación predeterminada de Linux.

Práctica 1: Desarrollo de una aplicación basada en Bluetooth

Vamos a profundizar un poco sobre los distintos tipos de datos que podemos introducir en las celdas de una hoja de cálculo

Microsoft Excel 2010 Completo + Profesional

PROPIEDADES DE LOS CAMPOS. Cada campo de una tabla dispone de una serie de características que proporcionan un control

Laboratorio de Redes 1

PROGRAMA FORMATIVO. Administración de Sistemas Solaris y Oracle Linux con Shellscript

DESCRIPCIÓN ESPECÍFICA NÚCLEO: COMERCIO Y SERVICIOS SUBSECTOR: INFORMÁTICA

66.69 CRIPTOGRAFÍA Y SEGURIDAD INFORMÁTICA

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

Curso de verano. Biología Computacional: Análisis masivo de datos ómicos

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL

TEMA 4. ESTRUCTURAS DE CONTROL

PRACTICA II: INTRODUCCION A LOS SISTEMAS OPERATIVOS TIPO UNIX.

Tema: Funciones en Excel (III) Funciones de fecha y hora Las fechas son a menudo una parte crítica de análisis de datos

Nodo Nacional de Bioinformática

Transcripción:

Documento Grupo de Meteorología, Santander (CSIC-UC) D-GMS:2009.1 Un pequeño manual de Shells L. Fita Grupo de Meteorología, Universidad de Cantabria, Spain versión:2 Septiembre 2009 correspondencia: lluis.ta@unican.es Resumen Con las shells o scripts se consigue la automatización de qualquier coman o acción que se ejecute en linux. Esto permite crear sistemas muy complejos de ejecución que otorgan una gran potencialidad al sistema operativo linux. En estas notas se introducen los concetos básicos para empezar a desarrollar shells. 1. Introducción Sin lugar a dudas, una de las potencialidades del Linux es su línea de comans. Aunque para muchos usuari@s entorno gráco -dependientes lo puedan encontrar una aberración. Da que la mayoría de aplicaciones de linux se pueden ejecutar desde la línea de comans, con los shells o scripts podemos automatizar, sincronizar o relacionar dichas aplicaciones. Para los usuari@s con más antigüedad equivaldrían a los antiguos archivos de lotes (los viejos.bat). Hay muy pocas limitaciones en cuanto a uso de los shells en linux. Su principal problema es el poco control de errores que ofrece y la dicultad de interpretación/búsqueda de errores de scripts heredas. Al estar basada en comans directos del sistema operativo, no precisa de la instalación de ningún software/paquete extra. Es un lenguaje bastante intuitivo y la dicultad suele recaer mas en saber qué instrucción del sistema operativo utilizar y el manejo de la misma. Esto hace muchas veces que shells que hagan los mismo hay tantas como usuari@s de linux... El linux ofrece varias shells distintas: ksh, csh, tcsh, Bourne Shell, etc. que tienen pequeñas diferencias de lenguaje. La mas primitiva es la Bourne Shell y de las más avanzadas la tcsh. En esta nota técnica, sólo se dan unas pinzeladas de lo que se puede hacer con la shell. Se recomienda encarecidamente visitar manuales más extensos para aprofundizar en su conocimiento (mirar anexo). 2. Comans en bash La primera instrucción que se pone en un Shell-script es que shell queremos utilizar. Para utilizar la bash, en la primera línea se escribe: (por regla general, los archivos de bash se les pone la extensión.bash) NOTAS: 1. Esta instrucción no seria necesaria de por sí, ya que se pueden ejecutar las scripts llamánlos directamente con la shell necesária por ejemplo: /bin/bash archivo.bash 2. La línea de comans ya tiene por defecto una shell, que puede coincidir con el tipo de lenguaje utiliza en la script. Para saber que shell se dispone por defecto se ejecuta el coman: echo $SHELL En lo que sigue, las escripts se describirán con la llamada a la shell en su encabezamiento. Para hacer que una script sea ejecutable le tendremos que dar permisos de ejecución. Para eso. chmod +x archivo.bash Los carácteres básicos en una script. # comentario \ continuación de instrucción a la siguiente línea ; poner s instrucciones en la misma línea captura de salida de la instrucción anterior para la siguiente (pipe) > captura de la salida de un coman a un chero de salida (normalmente) >> captura de la salida de un coman a un chero de salida (normalmente) a partir de la última línea & ejecución de un coman liberan el terminal (sin esperar su nalización, en mo background ) $() captura el valor de la instrucción que esté entre paréntesis 2.1 Instrucciones básicas Las instrucciones mas básicas de shell son: echo: Con ella se escribe la salida en pantalla echo "Hola mun" Hola mun variables: Las variables en una script no se tienen que declarar. Por lo gerneral no hay tipos de variables y su tratamiento dependerá con que coman las tratemos.

Manual de Shell 2 Las variables en una script se llaman con el símbolo $. Así se llamaría a pi como $ pi o ${pi}. NOTA: El nombre de una variable de shell no puede empezar con un número. Así por ejemplo: #/bin/bash pi=3.141593 echo "pi= "${pi}" el numero" pi= 3.141593 el numero condicionales: if: Con ella se hacen las estructuras condicionales mas simples. Su estructura es del tipo: if test [condicion] El análisi de la condición se hace por medio de distintas opciones, algunas de las cuales se detallan: -a El archivo existe -d El archivo existe y es un directorio = Los strings son iguales -eq, -ne, -lt, -le, -gt, -ge comparaciones aritméticas estándares Al escribir if test! [condición] la condición pasa a ser falsa. Un ejemplo con la instrucción. num1=1 num2=3 if test $num1 -gt $num2 echo "El numero 1 es mas \ grande que el 2" echo "num1 > num2 -->"${num1}\ " > "${num2} echo "El numero 1 es mas \ pequeno que el 2" echo "num1 < num2 -->"${num1}\ " < "${num2} El numero 1 es mas pequeno que el 2 num1 < num2 >1 < 3 case: Con ella se hacen estructuras de múltiples opciones. Su estructura es del tipo case [variable] in [opci\ on 1]) [opci\ on 2]) [opci\ on n]) *) [tos los otros valores] Un ejemplo muy básico con un programa de referncia que se va a llamar romanos.bash: num=3 rom= i palabra= romano 2) rom= ii 3) rom= iii 4) rom= iv 5) rom= v echo "Tenemos "${num}${palabra}\ Tenemos 3 romanos: iii Bucles: Hay distintas maneras de hacer un bucle. Las mas usuales son: for: Con este se hacen bucles normalmente a un tipo de opciones. Su estructura general es la que sigue: for [variable] in [grupo de valores] ne También se dispone de las instrucciones continue/break while: Con este se hacen bucles meintras que la condición se cumpla, su estructura básica: while [condici\ on] ne Un ejemplo básico de bucle añadiénlo en el ejemplo anterior: numeros= 3 4 1 2 for num in $numeros rom= i palabra= romano 2) rom= ii

Manual de Shell 3 3) rom= iii 4) rom= iv 5) rom= v echo "Tenemos "${num}" "${palabra}\ ne Tenemos 3 romanos: iii Tenemos 4 romanos: iv Tenemos 1 romano: i Tenemos 2 romanos: ii read: Con esta instrucción se interactúa con el usuario esperan la entrada en el terminal. En el ejemplo anterior se añade (quitan el bucle): echo "Quantos romanos tenemos?" read num (...) echo "Tenemos "${num}${palabra}\ Por ejemplo: Cuantos romanos tenemos? 3 Tenemos 3 romanos: iii exit: Con esta instrucción paramos la ejecución de una script. Si en el ejemplo anterior se añade una condición mas en el case 6) echo "Hay demasias romanos!" exit Nos daría: Cuantos romanos tenemos? 6 Hay demasias romanos! sleep: Con esta instrucción paramos una script un determina número de seguns [n]. Su semántica: sleep [n] 2.1.1 Funciones En las shells es también recomendable hacer y trabajar con funciones. Se adjunta un ejemplo muy sencillo: suma () { arg1=$1 arg2=$2 val= expr $arg1 + $arg2 echo $val } echo "Dame a" read a echo "Dame b" read b echo "su suma: "$(suma $a $b) Nos da: Dame a 1 Dame b 2 su suma: 3 2.2 Argumentos Las scripts de Shell tienen la capacidad de poder trabajar hasta con 9 argumentos cuan se las llama des de la línea de comans. Dentro de la script se las llama cómo $1, $2,..., $9. Se considera argumento a cada palabra (conjunto de carácteres separas por un espacio) que sigue a la script. Dentro de la script tenemos otras variables relacionadas con $, tales como: $0 Nombre de la script ejecutánse $* Argumentos mandas a la script $# Número de argumentos pasas a la script Asi por ejemplo retocan el código de la script anterior. echo "Script: "$0 echo "Argumentos: "$* echo "Numero de argumentos: "$# num=$1 palabra=$2 rom= i 2) rom= ii 3) rom= iii 4)

Manual de Shell 4 rom= iv 5) rom= v 6) echo "Hay demasias "${palabra} exit echo "Tenemos "${num}" "${palabra}\ Nos da: 4 galo Script: Argumentos: 4 galo Numero de argumentos: 2 Tenemos 4 galos: iv Hay otras variables estándard de linux que se pueden llamar des de una script. Unas cuantas son (para bash): $HOME: Home del usuario $HOSTNAME: Nombre de la máquina $SHELL: Shell que interpreta los comans $PATH: Path del sistema $LANG: Lenguaje del sistema $PWD: Actual posición en el sistema de archivos $RANDOM: Un número aleatorio entre 0 y 32767 3. Interacción con instrucciones linux Las scripts pueden interactuar con qualquier coman de linux. Algunos ejemplos muy senzillos se detallan a continuación. Se recomienda mirar la aydua en línea (man instruicción) de estas y de muchas mas instrucciones que estan en la línea de comans. Las salidas de las insrtucciones se pueden tratar de distintas maneras, algunas de ellas: coman: Salida en pantalla de los resultas coman > archivo: Se captura la salida del coman en un chero coman >> archivo: Se captura la salida del coman en un chero volcan su conteni después de la última línea variable= coman : Se almacena la salida del coman en la variable expr: Con este coman se hacen operaciones entre variables. Es de las maneras mas senzillas de hacer operaciones. Las operaciones numéricas se hacen solo con numeros enteros. Es una instrucción sencilla, pero muy completa. Entre sus funciones estan expr [num1] [+-*/%] [num2]: Sumar, restar, multiplicar, dividir y dar el resto entre el número [num1] y el [num2] expr substr [variable] [In] [Nc]: De la variable [variable] des de su caracter [In] dar [Nc] carácteres expr length [variable]: Longitud de [variable] expr index [variable] [c]: Da la posición del carácter [c] en [variable] pwd: Da la posición actual en el sistema de archivos (igual que $PWD) date: Permite trabajar con fechas. grep: Nos selecciona/deselecciona esas líneas de un chero que contengan una palabra dada sed: Es una herramienta muy potente. Una de sus funcionalidades es que nos permite substituir palabras espcícas dentro de un chero cat: Esta instrucción nos da por pantalla el conteni de un chero. Conteni de un chero. ls -l * > cheros.inf ## La fecha de hoy en formato ## [aaaa]-[mm]-[dd] hoy= date +%Y-%m-%d echo "Los cheros del directorio \ que tienen fecha de hoy:" cat cheros.inf grep ${hoy} -rw-r r 1 lluis lluis 1619 2009-09-30 10:30 datos2.inf -rwxr-xr-x 1 lluis lluis 2707 2009-09-30 10:29 datos.inf -rw-r r 1 lluis lluis 80 2009-09-30 10:27 gmuc 2009 12.aux -rw-r r 1 lluis lluis 26368 2009-09-30 10:27 gmuc 2009 12.dvi -rw-r r 1 lluis lluis 15587 2009-09-30 10:27 gmuc 2009 12.log -rw-r r 1 lluis lluis 53518 2009-09-30 10:27 gmuc 2009 12.pdf -rw-r r 1 lluis lluis 15807 2009-09-30 10:34 gmuc 2009 12.tex -rwxr-xr-x 1 lluis lluis 186 2009-09-30 10:34 hoy.bash Escrivir un chero des de una script. La etiqueta EOF indica hasta nde está el conteni del chero. ( cat << EOF EOF ) > chero wc: Contar de líneas, palabras y carácteres tail: Nos da las [n] líneas últimas de un chero head: Nos da las [n] líneas primeras de un chero Un ejemplo un poco semnzillo con algunas de las interacciones se muestra a continuación (llama instrucciones.bash): if test $1 = -h echo "*****************************" echo "*** Shell para dar los ***" echo "*** los cheros que ***" echo "*** cumplan una condicion ***"

Manual de Shell 5 echo "*** dada y con un nombre ***" echo "*** de una longitud ***" echo "*** superior dada hay ***" echo "*** en un directorio ***" echo "*****************************" echo "instrucciones.bash DIR \ (directorio) CON (condicion) \ LON (longitud)" cheros= ls -1 $1/*$2* for chero in ${cheros} flong= expr length ${chero} if test ${flong} -ge $3 echo "Fichero: "${chero}" \ longitud de su nombre: "${flong} ### Fin de los cheros encontras ne Captura: En el siguiente ejemplo se da el tercer y séptimo elemento de la instrucción ls -l ls -l awk {print $3 $7} Funciones: Se contruyen a partir de las instrucciones BEGIN y/o END. Un ejemplo es la función column.awk, la cual da la columna [col] de la línea [row] de un chero/instruccion: # Gives the value at a given row # and column of a matrix # col: Col number # row: Row number // { num_rows++; column[num_rows] = $col } END {print column[row]} La llamada de esta función podria ser: ls -l awk -f olumn.awk row=3 col=7 En el ejemplo anterior se a puesto una primera condición if con la que obtenemos la descripción de la script en la misma línea de comans. Nos da:./instrucciones.bash /usr/bin a 43 Fichero: /usr/bin/gnome-default-applicationsproperties longitud de su nombre: 46 Fichero: /usr/bin/nautilus-le-managementproperties longitud de su nombre: 44 Fichero: /usr/bin/rarian-sk-get-extendedcontent-list longitud de su nombre: 44 Fichero: /usr/bin/scrollkeeper-get-index-fromcpath longitud de su nombre: 44 O bien./instrucciones.bash -h ******************************** ** Shell para dar los *** ** los cheros que *** ** cumplan una condicion *** ** dada y con un nombre *** ** de una longitud *** ** superior dada hay *** ** en un directorio *** ********************************* instrucciones.bash DIR (directorio) CON (condicion) LON (longitud) Un ejemplo bastante mas completo está en el apéndice llama sinus hoy.bash 3.1 AWK Con este programa se gana un entorno similar al C para trabajar con contenis de cheros o con salidas de intrucciones. Además permite la creación de funciones las cuáles podemos llamar dentro de una script. Tiene una semántica própia distinta a la de Shell. Opera con números reales, funciones matemáticas, formatos de salids, etc. Es muy completo y extenso, se dan tres ejemplos muy senzillos:

Manual de Shell 6 Anexo A. Manuales Básico: ttp://www.gnu.org/software/bash/manual/bashref.html Wiki: Principiantes http://es.wikibooks.org/wiki/el_manual_de_bash_scripting_bsico_para_ Avanza: http://tldp.org/ldp/abs/html/ AWK: http://www.vectorsite.net/tsawk.html B. sinus hoy.bash if test $1 = -h echo "***************************" echo "*** Shell para dinujar ***" echo "*** una curva sinusoide ***" echo "*** en funcion del ***" echo "*** segun y el minuto ***" echo "***************************" echo "sinus_hoy.bash N (numero de frames) SALT (salto entre frames [seg])" istep=1 while test $istep -le $1 ## La hora, minuto y segun de hoy ## en formato [hh], [mm] y [ss] Hhoy= date +%H Mhoy= date +%M Shoy= date +%S ## Generacion de un archivo GNUplot ( cat << EOF set terminal png set output sinus_hoy_@hh@@mm@@ss@.png A=@HH@/24. B=@MM@/30. C=@SS@/30. set xrange[-3*pi:3*pi] set label sprintf("a= %.3g", A) at graph 0.1, 0.9 set label sprintf("b= %.3g", B) at graph 0.1, 0.85 set label sprintf("c= %.3g", C) at graph 0.1, 0.8 plot A*sin(B*pi+C*x) t "Asinus(Bpi+C*x)" w l lt 1 lw 3 EOF ) > sinus_hoy.gnu ## Substitucion de las variables ## por sus valores sed -e s/ @HH@ / ${Hhoy} /g sinus_hoy.gnu > stepa.inf sed -e s/ @MM@ / ${Mhoy} /g stepa.inf > stepb.inf sed -e s/ @SS@ / ${Shoy} /g stepb.inf > sinus_hoy_${hhoy}${mhoy}${shoy}.gnu ## Dibujo de la graca ## gnuplot sinus_hoy_${hhoy}${mhoy}${shoy}.gnu

Manual de Shell 7 ## Visualizacion ## display sinus_hoy_${hhoy}${mhoy}${shoy}.png & ## Se dejan pasar $2 seguns sleep $2 ## Se elimina la visualizacion killall display istep= expr $istep + 1 ### Fin del bucle ne ## Vacia del directorio sleep $2 rm *.png rm *.gnu