Taller de Shell Scripting

2,713 views

Published on

Minitaller de shell scripting para el 2do. Debian Day, Montevideo, Uruguay

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,713
On SlideShare
0
From Embeds
0
Number of Embeds
30
Actions
Shares
0
Downloads
140
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Taller de Shell Scripting

  1. 1. Shell Scripting - Introducción Enrique Verdes SysAdmin UyLUG 2do. Debian Day
  2. 2. Breve presentación: Quien es El G@llego? <ul><li>Programador por formación, SysAdmin por deformación. </li></ul><ul><li>Certificado LPIC-1. 10 años de experiencia usando Linux. </li></ul><ul><li>Socio fundador del UyLUG. </li></ul><ul><li>Miembro de varias asociaciones: Hispalinux, IEEE, Computer Society. </li></ul><ul><li>Profesor Adjunto de Administración de Sistemas GNU/Linux en la Universidad ORT. </li></ul>
  3. 3. El shell interactivo <ul><li>El shell es un ambiente de programación capaz de automatizar casi cualquier cosa en su sistema Linux. </li></ul><ul><li>Una vez iniciado presenta un prompt ($ ó #) para indicar que está listo para recibir instrucciones por la entrada estándar (usualmente el teclado). </li></ul><ul><li>El shell de uso más común en Linux es bash , pero existen otros. </li></ul><ul><li>El shell puede ser cualquier aplicación de usuario. </li></ul>
  4. 4. ¿Que nos ofrece el shell? <ul><li>El shell provee: </li></ul><ul><ul><li>Una interfase interactiva textual al sistema operativo. </li></ul></ul><ul><ul><li>Un ambiente operacional. </li></ul></ul><ul><ul><li>Facilidades para iniciar y administrar comandos y programas. </li></ul></ul><ul><ul><li>Un lenguaje de programación. </li></ul></ul>
  5. 5. <ul><li>#!/bin/bash </li></ul><ul><li>clear </li></ul><ul><li>echo Hola Mundo </li></ul>Un script muy sencillo...
  6. 6. <ul><li>#!/bin/bash </li></ul><ul><li>clear </li></ul><ul><li>SALUDO=&quot;Hola Mundo&quot; </li></ul><ul><li>echo $SALUDO </li></ul>... lo complicamos con variables
  7. 7. Variables <ul><li>De ambiente : Variables globales. Son pasadas a todos los procesos iniciados por el shell, incluyendo otros shells. Esto significa que los procesos hijo heredan el ambiente. Por convención se expresan en mayúsculas. </li></ul><ul><li>De shell : Son variables locales. So específicas al shell corriente y no son heredadas por procesos hijo. En bash , las variables de shell pasan a ser de ambiente cuando son exportadas. </li></ul>
  8. 8. Variables de ambiente <ul><li>Muchas de las variables son necesarias para la ejecución de programas. </li></ul><ul><li>Para que esas variables esten disponibles deben ser exportadas para convertirlas en variables de ambiente. </li></ul><ul><li>$ export MIVAR </li></ul><ul><li>Para listar las variables de ambiente: </li></ul><ul><li>$ env </li></ul>
  9. 9. Un poquito mas complicado ... <ul><li>#!/bin/bash </li></ul><ul><li>HOLA=Hola </li></ul><ul><li>function hola { </li></ul><ul><ul><li>local HOLA=Mundo </li></ul></ul><ul><ul><li>echo $HOLA </li></ul></ul><ul><li>} </li></ul><ul><li>echo $HOLA </li></ul><ul><li>hola </li></ul><ul><li>echo $HOLA </li></ul>
  10. 10. Ahora con sustitución de comandos. <ul><li>#!/bin/bash </li></ul><ul><li>HOLA=&quot;Hola, hoy es el día $(date +%j) del año.&quot; </li></ul><ul><li>echo $HOLA </li></ul>
  11. 11. Estructuras condicionales if .. then <ul><li>#!/bin/bash </li></ul><ul><li>... </li></ul><ul><li>if [ !$# ]; then </li></ul><ul><ul><li>echo “Hay parametros” </li></ul></ul><ul><li>fi </li></ul><ul><li>... </li></ul>
  12. 12. Condicional if .. then .. else <ul><li>#!/bin/bash </li></ul><ul><li>... </li></ul><ul><li>if [ $(whoami) = root ]; then </li></ul><ul><ul><li>return 0 </li></ul></ul><ul><li>else </li></ul><ul><ul><li>return 1 </li></ul></ul><ul><li>fi </li></ul><ul><li>... </li></ul>
  13. 13. Condicional if .. then .. elif <ul><li>#!/bin/bash </li></ul><ul><li>... </li></ul><ul><li>if [ $USER = root ]; then </li></ul><ul><li>echo “El usuario es root” </li></ul><ul><li>elif [ $(whoami) = gallego ]; then </li></ul><ul><ul><li>echo “El usuario es El G@llego” </li></ul></ul><ul><li>else </li></ul><ul><ul><li>echo “Vos quien sos?” </li></ul></ul><ul><li>fi </li></ul><ul><li>... </li></ul>
  14. 14. Ahora un ejemplo con argumentos. <ul><li>#!/bin/bash </li></ul><ul><li>FILE= $1 </li></ul><ul><li>if [ -f $FILE ]; then </li></ul><ul><ul><li>echo el archivo $FILE existe </li></ul></ul><ul><li>else </li></ul><ul><ul><li>echo archivo no encontrado </li></ul></ul><ul><li>fi </li></ul>
  15. 15. Ciclos: for, while y until <ul><li>El for es distinto a los de otros lenguajes de programación. Básicamente, le permite iterar sobre una serie de `palabras' contenidas dentro de una cadena. </li></ul><ul><li>El while ejecuta un trozo de código si la expresión de control es verdadera, y termina cuando es falsa (o se encuentra una interrupción explícita dentro del código en ejecución). </li></ul><ul><li>El until es casi idéntico al while , excepto en que el código se ejecuta mientras la expresión de control se evalúe como falsa. </li></ul>
  16. 16. Ejemplo de for... <ul><li>#!/bin/bash </li></ul><ul><li>for i in $( ls ); do </li></ul><ul><ul><li>echo item: $i </li></ul></ul><ul><li>done </li></ul>
  17. 17. Ejemplo de while... <ul><li>#!/bin/bash </li></ul><ul><li>CONTADOR=0 </li></ul><ul><li>while [ $CONTADOR -lt 10 ]; do </li></ul><ul><li>echo El contador es $CONTADOR </li></ul><ul><li>let CONTADOR=CONTADOR+1 </li></ul><ul><li>done </li></ul>
  18. 18. Ejemplo de until... <ul><li>#!/bin/bash </li></ul><ul><li>CONTADOR=20 </li></ul><ul><li>until [ $CONTADOR -lt 10 ]; do </li></ul><ul><li>echo CONTADOR $CONTADOR </li></ul><ul><li>let CONTADOR-=1 </li></ul><ul><li>done </li></ul>
  19. 19. La instrucción case... <ul><li>case $USER; in </li></ul><ul><li>root) </li></ul><ul><ul><li>echo “Usuario es root”;; </li></ul></ul><ul><li>gallego) </li></ul><ul><ul><li>echo “Usuario es el G@llego”;; </li></ul></ul><ul><li>*) </li></ul><ul><ul><li>echo “Y este quien es?”;; </li></ul></ul><ul><li>esac </li></ul>
  20. 20. Un pequeño ejemplo. <ul><li>case &quot;$1&quot;; in </li></ul><ul><li>*start) </li></ul><ul><li>;; </li></ul><ul><li>*) </li></ul><ul><li>gprintf &quot;Usage: %s &quot; &quot;$(basename $0) {start}&quot; </li></ul><ul><li>exit 1 ;; </li></ul><ul><li>esac </li></ul>
  21. 21. Ingresando información... <ul><li>#!/bin/bash </li></ul><ul><li>echo Por favor, introduzca su nombre: </li></ul><ul><li>read NOMBRE </li></ul><ul><li>echo &quot;¡Hola $NOMBRE!&quot; </li></ul>
  22. 22. Uso de argumentos... <ul><li>$0 : Nombre del programa ó script. </li></ul><ul><li>$# : Cantidad de argumentos. </li></ul><ul><li>$1..$n : Argumentos según su posición en la línea de comandos. </li></ul><ul><li>$@ : Lista de argumentos. </li></ul><ul><li>$? : Resultado de la ejecución del ultimo comando. </li></ul><ul><li>$$ : PID del shell actual. </li></ul>
  23. 23. Ejemplo de script con argumentos. <ul><li>#!/bin/bash </li></ul><ul><li>if [ $# -ne 1 ]; then </li></ul><ul><ul><li>echo uso: $0 archivo </li></ul></ul><ul><ul><li>exit 1 </li></ul></ul><ul><li>elif [ -f $1 ]; then </li></ul><ul><ul><li>echo el archivo $1 existe </li></ul></ul><ul><li>else </li></ul><ul><ul><li>echo archivo no encontrado </li></ul></ul><ul><li>fi </li></ul>
  24. 24. Operadores de cadenas de texto <ul><li>[ s1 = s2 ]: s1 coincide con s2 </li></ul><ul><li>[ s1 != s2 ]: s1 no coincide con s2 </li></ul><ul><li>[ s1 < s2 ]: s1 es alfabéticamente anterior a s2, con el locale actual </li></ul><ul><li>[ s1 > s2 ]: s1 es alfabéticamente posterior a s2, con el locale actual </li></ul><ul><li>[ -n s1 ]: s1 no es nulo (contiene uno o más caracteres) </li></ul><ul><li>[ -z s1 ] : s1 es nulo </li></ul>
  25. 25. Operadores aritmeticos <ul><li>+ (adición) </li></ul><ul><li>- (sustracción) </li></ul><ul><li>* (producto) </li></ul><ul><li>/ (división) </li></ul><ul><li>% (módulo) </li></ul><ul><li>** (exponenciación) </li></ul>
  26. 26. Operadores relacionales aritmeticos <ul><li>[ a -lt b ] equivale a ((a < b)) </li></ul><ul><li>[a -gt b ] equivale a ((a > b)) </li></ul><ul><li>[a -le b ] equivale a ((a <= b)) </li></ul><ul><li>[a -ge b ] equivale a ((a >= b)) </li></ul><ul><li>[a -eq b ] equivale a ((a == b)) </li></ul><ul><li>[a -ne b ] equivale a ((a != b)) </li></ul>
  27. 27. Operadores lógicos <ul><li>&& Y lógico (AND) </li></ul><ul><li>|| O lógico (OR) </li></ul>
  28. 28. Operadores sobre archivos <ul><ul><li>d archivo : Verdadero si archivo existe y es un directorio </li></ul></ul><ul><ul><li>e archivo : Verdadero si archivo existe </li></ul></ul><ul><ul><li>f archivo : Verdadero si archivo existe y es un archivo común </li></ul></ul><ul><ul><li>L archivo : Verdadero si archivo existe y es un enlace simbólico </li></ul></ul><ul><ul><li>r archivo : Verdadero si archivo existe y puede leerse </li></ul></ul><ul><ul><li>s archivo : Verdadero si archivo existe y tiene tamaño mayor que 0 </li></ul></ul><ul><ul><li>w archivo : Verdadero si archivo existe y es escribible </li></ul></ul><ul><ul><li>x archivo : Verdadero si archivo existe y es ejecutable </li></ul></ul><ul><ul><li>arch1 -ot arch2 : Verdadero si arch1 es más viejo que arch2 </li></ul></ul>
  29. 29. Algunos ejemplos prácticos <ul><li>Confección de Manual </li></ul><ul><li>Usuario que usa más espacio en disco </li></ul><ul><li>Archivos con bit SUID </li></ul>
  30. 30. Para ampliar estos temas “Bash Guide for Begginers” - Matchtelt Garrels http://www.tldp.org/LDP/Bash-Beginners-Guide/html/index.html Visiten el Proyecto de Documentación de Linux http://www.tldp.org

×