Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

The linux shell. Shell Scripting desde 0

1,568 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.

  • Be the first to comment

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.

×