• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

Tema 5. Programacion Script Avanzada

on

  • 35,943 views

Programación en shell script avanzada

Programación en shell script avanzada

Statistics

Views

Total Views
35,943
Views on SlideShare
34,928
Embed Views
1,015

Actions

Likes
16
Downloads
1,295
Comments
5

19 Embeds 1,015

http://blog.pablo-morales.com 347
http://tecnoacademy.blogspot.com 301
http://www.notasanime.com.ar 92
http://www.slideshare.net 86
http://tecnoacademy.blogspot.mx 61
http://tecnoacademy.blogspot.com.es 49
http://presentacion.org 23
http://zendhispano.blogspot.com 16
http://tecnoacademy.blogspot.com.ar 15
https://uvg.blackboard.com 9
http://static.slideshare.net 6
http://tecnoacademy.blogspot.be 2
http://tecnoacademy.blogspot.com.br 2
http://tecnoacademy.blogspot.gr 1
http://tecnoacademy.blogspot.it 1
http://tecnoacademy.blogspot.co.uk 1
http://i226.photobucket.com 1
http://webcache.googleusercontent.com 1
http://slideshow.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

15 of 5 previous next Post a comment

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Tema 5. Programacion Script Avanzada Tema 5. Programacion Script Avanzada Presentation Transcript

    • Otras formas de llamar un script sh scriptname /bin/bash scriptname Hacer el script ejecutable con chmod da a todo el mundo permisos lectura ejecución da a todo el mundo permisos de lectura chmod 555 scriptname ejecución chmod +rx scriptname chmod u+rx scriptname (da solo al propietario del script el permiso de lectura y ejecución)
    • Lectura de variables mas profesional: echo –n “Introduzca un parámetro :” read VAR echo “El valor del parametro es $a” De esta manera lee el parámetro en la misma línea.
    • Exit y Exit status Todo comando retorna un estado de salida (return status). Un comado ejecutado con éxito retorna un valor de 0, mientras que un comando que ha dado error mostrará un valor distinto de 0 (error code). exit N Se utilizara para retornar un valor N a la shell (de 0 a 255) La variable $? contendrá el exit status del ultimo comando ejecutado
    • Copiar y ejecutar el siguiente script #!/bin/bash echo hello echo $? Lskdf echo $? echo exit 113
    • Recordando …. Comparaciones de ficheros if [ -a $FICHERO ] es un fichero If [ -f $FICHERO ] es un fichero regular If [ -d $FICHERO ] es un directorio If [ -r $FICHERO ] es un fichero y tiene permiso lectura If [ -w $FICHERO ] es un fichero y tiene permiso escritura If [ -x $FICHERO ] es un fichero y tiene permiso de ejecución If [ -s $FICHERO ] es un fichero y tiene tamaño mayor que 0 If [ $FICHERO1 -nt $FICHERO2 ] fichero1 es mas nuevo que fichero2 If [ $FICHERO1 -ot $FICHERO2 ] fichero1 es mas nuevo que fichero2
    • EJERCICIO Crear un fichero pruebafich.sh que tome TRES parámetros (nombre de fichero ) como entrada y que compruebe que los ficheros existen y son ficheros regulares y muestre el nombre del fichero mas antiguo.
    • RECORDANDO … Comparaciones de enteros -eq -le Es igual a Menor o igual que If [ “$a” –eq “$b” ] If [ “$a” –le “$b” ] -ne < No es igual a Menor que (doble paréntesis) If [ “$a” –ne “$b” ] ((“$a”)<(“$b”)) -gt <= Mayor que Menor o igual que (doble paréntesis) If [ “$a” –gt “$b” ] ((“$a”)<=(“$b”)) -ge > Mayor o igual Mayor que (doble paréntesis) If [ “$a” –ge “$b” ] ((“$a”)>(“$b”)) -lt >= Menor que Mayor o igual que (doble paréntesis) If [ “$a” –lt “$b” ] ((“$a”)>=(“$b”))
    • Comparaciones de strings = Es igual a If [ “$a” = “$b” ] == Es igual a If [ “$a” == “$b” ] != No es igual a If [ “$a” != “$b” ] -z El string es nulo (tiene longitud cero) If [ -z “$a” ] -n El string no es nulo (not null) If [ -n “$a” ]
    • COMANDO SHIFT Desplaza los argumentos pasados al script shift 3 (mueve 3 posiciones los parámetros pasados) $1=$4 $2=$5 ...
    • Ejercicio Realizar un script al que se le pasen 6 parámetros Mostrar los parámetros 1, 2 y 3 Ejecutar el comando shift 3 Mostrar los nuevamente los parámetros 1, 2 y 3
    • COMANDO LET y OPERADORES Operadores aritméticos: + suma - resta * multiplicación / división ** exponenciación % módulo
    • COMANDO LET y OPERADORES II ¿Qué muestra por pantalla ? let “z=5**3” echo “z = $z” ¿Qué muestra por pantalla ? let “z=5%3” echo “z = $z”
    • COMANDO LET y OPERADORES III += mas igual let “var += 5” Incrementa en 5 la variable var -= menos igual *= multiplicado igual let “var *= 5” Resultado var=var*5 /= dividido igual %= modulo igual
    • OPERADORES LOGICOS && AND (LOGICO) if [ $condicion ] && [ $condicion ] #!/bin/bash a=24 b=47 if [ “$a” –eq 24 ] && [ “$b” –eq 47 ] then echo “ el text uno funciona” else echo “ el text uno falla” fi
    • OPERADORES LOGICOS II || OR (LOGICO) if [ $condicion ] || [ $condicion ] #!/bin/bash a=24 b=47 if [ “$a” –eq 26 ] || [ “$b” –eq 47 ] then echo “ el text dos funciona” else echo “ el text dos falla” fi
    • MANIPULACION DE STRINGS LONGITUD DE UN STRING ${#string} Poco utilizado expr length $string expr “$string” : ‘.*’ stringZ=abcABC echo ${#stringZ} echo `expr length $stringZ` Ejercicio Ejecutar el código anterior
    • Ejercicio Realizar un programa password.sh que pida una password por la entrada estándar y compruebe que la longitud de la password introducida sea mayor de 5 y menor de 10
    • MANIPULACION DE STRINGS II POSICION NUMERICA DE UN SUBSTRING EN UN STRING stringZ=abcABC123ABCabc echo `expr index “$stringZ” C12` Resultado 6 que sería la posición de la C
    • MANIPULACION DE STRINGS III EXTRACCION DE UN SUBSTRING ${str:pos} Extrae el substring desde la posición pos del string str Ejemplo: stringZ=abcABC123ABCabc echo ${stringZ:0} echo ${stringZ:1} echo ${stringZ:7} Ejercicio: Copiar y ejecutar el código anterior.
    • MANIPULACION DE STRINGS III EXTRACCION DE UN SUBSTRING II ${str:pos:len} Extrae el substring desde la posición pos del string str tomando len caracteres Ejemplo: stringZ=abcABC123ABCabc echo ${stringZ:0:5} echo ${stringZ:1:5} echo ${stringZ:7:5} Ejercicio: Copiar y ejecutar el código anterior.
    • MANIPULACION DE STRINGS IV También funciona: Expr substr $string $posicion $length stringZ=abcABC123ABCabc Echo `expr substr $stringZ 4 3` Copiar y ejecutar el código anterior.
    • MANIPULACION DE STRINGS V BORRADO DE SUBSTRING ${str#substr} Elimina el match mas corto que encuentre del substr en str. Haciendo el match del inicio al final. Ejemplo: stringZ=abcABC123ABCabc echo ${stringZ#a*C} Daría como resultado 123ABCabc El * se utiliza como comodín Ejercicio: Copiar y ejecutar el código anterior.
    • MANIPULACION DE STRINGS VI BORRADO DE SUBSTRING II ${str##substr} Elimina el match mas largo que encuentre del substr en str. Haciendo el match del inicio al final. Ejemplo: stringZ=abcABC123ABCabc echo ${stringZ#a*C} Daría como resultado abc El * se utiliza como comodín Ejercicio: Copiar y ejecutar el código anterior.
    • MANIPULACION DE STRINGS VII BORRADO DE SUBSTRING III ${str%substr} Elimina el match mas corto que encuentre del substr en str. Haciendo el match del final al inicio. Ejemplo: stringZ=abcABC123ABCabc echo ${stringZ%b*c} Daría como resultado abcABC123ABCa El * se utiliza como comodín Ejercicio: Copiar y ejecutar el código anterior.
    • MANIPULACION DE STRINGS VIII BORRADO DE SUBSTRING IV ${str%%substr} Elimina el match mas largo que encuentre del substr en str. Haciendo el match del inicio al final. Ejemplo: stringZ=abcABC123ABCabc echo ${stringZ#b*c} Daría como resultado a El * se utiliza como comodín Ejercicio: Copiar y ejecutar el código anterior.
    • MANIPULACION DE STRINGS IX REEMPLAZO DE SUBSTRING I ${str/substr/reemplazo} Reemplaza el primer match de substr con reemplazo. Haciendo el match del inicio al final. Ejemplo: stringZ=abcABC123ABCabc echo ${stringZ/abc/xyz} Daría como resultado xyzABC123ABCabc Ejercicio: Copiar y ejecutar el código anterior.
    • MANIPULACION DE STRINGS X REEMPLAZO DE SUBSTRING II ${str//substr/reemplazo} Reemplaza todos los matches de substr con reemplazo. Ejemplo: stringZ=abcABC123ABCabc echo ${stringZ//abc/xyz} Daría como resultado xyzABC123ABCxyz Ejercicio: Copiar y ejecutar el código anterior.
    • MANIPULACION DE STRINGS XI REEMPLAZO DE SUBSTRING III ${str/#substr/reempl} Si substr hace match con los primeros caracteres del string str, hace el reemplazo de substr con reempl. Ejemplo: stringZ=abcABC123ABCabc echo ${stringZ/#abc/XYZ} Daría como resultado XYZABC123ABCabc Ejercicio: Copiar y ejecutar el código anterior.
    • MANIPULACION DE STRINGS XII REEMPLAZO DE SUBSTRING III ${str/%substr/reempl} Si substr hace match con los últimos caracteres del string str, hace el reemplazo de substr con reempl. Ejemplo: stringZ=abcABC123ABCabc echo ${stringZ/%abc/XYZ} Daría como resultado abcABC123ABCXYZ Ejercicio: Copiar y ejecutar el código anterior.
    • EJERCICIO Realizar un script cambiaext.sh que cambie las extensiones de los ficheros de un directorio. Al script se le pasarán como parámetros, la extensión que queremos modificar y la nueva extensión
    • #!/bin/bash E_BADARGS=65 case $# in 0|1) echo “uso: cambiaext.sh extorigen extdestino” exit ;; esac for ficheros in *.$1 do mv $fichero ${fichero%$1}$2 done exit 0
    • Generación de números aleatorios $RANDOM Ejemplo Generar 10 números aleatorios #!/bin/bash MAXCOUNT=10 count=1 while [ $count –le $MAXCOUNT ]; do number=$RANDOM echo $number let “count += 1” done
    • Ejercicio Generar 10 números aleatorios mayores que 10 y menores que 1000
    • Manipulación de variables al estilo de c (( a = 23 )) echo $a (( a++ )) echo $a (( ++a )) echo $a (( a-- )) echo $a (( --a )) echo $a (( a+=5 )) echo $a Ejecutar los comandos anteriores
    • REALIZACION DE UN MENU #!/bin/bash RES=0 while [ $RES -ne 2 ]; do echo quot;1- Listar archivosquot; echo “2- Salir“ read RES case $RES in 1) ls ;; 2) echo quot;Fin de Ejecucionquot; ;; esac done
    • EJERCICIO Crear un script visualiza.sh con un menú que realice las siguientes opciones: •Opción 1 listar el script •Opción 2 listar el script desde la última línea hasta la primera •Opción 3 listar el script con las líneas invertidas de derecha a izquierda •Opción 4 salir Ejemplo Hola -> aloH Mirar los comandos cat tac y rev
    • Ejercicio Realizar un script menudir.sh que realice las siguientes opciones: quot;1- Listar archivosquot; quot;2- Mostrar nombre del directorio actualquot; quot;3- Crear directorioquot; quot;4- Borrar directorioquot; quot;5- Salirquot;
    • #!/bin/bash RES=0 while [ $RES -ne 7 ]; do echo quot;1- Listar archivosquot; echo quot;2- Mostrar nombre del directorio actualquot; echo quot;3- Crear directorioquot; echo quot;4- Borrar directorioquot; echo “5- Salirquot; read RES case $RES in 1) ls ;; 2) pwd ;; 3) echo quot;Introduce un nombre de directorio a crearquot; read USDIR mkdir $USDIR ;; 4) echo quot;Introduce un nombre de directorio a borrarquot; read USDIR rmdir $USDIR ;; 5) echo quot;Fin de Ejecucionquot; ;; esac done
    • Algunos comandos … touch Crea un nuevo fichero. Equivalente a >> fichero o : >> fichero cal Muestra un calendario por pantalla sleep Hace una pausa de un numero especificado de segundos (sleep seconds)
    • Ejercicio Crear un script pausacal.sh que muestre un calendario por pantalla solo 5 segundos Una vez pasados esos segundos, limpia la pantalla y crea el fichero bravo.txt que no contendrá nada en su interior
    • Mas comandos…. Sort Ordenación de un fichero, a menudo se utiliza en un pipe. Este comando es capaz de ordenar un stream o un fichero Unique Borra entradas duplicadas en un fichero. Se utiliza junto con sort en un pipe. Ejercicio Tenemos los ficheros lista1.txt, lista2.txt y lista3.txt y los queremos agrupar y ordenar. El resultado lo queremos almacenar en el fichero lista.txt
    • Solución cat lista1.txt, lista2.txt lista3.txt |sort |unique > lista.txt
    • Mas comandos…. cut Extrae campos de ficheros. Mas simple que awk pero mas facil de utilizar. Importante es el –d (delimitador) y –f (campos elegidos) Ejercicio Queremos extraer del fichero /etc/passwd los campos 1 y 3 (usuario e identificador)
    • Solución Cut –d ‘:’ –f1,3 /etc/passwd Join Es una poderosa utilidad que permite unir dos ficheros de una forma eficaz. Crea una versión simple de una base de datos relacional. Este comando funciona sobre dos ficheros, pero solo relaciona aquellas líneas con un campo en común (usualmente campos numéricos) y escribe el resultado en stdout. Los campos que van a ser unidos deben de estar ordenados de forma que los matches funcionen de forma adecuada.
    • Tenemos los siguientes ficheros Fichero1.txt Fichero2.txt 100 zapatos 100 40euros 200 calcetines 200 5euros 300 medias 300 6euros Ejercicio Unir los siguientes ficheros e insertar el resultado en el fichero total.txt
    • Solución join fichero1.txt fichero2.txt > total.txt
    • GREP Una herramienta de busqueda multiproposito que utiliza expresiones regulares. Utilización: grep patter [fichero…] $ grep quot;busca estoquot; /var/log/messages -c (-c count cuenta las veces que aparece la cadena quot;busca estoquot; en el fichero) $ grep texto archivo $ grep quot;^textoquot; archivo (busca en el archivo las líneas que comienzan por texto) -v – Imprime las líneas que no contienen el patrón -A NUM – Imprime NUM líneas después de la línea que contiene el patrón -B NUM – Imprime NUM líneas antes de la línea que contiene el patrón -c – Imprime el numero de líneas que corresponden con el patrón -i – No diferencia entre mayúsculas y minúsculas -r – Modo recursivo. Lee todos los archivos bajo cada directorio
    • SED editor de stream no interactivo. Tiene muchos usos en shell scripts. Utilización: sed ’comando’ [archivo] $sed -e 'command1' -e 'command2' -e 'command3' file ${shell command}|sed -e 'command1' -e 'command2' Ejemplos: $sed /patron/d fich.txt Muestra el fichero fich.txt y elimina las líneas del fichero que coinciden con patrón $sed s/patron/nuevoPatron/g fich.txt Sustituye patrón por nuevoPatron del fichero fich.txt y lo muestra por pantalla. El modificador g permite sustituir todas las ocurrencias en la línea, y no solo la primera. $sed 12, 18d /tmp/petete Sed muestra todas las líneas de /tmp/petete excepto de la 12 a la 18
    • TR Filtro de traducción de caracteres. $ for i in *; do mv $i ‘echo $i | tr -d ’ ’; done elimina los espacios en blanco de un archivo $ for i in *; do mv $i ‘echo $i | tr ’ ’ ’_’‘; done reemplaza los espacios en blanco por underscores $ cat archivo | tr ’A-Z’ ’a-z’ cambia las mayusculas a minusculas $ cat archivo | tr ’a,e,i’ ’A,E,I’ (cambia las a e i por A E I respectivamente) $ tr -d 0-9 < filename -> elimina del fichero los numeros $ tr -d b-d < filename -> elimina del fichero las b c d $ tr -s -> elimina todos los match salvo el primero (exceso de whitespace) $ tr -c -> inverso $ tr -cd -> elimina todas las palabras distintas a la proporcionada
    • Algunas opciones de LS --sort={none,time,size,extension} -R recursivo -a tambien ficheros que empiezan por '.' -l columnar -r reverse invierte el orden de la clasificación -t clasifica por la marca de tiempo mostrada --color
    • factor numero Descompone numero en sus factores primos Algunas opciones del comando ID id -nu (muestra el usuario) (-n muestra el nombre en vez del número) id -ng (muestra el grupo efectivo) id -nG (muestra todos los grupos
    • Awk Extractor y formateador de ficheros programable. Bueno para manipular y extraer campos columnas de ficheros estructurados. Su sintaxis es similar a C. $ awk '/prueba/ {print}' /tmp/petete El patrón que busca AWK es 'prueba' y la acción que realiza cuando encuentra una línea en /tmp/petete con la cadena 'prueba' es 'print‘ $ awk '/prueba/ {i=i+1} END {print i}' /tmp/petete Imprime el número de líneas que contienen el literal prueba. $ cat /etc/passwd | awk -F quot;:quot; '{print $1}' (imprime los login del sistema). Imprime la primera columna, el primer parámetro.
    • basename Extrae el path de un fichero, imprimiendo solo el nombre del fichero La construcción basename $0 dentro de un script permite conocer su nombre. Se suele utilizar en la muestra de mensajes como por ejemplo: Echo “Modo de uso: `basename $0` arg1 … argn” dirname Extrae el basename de un nombre de fichero. Imprime solo el path. Traceroute Muestra la ruta seguida desde nuestra máquina hasta una maquina concreta (dirección ip o nombre) Ejemplo /usr/sbin/traceroute www.terra.es
    • Administración de usuarios Crear una cuenta de usuario: useradd <nombreusuario> -c <comentario> -m(para crear home - make) -d <directorio de trabajo> -s <shell> -G <grupos> -g grupo -p password Borrar una cuenta de usuario: userdel <nombreusuario> -r(remove home)
    • Administración de grupos Creación de un grupo: groupadd <nombregrupo> -g <gid> Borrado de un grupo: groupdel <nombregrupo>
    • Expresiones regulares El carácter ^ se corresponde normalmente con el inicio de la línea. En algunas expresiones se corresponde con la negación. Ejemplo grep ‘^hola’ fichero.txt Busca las líneas que comiencen por la palabra hola en el fichero. El carácter $ se corresponde con el fin de una línea. Ejemplo grep ‘hola$’ fichero.txt Busca las líneas que terminen por la palabra hola en el fichero
    • Brackets […] agrupa una serie de caracteres de una expresión regular “[xyz]” se corresponde con los caracteres x, y o z. “[c-n]” se corresponde con alguno de los caracteres rango c..n “[B-Pk-y]” se corresponde con alguno de los caracteres rango B..P o k..y “[a-z0-9]” se corresponde con cualquier carácter minúscula o cualquier dígito “[^b-d]” se corresponde con cualquier carácter excepto algún carácter del rango b..d Backslash permite representar cualquier carácter especial. “$” significa $ “” significa
    • /dev El directorio /dev contiene entradas para los dispositivos físicos que pueden o no pueden estar presentes en el hardware Para montar un USB flash drive hay que añadir la siguiente linea en el /etc/fstab : /dev/sda1 /mnt/flashdrive auto noauto,user,noatime 0 0 /proc El directorio /proc es un pseudo sistema de ficheros. Los ficheros en /proc son en realidad procesos que están corriendo en el sistema y contienen información sobre estadísticas de ellos.
    • /dev/null Es el agujero negro del sistema. Sería como un fichero de solo lectura. Todo lo que se escribe en el desaparece para siempre. Si se intenta leer de el no vamos a recuperar nada. Dada esta característica se suele utilizar mucho en scripts /dev/zero Al igual que /dev/null es un pseudofichero, produce una serie de ceros (ceros binarios no ceros ASCII). El uso que se le da a este fichero es la creación de ficheros temporales o ficheros de swap con algún tamaño determinado.
    • COLOREANDO NUESTROS SCRIPTS Utilizar el siguiente template para escribir texto coloreado y background coloreado. echo –e ‘E[color1;color2mEl texto se colocaría aquí.’ Con el E[ se comienza la secuencia de escape. El punto y coma divide los dos colores. Color1 es el color de foreground y color2 es el color de background. Echarle un vistazo a la siguiente tabla. La m termina la secuencia de escape, y el texto comienza inmediatamente detrás. No olvidar las comillas simples
    • Tabla de colores Color Foreground Background Negro 30 40 Rojo 31 41 Verde 32 42 Amarillo 33 43 Azul 34 44 Magenta 35 45 Cyan 36 46 Blanco 37 47