SlideShare una empresa de Scribd logo
Programación de Shell Scripts (II) Antonio Durán
Control de flujo Veremos las sentencias de control de flujo que ofrece BASH Muy parecidas al resto de los lenguajes de programación if, else, for, while, until, case, select
Sentencias condicionales Formato de la sentencia condicional
Sentencias condicionales Otro formato, el más común
Sentencias condicionales Podemos usar los códigos de terminación (exit status) en sentencias condicionales La sentencia if comprueba el código de terminación de un comando en la condición. Si éste es 0, la condición se evalúa como cierta
Sentencias condicionales La forma normal de escribir la sentencia condicional
Sentencias condicionales Ejemplo
Práctica Modificar el script anterior Para que acepte un parámetro con el archivo o directorio que queremos listar Usar ese parámetro en la llamada a ls Descartar la salida del comando ls, de modo que solo obtengamos el mensaje del script
Operadores lógicos y códigos de terminación Se pueden combinar varios códigos de terminación de comandos mediante los operadores lógicos: and (representado por &&) or (representado por ||) not (representado por !) En estas operaciones, el segundo operando sólo se evalúa si el primero no determina el resultado de la condición
Operadores lógicos y códigos de terminación Ejemplos Sólo se ejecuta  ls  si tiene éxito el  cd $ cd /tmp && ls $ cd /xxx && ls Sólo se ejecuta el segundo cp si ha fallado el primero $ cp /tmp/1 ~/ || cp /tmp/2 ~/ El ! niega un código de terminación if ! cp xx /tmp; then procesa el error
Práctica Escribir un script que reciba dos parámetros: Un nombre de usuario Un grupo de usuarios Debe mostrar un mensaje, sólo si el usuario pertenece al grupo indicado Usar comando groups y && con grep
Tests condicionales La sentencia if lo único que sabe es evaluar códigos de terminación El comando test nos permite comprobar otras muchas condiciones, que le pasamos como argumento, y nos devuelve un código de terminación Forma alternativa al comando test: [] test cadena1 = cadena2 es equivalente a [ cadena1 = cadena2 ] Nota: espacios entre todos los elementos
Tests condicionales Usando tests condicionales podemos Evaluar atributos de un fichero (si existe, de que tipo es, permisos ...) Comparar dos ficheros para buscar el más reciente Comparar cadenas Comparar números
Comparación de cadenas Operadores de comparación de cadenas str1 = str2 :las cadenas son iguales str != str2 :las cadenas son distintas str1 < str2 :str1 es menor lexicográficamente que str2 str1 > str2: al revés -n str1 :str1 no es nula y tiene longitud mayor que cero -z str1 :str1 es nula (tiene longitud cero)
Comparación de cadenas Ejemplo, versión 1 Comprobar que pasa si no le pasamos argumentos
Comparación de cadenas Ejemplo, versión 2 Comprobar que pasa si no le pasamos argumentos
Comparación de cadenas Ejemplo, versión 3 Se comprueban antes los argumentos
Práctica Escribir un script que compare dos cadenas pasadas como parámetros y diga cual es mayor lexicográficamente, o si por el contrario son iguales Debe comprobar que los argumentos se han pasado correctamente Usar $#
Comparación numérica de enteros El shell también permite comparar variables que almacenan cadenas, interpretando estas cadenas como números. Operadores: -lt :less than (menor que) -le: less than or equal (menor o igual que) -eq: equal (igual) -ge: greater than or equal (mayor o igual) -gt: greater then (mayor que) -ne: not equal (no igual)
Comparación numérica de enteros Ejemplo
Comparación numérica de enteros A nivel de condición, dentro de los [], también se pueden usar operadores lógicos, pero en este caso debemos usar los operadores: -a para and -o para or
Comparación numérica de enteros Se pueden usar paréntesis para aumentar la claridad, pero deben ir precedidos de \
Práctica Escribir un script que reciba tres argumentos y compruebe Que el arg1 es menor o igual que mil Que los dos argumentos siguientes están entre 0 y arg1 Imprimir mensajes de error descriptivos para cada condición que no se cumpla
Comprobar atributos de ficheros El tercer tipo de operadores nos permiten comprobar atributos de ficheros. Operadores: -a fichero : fichero existe -b fichero : fichero existe y es un dispositivo de bloque -c fichero : fichero existe y es un dispositivo de carácter -d fichero : fichero existe y es un directorio
Comprobar atributos de ficheros Operadores: -e : fichero existe (equivalente a -a) -f : fichero existe y es un fichero regular -g : fichero existe y tiene activo el bit sgid -h, -L fichero : fichero existe y es un enlace simbólico -k fichero: fichero existe y tiene el sticky bit activado -N fichero : fichero existe y fue modificado desde la última lectura
Comprobar atributos de ficheros Operadores: -p fichero : fichero existe y es una tubería -r fichero : fichero existe y podemos leerlo -s fichero : fichero existe y no está vacío -S fichero : fichero existe y es un socket -u fichero : fichero existe y tiene activo el bit suid -w fichero : fichero existe y tenemos permiso de escritura
Comprobar atributos de ficheros Operadores: -x fichero : fichero existe y tenemos permisos de ejecución, o de búsqueda si es un directorio fich1 -nt fich2 : la fecha de modificación de fich1 es más moderna (newer than) la de fich1 fich1 -ot fich2 : la fecha de modificación de fich1 es más antigua (older than) la de fich1 fich1 -ef fich2 : son el mismo fichero
Comprobar atributos de ficheros Ejemplo
Práctica Escribir un script que imite el comportamiento de la orden cd, mostrando más mensajes: Si ya está en el directorio pedido Si el directorio no es válido Si no tenemos permisos para entrar Cuando se cambie de directorio, informe de la antigua y la nueva ubicación
Práctica Escribir un script que realice una copia más segura que el comando cp, comprobando antes de copiar un archivo si éste ya existe, y preguntando, en ese caso, si desea sobreescribirse.
Práctica Mejorar el script anterior, para el caso de que el segundo argumento sea un directorio. En ese caso, se debe comprobar si existe un fichero llamado igual que el argumento1 en ese directorio
El bucle for El bucle for en Bash es algo diferente del for de otros lenguajes Se parece más al bucle for each, ya que no se repite un número fijo de veces, sino que se procesan las palabras de una frase una a una
El bucle for Sintaxis
El bucle for La lista del bucle for puede contener comodines Éste muestra información detallada sobre los contenidos del directorio actual
El bucle for Para recorrer los argumentos de un script, lo correcto es usar “$@” entrecomillado $* y $@ interpretan mal los elementos con espacios “$*” cosindera un sólo elemento a todos los argumentos
El bucle for Ejemplo. Probar con argumentos con espacios
Prácticas Escribir un script que cree, en /tmp, los ficheros f1.txt, f2.txt...f9.txt touch Escribir un script que recorra todos los elementos del directorio recibido como parámetro y muestre todos los subdirectorios que contiene
Prácticas Escribir un script que recorra todos los elementos del directorio recibido como parámetro, indicando para cada uno, si tenemos permisos para leer, escribir y ejecutar el archivo
Operadores y temas relacionados El comando interno let permite evaluar expresiones con números enteros, para asignar su resultado a una variable $ let “n=3*4” $ echo $n 12
Operadores y temas relacionados Operadores aritméticos +, -, *, / ** (potencia) % (módulo) +=, -=, *=, /=, %= let “n += 1” #incrementa n
Operadores y temas relacionados Operadores lógicos &&, || Operadores de bit <<, >> ... Casi no se usan, no los veremos
Práctica Escribir un script que reciba un número como parámetro y diga si es par o impar Escribir un script que sume todos los parámetros recibidos Usar for para recorrerlos
El bucle while Comprueba la condición al comienzo del bucle, y continúa ejecutando mientras sea cierta La condición del bucle es como las condiciones en las construcciones if
El bucle while Ejemplo
El bucle while Otro ejemplo
Práctica Escribir un script que calcule el factorial del número recibido como parámetro Escribir un script que ejecute un bucle infinito mostrando las conexiones de red cada cinco segundos netstat –inet sleep
Práctica Escribir un script que funcione como el comando nslookup, usando el comando  host Un bucle que lee un nombre de teclado hasta que se introduzca 'fin' Se usa el comando host para obtener la IP correspondiente
El bucle until Comprueba la condición al comienzo del bucle, y continúa ejecutando mientras sea falsa, al contrario que el bucle while
El bucle until Un ejemplo anterior, usando until en lugar de while
Práctica Escribir el script del factorial usando until en lugar de while Escribir el mismo script que imita el comando nslookup, usando until en lugar de while
Control de bucles Comandos que afectan al comportamiento de los bucles: break: sale del bucle continue: pasa a la siguiente iteración
Control de bucles Mejorando un ejemplo anterior
Práctica Escribir un script que muestre los número de 1 a 10, pero no el 3 Modificar el script que imita el comando nslookup, para que no intente resolver el host “fin”
La construcción case La construcción case es parecida al switch en C/C++ Permite saltar a uno de diferentes bloques de código dependiendo de las condiciones Apropiado para manejar opciones de un menú
La construcción case Sintaxis
La construcción case Ejemplo
La construcción case Ejemplo
Práctica Realizar un script que reciba dos parámetros: Uno será el nombre de un fichero El otro representa la acción a realizar sobre el fichero mostrar: se muestra el fichero (cat) estadisticas: se muestran sus estadísticas (stat) tipo: muestra el tipo de fichero (file) Si se recibe otra acción, debe mostrarse un error
La construcción select La construcción select es otra forma de generar menús Pide al usuario que introduzca uno de los elementos presentados en la lista
La construcción select Ejemplo

Más contenido relacionado

ODP
Curso Bash 3
PPT
El shell-bash
ODP
Curso Bash 1
PDF
Programación en Bash
PPT
Los scripts de linux
PDF
Shell script en linux
PPTX
Scripts
PDF
Creacion de scripts en linux
Curso Bash 3
El shell-bash
Curso Bash 1
Programación en Bash
Los scripts de linux
Shell script en linux
Scripts
Creacion de scripts en linux

La actualidad más candente (16)

ODP
Taller de Shell Scripting
PDF
Ejercicios resuelto de shell script
PDF
Shell script
PDF
The linux shell. Shell Scripting desde 0
PPTX
Introducción a shell script
PDF
Introducción a la programación en Bash
DOCX
Script
PPT
8 herramientas de procesos de string
PDF
6 la shell bash
PDF
Tutorial0
PDF
11 suplemments
PDF
Tutorial 18pag
PDF
Perl4 io
PDF
19 Php. Utilizando Formularios
PDF
57 Php. Funciones De Compresion
PDF
Programacinenshell linux
Taller de Shell Scripting
Ejercicios resuelto de shell script
Shell script
The linux shell. Shell Scripting desde 0
Introducción a shell script
Introducción a la programación en Bash
Script
8 herramientas de procesos de string
6 la shell bash
Tutorial0
11 suplemments
Tutorial 18pag
Perl4 io
19 Php. Utilizando Formularios
57 Php. Funciones De Compresion
Programacinenshell linux
Publicidad

Destacado (19)

PDF
Zhang Jiangong CV
DOCX
Archivos especiales
PDF
ejercicios red hat capitulo5
PDF
Linux basico-8.PDF
PPTX
Expresiones Regulares
DOCX
Archivos especiales
PPTX
Expresiones regulares2.pdf
PPSX
Conceptos básicos del shell
PDF
Autómatas finitos y expresiones regulares
ODP
bash
PPTX
Comando grep y expresiones regulares
PPTX
Primeros Programas Shell Script
PDF
Comandos GNU/Linux-Unix y programación shell.
PDF
COMANDOS SHELL Y PROGRAMACIÓN EN LA SHELL DEL BASH
ODP
Comandos basicos linux
PPT
Bash Tips Tricks Campus
PPT
Shell Scripting in Linux
PPT
Shell programming
PPT
Semana 16 usuarios y grupos
Zhang Jiangong CV
Archivos especiales
ejercicios red hat capitulo5
Linux basico-8.PDF
Expresiones Regulares
Archivos especiales
Expresiones regulares2.pdf
Conceptos básicos del shell
Autómatas finitos y expresiones regulares
bash
Comando grep y expresiones regulares
Primeros Programas Shell Script
Comandos GNU/Linux-Unix y programación shell.
COMANDOS SHELL Y PROGRAMACIÓN EN LA SHELL DEL BASH
Comandos basicos linux
Bash Tips Tricks Campus
Shell Scripting in Linux
Shell programming
Semana 16 usuarios y grupos
Publicidad

Similar a Curso Bash 2 (20)

PPTX
Estructuras de control 1
PDF
Guion scripts
PDF
Introduction to linux for bioinformatics
PDF
11 suplemments
PDF
11 suplemments
PDF
Laboratorio de Sistemas Operativos 1-Tp9
PPTX
PDF
Agilidad en shell de linux
PDF
Comandos linux
PDF
Tutorial linux
PDF
Tutorial Comandos
PPTX
Estructuras de control 1
DOCX
Linux comandos
PDF
Resumen scripts unix
RTF
Comandos De Unix
PDF
Estructuras de control 1.0
PPT
ODP
Curso GNU/Linux
PDF
Tema 3 Ficheros Y Permisos
Estructuras de control 1
Guion scripts
Introduction to linux for bioinformatics
11 suplemments
11 suplemments
Laboratorio de Sistemas Operativos 1-Tp9
Agilidad en shell de linux
Comandos linux
Tutorial linux
Tutorial Comandos
Estructuras de control 1
Linux comandos
Resumen scripts unix
Comandos De Unix
Estructuras de control 1.0
Curso GNU/Linux
Tema 3 Ficheros Y Permisos

Más de Antonio Durán (20)

ODP
Curso Avanzado Seguridad Logs
ODP
Seminario Administradores Febrero 2007
ODP
Seminario Administradores Marzo 2006
ODP
Curso Basico Ponencia 1
ODP
Curso Avanzado Seguridad Redes
ODP
Curso Basico Ponencia 678
ODP
Curso Basico Ponencia 3
ODP
Curso Avanzado Seguridad Logs
ODP
Curso Avanzado Seguridad Acceso
ODP
Linex 04
ODP
Linex 05
ODP
Linex 03
ODP
Linex 04
ODP
Linex 02
ODP
Linex 01
ODP
Curso Redes Linex 4
ODP
Curso Redes Linex 3
ODP
Curso Redes Linex 2
ODP
Curso Redes Linex 5
ODP
Curso Redes Linex 1
Curso Avanzado Seguridad Logs
Seminario Administradores Febrero 2007
Seminario Administradores Marzo 2006
Curso Basico Ponencia 1
Curso Avanzado Seguridad Redes
Curso Basico Ponencia 678
Curso Basico Ponencia 3
Curso Avanzado Seguridad Logs
Curso Avanzado Seguridad Acceso
Linex 04
Linex 05
Linex 03
Linex 04
Linex 02
Linex 01
Curso Redes Linex 4
Curso Redes Linex 3
Curso Redes Linex 2
Curso Redes Linex 5
Curso Redes Linex 1

Curso Bash 2

  • 1. Programación de Shell Scripts (II) Antonio Durán
  • 2. Control de flujo Veremos las sentencias de control de flujo que ofrece BASH Muy parecidas al resto de los lenguajes de programación if, else, for, while, until, case, select
  • 3. Sentencias condicionales Formato de la sentencia condicional
  • 4. Sentencias condicionales Otro formato, el más común
  • 5. Sentencias condicionales Podemos usar los códigos de terminación (exit status) en sentencias condicionales La sentencia if comprueba el código de terminación de un comando en la condición. Si éste es 0, la condición se evalúa como cierta
  • 6. Sentencias condicionales La forma normal de escribir la sentencia condicional
  • 8. Práctica Modificar el script anterior Para que acepte un parámetro con el archivo o directorio que queremos listar Usar ese parámetro en la llamada a ls Descartar la salida del comando ls, de modo que solo obtengamos el mensaje del script
  • 9. Operadores lógicos y códigos de terminación Se pueden combinar varios códigos de terminación de comandos mediante los operadores lógicos: and (representado por &&) or (representado por ||) not (representado por !) En estas operaciones, el segundo operando sólo se evalúa si el primero no determina el resultado de la condición
  • 10. Operadores lógicos y códigos de terminación Ejemplos Sólo se ejecuta ls si tiene éxito el cd $ cd /tmp && ls $ cd /xxx && ls Sólo se ejecuta el segundo cp si ha fallado el primero $ cp /tmp/1 ~/ || cp /tmp/2 ~/ El ! niega un código de terminación if ! cp xx /tmp; then procesa el error
  • 11. Práctica Escribir un script que reciba dos parámetros: Un nombre de usuario Un grupo de usuarios Debe mostrar un mensaje, sólo si el usuario pertenece al grupo indicado Usar comando groups y && con grep
  • 12. Tests condicionales La sentencia if lo único que sabe es evaluar códigos de terminación El comando test nos permite comprobar otras muchas condiciones, que le pasamos como argumento, y nos devuelve un código de terminación Forma alternativa al comando test: [] test cadena1 = cadena2 es equivalente a [ cadena1 = cadena2 ] Nota: espacios entre todos los elementos
  • 13. Tests condicionales Usando tests condicionales podemos Evaluar atributos de un fichero (si existe, de que tipo es, permisos ...) Comparar dos ficheros para buscar el más reciente Comparar cadenas Comparar números
  • 14. Comparación de cadenas Operadores de comparación de cadenas str1 = str2 :las cadenas son iguales str != str2 :las cadenas son distintas str1 < str2 :str1 es menor lexicográficamente que str2 str1 > str2: al revés -n str1 :str1 no es nula y tiene longitud mayor que cero -z str1 :str1 es nula (tiene longitud cero)
  • 15. Comparación de cadenas Ejemplo, versión 1 Comprobar que pasa si no le pasamos argumentos
  • 16. Comparación de cadenas Ejemplo, versión 2 Comprobar que pasa si no le pasamos argumentos
  • 17. Comparación de cadenas Ejemplo, versión 3 Se comprueban antes los argumentos
  • 18. Práctica Escribir un script que compare dos cadenas pasadas como parámetros y diga cual es mayor lexicográficamente, o si por el contrario son iguales Debe comprobar que los argumentos se han pasado correctamente Usar $#
  • 19. Comparación numérica de enteros El shell también permite comparar variables que almacenan cadenas, interpretando estas cadenas como números. Operadores: -lt :less than (menor que) -le: less than or equal (menor o igual que) -eq: equal (igual) -ge: greater than or equal (mayor o igual) -gt: greater then (mayor que) -ne: not equal (no igual)
  • 20. Comparación numérica de enteros Ejemplo
  • 21. Comparación numérica de enteros A nivel de condición, dentro de los [], también se pueden usar operadores lógicos, pero en este caso debemos usar los operadores: -a para and -o para or
  • 22. Comparación numérica de enteros Se pueden usar paréntesis para aumentar la claridad, pero deben ir precedidos de \
  • 23. Práctica Escribir un script que reciba tres argumentos y compruebe Que el arg1 es menor o igual que mil Que los dos argumentos siguientes están entre 0 y arg1 Imprimir mensajes de error descriptivos para cada condición que no se cumpla
  • 24. Comprobar atributos de ficheros El tercer tipo de operadores nos permiten comprobar atributos de ficheros. Operadores: -a fichero : fichero existe -b fichero : fichero existe y es un dispositivo de bloque -c fichero : fichero existe y es un dispositivo de carácter -d fichero : fichero existe y es un directorio
  • 25. Comprobar atributos de ficheros Operadores: -e : fichero existe (equivalente a -a) -f : fichero existe y es un fichero regular -g : fichero existe y tiene activo el bit sgid -h, -L fichero : fichero existe y es un enlace simbólico -k fichero: fichero existe y tiene el sticky bit activado -N fichero : fichero existe y fue modificado desde la última lectura
  • 26. Comprobar atributos de ficheros Operadores: -p fichero : fichero existe y es una tubería -r fichero : fichero existe y podemos leerlo -s fichero : fichero existe y no está vacío -S fichero : fichero existe y es un socket -u fichero : fichero existe y tiene activo el bit suid -w fichero : fichero existe y tenemos permiso de escritura
  • 27. Comprobar atributos de ficheros Operadores: -x fichero : fichero existe y tenemos permisos de ejecución, o de búsqueda si es un directorio fich1 -nt fich2 : la fecha de modificación de fich1 es más moderna (newer than) la de fich1 fich1 -ot fich2 : la fecha de modificación de fich1 es más antigua (older than) la de fich1 fich1 -ef fich2 : son el mismo fichero
  • 28. Comprobar atributos de ficheros Ejemplo
  • 29. Práctica Escribir un script que imite el comportamiento de la orden cd, mostrando más mensajes: Si ya está en el directorio pedido Si el directorio no es válido Si no tenemos permisos para entrar Cuando se cambie de directorio, informe de la antigua y la nueva ubicación
  • 30. Práctica Escribir un script que realice una copia más segura que el comando cp, comprobando antes de copiar un archivo si éste ya existe, y preguntando, en ese caso, si desea sobreescribirse.
  • 31. Práctica Mejorar el script anterior, para el caso de que el segundo argumento sea un directorio. En ese caso, se debe comprobar si existe un fichero llamado igual que el argumento1 en ese directorio
  • 32. El bucle for El bucle for en Bash es algo diferente del for de otros lenguajes Se parece más al bucle for each, ya que no se repite un número fijo de veces, sino que se procesan las palabras de una frase una a una
  • 33. El bucle for Sintaxis
  • 34. El bucle for La lista del bucle for puede contener comodines Éste muestra información detallada sobre los contenidos del directorio actual
  • 35. El bucle for Para recorrer los argumentos de un script, lo correcto es usar “$@” entrecomillado $* y $@ interpretan mal los elementos con espacios “$*” cosindera un sólo elemento a todos los argumentos
  • 36. El bucle for Ejemplo. Probar con argumentos con espacios
  • 37. Prácticas Escribir un script que cree, en /tmp, los ficheros f1.txt, f2.txt...f9.txt touch Escribir un script que recorra todos los elementos del directorio recibido como parámetro y muestre todos los subdirectorios que contiene
  • 38. Prácticas Escribir un script que recorra todos los elementos del directorio recibido como parámetro, indicando para cada uno, si tenemos permisos para leer, escribir y ejecutar el archivo
  • 39. Operadores y temas relacionados El comando interno let permite evaluar expresiones con números enteros, para asignar su resultado a una variable $ let “n=3*4” $ echo $n 12
  • 40. Operadores y temas relacionados Operadores aritméticos +, -, *, / ** (potencia) % (módulo) +=, -=, *=, /=, %= let “n += 1” #incrementa n
  • 41. Operadores y temas relacionados Operadores lógicos &&, || Operadores de bit <<, >> ... Casi no se usan, no los veremos
  • 42. Práctica Escribir un script que reciba un número como parámetro y diga si es par o impar Escribir un script que sume todos los parámetros recibidos Usar for para recorrerlos
  • 43. El bucle while Comprueba la condición al comienzo del bucle, y continúa ejecutando mientras sea cierta La condición del bucle es como las condiciones en las construcciones if
  • 44. El bucle while Ejemplo
  • 45. El bucle while Otro ejemplo
  • 46. Práctica Escribir un script que calcule el factorial del número recibido como parámetro Escribir un script que ejecute un bucle infinito mostrando las conexiones de red cada cinco segundos netstat –inet sleep
  • 47. Práctica Escribir un script que funcione como el comando nslookup, usando el comando host Un bucle que lee un nombre de teclado hasta que se introduzca 'fin' Se usa el comando host para obtener la IP correspondiente
  • 48. El bucle until Comprueba la condición al comienzo del bucle, y continúa ejecutando mientras sea falsa, al contrario que el bucle while
  • 49. El bucle until Un ejemplo anterior, usando until en lugar de while
  • 50. Práctica Escribir el script del factorial usando until en lugar de while Escribir el mismo script que imita el comando nslookup, usando until en lugar de while
  • 51. Control de bucles Comandos que afectan al comportamiento de los bucles: break: sale del bucle continue: pasa a la siguiente iteración
  • 52. Control de bucles Mejorando un ejemplo anterior
  • 53. Práctica Escribir un script que muestre los número de 1 a 10, pero no el 3 Modificar el script que imita el comando nslookup, para que no intente resolver el host “fin”
  • 54. La construcción case La construcción case es parecida al switch en C/C++ Permite saltar a uno de diferentes bloques de código dependiendo de las condiciones Apropiado para manejar opciones de un menú
  • 58. Práctica Realizar un script que reciba dos parámetros: Uno será el nombre de un fichero El otro representa la acción a realizar sobre el fichero mostrar: se muestra el fichero (cat) estadisticas: se muestran sus estadísticas (stat) tipo: muestra el tipo de fichero (file) Si se recibe otra acción, debe mostrarse un error
  • 59. La construcción select La construcción select es otra forma de generar menús Pide al usuario que introduzca uno de los elementos presentados en la lista