The linux shell. Shell Scripting desde 0

1,316 views

Published on

Slides del taller "The Linux Shell. Shell Scripting desde 0" presentado durante las actividades de la BugCon Security Conferences efectuado en la Escuela Superior de Computo -ESCOM- en el D.F., México, del 13 al 15 de febrero del 2013.

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,316
On SlideShare
0
From Embeds
0
Number of Embeds
154
Actions
Shares
0
Downloads
56
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

The linux shell. Shell Scripting desde 0

  1. 1. The Linux ShellShell Scripting desde 0 Remigio Salvador Sánchezremigio.salvador@gmail.com
  2. 2. ¿Cómo es qué pueden llegar a ser tan anormales los humanos, siento la raza superior, el “animal más inteligente”? ¿Quiénes son los irracionales?remigio.salvador@gmail.com
  3. 3. CONTENIDO: ➢ Introducción ➢ Nuestro primer script ➢ Variables ➢ Comandos del sistema ➢ Estructuras condicionales ➢ Ciclos ➢ Ingresando datos ➢ Operadores ➢ Recomendaciones ➢ Agradecimientosremigio.salvador@gmail.com
  4. 4. INTRODUCCIÓN ● El shell es un ambiente de programación capaz de automatizar casi cualquier cosa en su sistema Linux. ● El shell de uso más común en Linux es bash, pero existen otros (ksh, sh, entre otros)
  5. 5. INTRODUCCIÓN ● El shell provee: – Una interfase interactiva textual al sistema operativo. – Un ambiente operacional. – Facilidades para iniciar y administrar comandos y programas. – Un lenguaje de programación.
  6. 6. INTRODUCCIÓN ● Los scripts son archivos que contienen comandos a ser ejecutados por una shell. ● Puede ser otro comando que pueda teclear a partir del prompt. - comando que invoque una utilidad - Un programa compilado - Otro script :)
  7. 7. INTRODUCCIÓN ● Los scripts soportan varias características de programación como pueden ser: ciclos, variables, arreglos, funciones, etc. ● Redirecciones de salida y entrada, PIPES, Expansiones, control de trabajo (jobs) ● Comandos construidos de forma personalizada :)
  8. 8. NUESTRO PRIMER SCRIPT --- holaScript.sh --- #!/bin/bash clear echo Hola script --- holaScript.sh ---
  9. 9. VARIABLES ● 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. ● De shell: Son variables locales. Son 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.
  10. 10. VARIABLES ● Muchas de las variables son necesarias para la ejecución de programas. ● Para que esas variables esten disponibles deben ser exportadas para convertirlas en variables de ambiente. $ export MIVAR ● Para listar las variables de ambiente: $ env
  11. 11. VARIABLES ● $0 : Nombre del programa ó script. ● $# : Cantidad de argumentos. ● $1..$n : Argumentos según su posición en la línea de comandos. ● $@ : Lista de argumentos. ● $? : Resultado de la ejecución del ultimo comando. ● $$ : PID del shell actual.
  12. 12. VARIABLES --- variables3.sh --- echo "Nombre del script: $0" echo "Número de argumentos: $#" echo "Lista de argumentos: $*" echo "PID del proceso actual: $$" echo "PID del proceso hijo: $!" --- vairables3.sh ---
  13. 13. COMANDOS DEL SISTEMA --- comando.sh --- #!/bin/bash HOLA="Hola, hoy es el día $(date +%j) del año." echo $HOLA --- comando.sh ---
  14. 14. Apostrofes y comillas Cuando se asignan cadenas de caracteres que contiene espacios o caracteres especiales, la cadena debe estar encerrada entre apostrofes o comillas El uso de comillas dentro de una cadena de caracteres permitira que cualquier variables dentro de las comillassea interpretado
  15. 15. COMANDOS DEL SISTEMA --- comando.sh --- #!/bin/bash HOLA=”date +%j” echo $HOLA --- comando.sh ---
  16. 16. COMANDOS DEL SISTEMA --- comando.sh --- #!/bin/bash HOLA=`date +%j` echo $HOLA --- comando.sh ---
  17. 17. COMANDOS DEL SISTEMA --- variables.sh --- #!/bin/bash var=”test de cadenas” var2=”Valor de la variable es $var” echo $var2 --- variables.sh ---
  18. 18. COMANDOS DEL SISTEMA --- variables.sh --- #!/bin/bash var=test de cadenas var2=Valor de la variable es $var echo $var2 --- variables.sh ---
  19. 19. OPERADORES (CADENAS DE TEXTO) ● [ s1 = s2 ]: s1 coincide con s2 ● [ s1 != s2 ]: s1 no coincide con s2 ● [ s1 < s2 ]: s1 es alfabéticamente anterior a s2, con el locale actual ● [ s1 > s2 ]: s1 es alfabéticamente posterior a s2, con el locale actual ● [ -n s1 ]: s1 no es nulo (contiene uno o más caracteres) ● [ -z s1 ] : s1 es nulo
  20. 20. ESTRUCTURA CONDICIONALES --- si2.sh --- #!/bin/bash if [ $(whoami) = root ]; then echo “Hola ROOT” else echo “No eres root” fi --- si2.sh ---
  21. 21. ESTRUCTURA CONDICIONALES --- si3.sh --- #!/bin/bash if [ $USER = root ]; then echo “El usuario es root” elif [ $(whoami) = BugCon ]; then echo “El usuario es BugCon” else echo “quien eres” fi --- si3.sh ---
  22. 22. ESTRUCTURA CONDICIONALES --- archivo.sh --- #!/bin/bash if [ -f "BUGCON.TXT" ]; then echo el archivo existe else echo archivo no encontrado fi --- archivo.sh ---
  23. 23. INGRESANDO DATOS --- leer.sh --- #!/bin/bash echo Por favor, introduzca su nombre: read NOMBRE echo "¡Hola $NOMBRE!" --- leer.sh ---
  24. 24. OPERADORES (ARITMETICOS) ● + (adición) ● - (sustracción) ● * (producto) ● / (división) ● % (módulo) ● ** (exponenciación)
  25. 25. OPERADORES (RELACIONES ARITMETICAS) ● [ a -lt b ] equivale a ((a < b)) ● [a -gt b ] equivale a ((a > b)) ● [a -le b ] equivale a ((a <= b)) ● [a -ge b ] equivale a ((a >= b)) ● [a -eq b ] equivale a ((a == b)) ● [a -ne b ] equivale a ((a != b))
  26. 26. OPERADORES (LOGICOS) ● && Y lógico (AND) ● || O lógico (OR)
  27. 27. OPERADORES (SOBRE ARCHIVOS)–-d /ruta/archivo: Verdadero si archivoexiste y es un directorio–-e /ruta/archivo: Verdadero si archivoexiste–-f /ruta/archivo: Verdadero si archivoexiste y es un archivo común–-l /ruta/archivo: Verdadero si archivoexiste y es un enlace suave–-r /ruta/archivo: Verdadero si archivoexiste y puede leerse
  28. 28. OPERADORES (SOBRE ARCHIVOS) -s /ruta/archivo: Verdadero si archivoexiste y tiene tamaño mayor que 0–-w /ruta/archivo: Verdadero si archivoexiste y es escribible–-x /ruta/archivo: Verdadero si archivoexiste y es ejecutablearch1 -ot arch2: Verdadero si arch1 es másviejo que arch2
  29. 29. CICLOS● 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.
  30. 30. CICLOS● 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.● 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)
  31. 31. CICLOS● 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.● 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).● 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.
  32. 32. CICLOS --- contador.sh --- #!/bin/bash clear read -p "Introduce un numero: " numero for (( a=0; a<=$numero; a++ )) do echo "$a" done --- contador.sh ---
  33. 33. CICLOS --- mientras.sh --- #!/bin/bash CONTADOR=0 while [ $CONTADOR -lt 10 ]; do echo El contador es $CONTADOR let CONTADOR=CONTADOR+1 done --- mientras.sh ---
  34. 34. CICLOS --- until.sh --- #!/bin/bash CONTADOR=20 until [ $CONTADOR -lt 10 ]; do echo CONTADOR $CONTADOR let CONTADOR-=1 done --- until.sh ---
  35. 35. CICLOS --- caso.sh --- #!/bin/bash echo "Introduce un numero entre 1 y 5: " read num case $num in 1) echo "El valor de num es 1.";; 2) echo "El valor de num es 2.";; 3) echo "El valor de num es 3.";; 4) echo "El valor de num es 4.";; 5) echo "El valor de num es 5.";; 0|6) echo "NUMERO FUERA DE RANGO.";; *) echo "valor no reconocido";; esac --- caso.sh ---
  36. 36. EJERCICIO Script (ejercicio.sh) que haga: ● Una carpeta (BUGCON) ● Una serie de archivos (10 archivos) dentro de la carpeta BUGCON ● Comprima la carpeta de BUGCON ● ● PREMIO AL QUE LO REALICE :)
  37. 37. RECOMENDACIONES ● ¡Lean!
  38. 38. RECOMENDACIONES ● ¡Lean! ● Crond + script
  39. 39. RECOMENDACIONES ● ¡Lean! ● Crond + script ● Webmin + script
  40. 40. RECOMENDACIONES ● ¡Lean! ● Crond + script ● Webmin + script ● Script con Expect
  41. 41. AGRADECIMIENTOSGracias a ustedes por su atención Y A los organizadores por todas facilidades prestadas
  42. 42. DEDICADO A: Mi familia, Alondra <3y a amigos (B) xD
  43. 43. CONTACTO: Remigio Salvador Sánchez @remitos remigio.salvador@gmail.com remigio.salvador@hotmail.com http://vkn-side.blogspot.mx
  44. 44. FUENTES: Shell Scripting en Linux Roberto Gómez Cárdenas rogomez@itesm.mx http://homepage.cem.itesm.mx/rogomez Creación de script Documentos Aula SUN UCM de Software Libre Sergio Velasco Alicia Martín. Mayo 2008.

×