1 / 150

Dpto. Informática y Automática

Programación en Shell. Rodrigo Santamaría Vicente. Dpto. Informática y Automática. Contenidos. Introducción a la shell Programación básica en bash Programación avanzada sed y awk Referencias. Introducción a la Shell. ¿Qué es una shell? Tipos de shell Usos de la shell

cheng
Download Presentation

Dpto. Informática y Automática

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programación en Shell Rodrigo Santamaría Vicente Dpto. Informática y Automática

  2. Contenidos • Introducción a la shell • Programación básica en bash • Programación avanzada • sed y awk • Referencias

  3. Introducción a la Shell

  4. ¿Qué es una shell? • Tipos de shell • Usos de la shell • Variables de entorno

  5. ¿Qué es una shell? • Interfaz entre el Sistema Operativo y el usuario • Dos tipos • Gráfica • Línea de Comandos • CLI (Command Line Interface) • intérprete de comandos, terminal, consola shell (ʃɛl/) – noun 1.a hard outer covering of an animal, as the hard case of a mollusk, or either half of the case of a bivalve mollusk.

  6. Shell Gráfica

  7. Shell de Línea de Comandos Generalmente con shell nos referimos a una CLI de Unix

  8. Gráfica vs Texto

  9. Tipos de shell • Bourne shell (sh) • 1977. Stephen Bourne, Bell Labs. • C Shell (csh) • 1980. Bill Joy, Berkeley • Korn Shell (ksh) • 1980. David Korn, Bell Labs. • Bourne again shell (bash) • 1987. Brian Fox, GNU Project

  10. Bourne Shell (sh) • La más antigua • No tiene características interactivas • Historia de comandos • Autocompletar nombres de ficheros • … • No tiene estructuras complejas de programación • Funciones • Case • …

  11. C Shell (csh) • Sintaxis como el lenguaje C • No compatible con la familia Bourne • Capacidades interactivas • Pausar/reiniciar procesos • Historia de comandos • Operaciones matemáticas

  12. Korn Shell (ksh) • Sustituye y es compatible con Bourne • Características interactivas como C, pero mejoradas • Añade edición de líneas de la historia • Ejecución más rápida

  13. Distribuciones

  14. POSIX shell • Similar a ksh y utilizada por HP-UX • 95% compatible con Bourne shell • Como ksh, integra características de la csh, mejoradas (histórico de comandos, autocompleción, operaciones aritméticas…) • Las diferencias con bourne shell son menores • Las diferencias entre POSIX y ksh son mínimas: • http://docs.hp.com/en/B2355-90046/ch15s03.html

  15. Multiplicidad de las shells • Ante el mismo sistema operativo, podemos tener varias shells activas al mismo tiempo • Gráficas y de texto (Linux) • De texto en distintos terminales • $$ indica el PID de la shell en ejecución • ps para ver los PID de todos los procesos en ejecución • $SHELL nos indica el tipo de shell que estamos usando • /etc/shells es un fichero con todas los tipos de shell disponibles en el sistema

  16. Usos de la sh • Intérprete de comandos: ejecutar comandos desde el intérprete • Scripts: ejecutar secuencias de comandos desde un fichero • Programas: control del flujo de ejecución de secuencias de comandos (bucles, condiciones, variables, etc.) desde un fichero

  17. Intérprete de comandos • Sintaxis típica • comando [-]opciones parámetros • Opciones: dependen de cada comando y alteran su funcionamiento • Parámetros: variables de entrada que necesita el comando, separadas por espacios • ps –fu • ls file.txt • grep “*.txt” ../folder

  18. Procesamiento secuencial • El sistema completa cada comando antes de ejecutar el siguiente: date ps –fu who

  19. Procesamiento secuencial • date; “ps –fu”; who

  20. Procesamiento no Secuencial • Cada programa se ejecuta sin esperar a que el anterior termine date & “ps -fu” & who date ps who ps date who

  21. Redirección de E/S • > Escribe la salida estándar a fichero • < Lee la entrada estándar de fichero • >> Añade la salida estándar a un fichero existente • > y >> crean el fichero si no existe • < da error si el fichero no existe

  22. Tuberías (pipes) • Conectan la salida de un programa a la entrada del siguiente • ls | more  ls > temp; more < temp

  23. Shell script • Simplemente, poner en un fichero órdenes que se puedan ejecutar en el intérprete de comandos • Para editar el fichero, se puede usar cualquier editor (típicamente vi) • Ejemplo: editar un fichero con la línea: • date; who; ps uf; du /home • Ejecutar con: • sh nombreScript

  24. Trucos • Si se usa vi, lo ideal es tener dos consolas abiertas, una para edición y otra para ejecución • Para poder ejecutar un fichero como script, debemos tener permisos de ejecución • chmod +x nombreFichero • Otros modos de ejecución: • ./nombreScript • nombreScript si se encuentra en el PATH

  25. Fichero .profile • Script(s) que se ejecuta automáticamente al hacer login • Se encuentran en el directorio raíz del usuario • Establece el “entorno” de trabajo

  26. Variables de entorno

  27. Variables de entorno • Para acceder al valor $VAR • Para imprimir el valor echo $VAR • Para cambiar el valor VAR=valor • Los cambios a las variables de entorno no se mantienen para otras shells a no ser que se incluyan en el .profile o se utilice export • Ejercicio • Establecer en el PATH la ruta de la carpeta donde almacenaremos los scripts

  28. Programación básica en Bourne Shell

  29. Introducción • Variables • Parámetros • E/S • Condiciones • Bucles • Funciones • Operaciones aritméticas • Depuración

  30. Programación Shell • Scripts donde introducimos conceptos propios de la programación • Variables • Parámetros • Condiciones • Bucles • Funciones • Operaciones aritméticas • Los comandos disponibles de la shell actúan como nuestra biblioteca de funciones

  31. Por qué programar en shell? • Requiere un cierto esfuerzo programar en shell, así que antes debemos plantearnos si nos va a ser útil • Razones para programar en shell • Porque nos lo mandan (como es el caso) • Porque sabemos programar: el esfuerzo necesario para aprender es muchísimo menor • Porque en nuestro trabajo nos va a ser útil: • Administradores: tareas complejas o automatizables • Hackers: tareas rápidas • Programadores usuarios: tareas que se repiten

  32. Cuándo programar en shell? • Llamadas frecuentes a funciones del sistema • Llamadas repetitivas a una función del sistema • Programas cortos • Si un programa pasa de una página, probablemente la shell no sea la mejor solución • Cuanto mejor conozcamos la shell y sus comandos, más la usaremos y mayor útil será la programación en shell

  33. Variables • Además de las variables de entorno podemos declarar variables locales al script • No tienen tipo, no hay que declararlas o inicializarlas previamente • Asignación: variable=valor • Acceder al valor: $variable

  34. Variables (II) • Para diferenciar el valor de variables en cadenas, usamos { }: • dir2=/home/rodrigo/curso • cat ${dir2}/lista.txt • Normalmente, se abre una shell para ejecutar el script • si queremos que se ejecute en la shell en que estamos, y así luego tener disponibles las variables, usamos (.): . programa

  35. Parámetros • Un script puede tener parámetros de entrada igual que cualquier comando • script par1 par2 par3 … • Para acceder a sus valores usamos • $1, $2, $3, … $9 • $0 es el nombre del comando • $*, $@ devuelven todos los parámetros separados por espacios

  36. Parámetros (II) • Número de parámetros: $# • Si tenemos más de 9 parámetros, tenemos que usar desplazamientos: shift [n] • Donde n es el número de pasos que desplazamos • Si no se especifica n, se comporta como shift 1

  37. Gestión E/S: echo • Salida por consola: echo cadena

  38. echo: secuencias de escape

  39. echo: códigos de escape • Se introducen con la secuencia de escape \033 • Cada código tiene la sintaxis: [parametroAcción • parámetro es un número • acción es una letra • Ejemplo: • echo –e “\033[34m Hola”

  40. echo: códigos (ii)

  41. echo: codigos (iii)

  42. echo: ejemplos

  43. Gestion E/S: read • Entrada de consola: read var • En ksh también se puede hacer así: • read fich?“Introduce nombre de fichero: ”

  44. Gestión E/S: exit • Salida del script: exit código_fin • 0 terminado con éxito • 1 error interno • 2 error por sintaxis de llamada • $? Devuelve el código de salida del último comando ejecutado

  45. Expresiones regulares • Manejar con soltura las expresiones regulares es fundamental para programar en shell y manejar comandos como grep, sed o awk.

  46. Expresiones regulares (II) • Más expresiones regulares

  47. Expresiones regulares (III) • Extensión POSIX

  48. Condiciones • if lista_condiciones1 • then lista_comandos1 • elif lista_condiciones2 • then lista_comandos2 • … • else lista_comandosN • fi

  49. Test • Para chequear condiciones se usan [ ] en la sintaxis del if (equivalente al comando test)

  50. Test Ficheros

More Related