37
 Haga clic para modificar el estilo de subtítulo del patrón 5/2/12 Programación Shell:

Programacion Shell Alumno

Embed Size (px)

Citation preview

Page 1: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 1/37

 

Haga clic para modificar el estilo de subtítulo delpatrón

5/2/12

Programación Shell:

Page 2: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 2/37

 

5/2/12

¿Que son los shells?

Es una parte fundamental de todo sistemaoperativo que se encarga de ejecutar órdenesbásicas para el manejo del sistema.

Suelen incorporar características como:

control de procesos

redirección de ficheros

leguaje para escribir pequeñosprogramas

Hay muchos:

command.com cmd.exe - DOS y derivados

Page 3: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 3/37

 

5/2/12

Para escribir nuestros programas en shellusaremos cualquier clase de editor de texto,por ejemplo vi.

El programa debe empezar con la siguientelínea (debe ser la primera línea del fichero):

#!/bin/bash

Los caracteres #! indican al sistema que el primer

argumento que sigue en la línea es el programa autilizar para ejecutar este archivo. En este casousamos el shell /bin/bash.

Cuando hallas escrito y guardado tu script

Page 4: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 4/37

 

5/2/12

Para hacer el script ejecutable debemosescribir el siguiente comando: chmod 755nombre-del-script.

Después puedes ejecutar tu scriptescribiendo:

./nombre-del-script

o

 sh nombre-del-script

Page 5: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 5/37

 

5/2/12

2.- Variables

 Asignación:La asignación de variables se realiza

simplemente indicando su nombre, unsigno =, y el valor, como en elsiguiente ejemplo: nombre="Luis"

 

Valor:

El valor de una variable se tomaanteponiendo un signo $ al nombre,así si queremos imprimir el valor de la

variable nombre que creamos antes ejemplo:echo $nombre

Page 6: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 6/37

 

5/2/12

Comentarios en los scripts.

En un script todo lo que venga después delsímbolo # y hasta el próximo carácter nuevalínea se toma como comentario y no seejecuta.

Ejemplos:

echo Hola todos # comentario hasta fin

de líneasólo imprime "Hola todos".

# cat /etc/passwdno ejecuta nada, pues el símbolo # convierte

Page 7: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 7/375/2/12

Estructuras básicas deprogramación.

Las estructuras básicas de programación sonsólo dos:

1. la estructura repetitiva

2. la estructura alternativa.

Cada forma tiene sus variaciones, y lacombinación de todas ellas generan múltiplesposibilidades, pero detrás de cualquiera deellas, por compleja que parezca, seencuentran siempre repeticiones oalternativas.

 

Page 8: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 8/375/2/12

1.- Estructura repetitiva: se realiza unaacción un cierto número de veces, o mientrasdure una condición.

Ejemplo:

desde i = 1 hasta i = 7escribir dia_semana(i);

 

 

Page 9: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 9/37

5/2/12

Estructura alternativa: en base a lacomprobación de una condición, se decideuna acción diferente para cada caso.

Ejemplo:# oráculo

caso $estado ensoltero)

escribir "El casamiento será su felicidad";casado)

escribir "El divorcio le devolverá lafelicidad";

divorciado)escribir "Sólo será feliz si se vuelve a

casar"; 

Page 10: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 10/37

5/2/12

Comandos de programación.

Comandos típicos de programación

del shell. 

 

Page 11: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 11/37

5/2/12

Funciones:

Una tarea que se realiza repetidamentedentro del mismo programa puede escribirseaparte e invocarse como una "función".

Para definir una función es preciso elegir un

nombre y escribir un trozo de código asociadoa ese nombre.

La función suele recibir algún valor como"parámetro" en base al cual realiza su tarea.

Definida así la función, para usarla bastaescribir su nombre y colocar el valor delparámetro entre paréntesis.

Ejemplo:función dia_semana(día_hoy)

caso $dia_hoy en1)

devolver "Lunes";;2)

devolver "Martes";;3)

devolver "Miércoles";:4)devolver "Jueves";;

5)devolver "Viernes;;

6) 

Page 12: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 12/37

5/2/12

 Argumentos:

Los argumentos que se pasan en el momentode invocar el script se asignan a las variablesautomáticas $1, $2, $3, etc...

Ejemplo:

script perro gato loro

$1 vale perro, $2 vale gato, $3 vale loro.

En ocasiones se desea asignar a una variableel valor obtenido mediante la ejecución deotro comando. Esto se logra encerrando el

comando entre ' como se ve en el siguiente

ejemplo: 

Page 13: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 13/37

5/2/12

Expresiones:

El comando test permite evaluar expresionesdevolviendo verdadero o falso como resultado(usualmente se utiliza con el comando if):

test "$nombre" = "Luis"

El ejemplo de arriba chequea igualdad.

Si deseamos chequear desigualdad debemosusar el operador != como en C:

test "$nombre" != "Carlos“

 

Page 14: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 14/37

5/2/12

Otros parámetros son:

test $variable Chequea si la variable contiene algún dato, en cuyo casodevuelve verdadero.

test -z $variable Chequea si la variable no contiene datos (longitud cero),en cuyo caso devuelve verdadero.

test $variable1 -eq$variable2

Chequea igualdad entre variables numéricas enteras, sison iguales devuelve verdadero.

test $variable1 -ge$variable2 Chequea si el primer valor es mayor o igual que elsegundo, en cuyo caso devuelve verdadero.test $variable1 -gt$variable2

Chequea si el primer valor es mayor que el segundo, encuyo caso devuelve verdadero.

test $variable1 -le$variable2

Chequea si el primer valor es menor o igual que elsegundo, en cuyo caso devuelve verdadero.

test $variable1 -lt

$variable2

Chequea si el primer valor es menor que el segundo, en

cuyo caso devuelve verdadero.test $variable1 -ne$variable2

Chequea que los dos valores no sean iguales, en cuyocaso devuelve verdadero.

 

Page 15: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 15/37

5/2/12

test $archivo1 -nt

$archivo2

Chequea las fechas de modificación de dos archivos,

devolviendo verdadero si el archivo1 es más nuevo que elarchivo2.

test -f $archivo Chequea si el archivo existe, en caso afirmativo devuelveverdadero.

test -d $archivo Chequea si el archivo en cuestión es un directorio y si existe,en cuyo caso devuelve verdadero.

test -r $archivo Chequea si tenemos permiso de lectura sobre el archivo,devolviendo verdadero en caso afirmativo.test -w $archivo Chequea si tenemos permiso de escritura sobre el archivo,

devolviendo verdadero en caso afirmativo.test -x $archivo Chequea si tenemos permiso de ejecución sobre el archivo,

devolviendo verdadero en caso afirmativo.test -b $archivo Chequea si el archivo es un block device, devolviendo

verdadero en caso afirmativo.test -c $archivo Chequea si el archivo es un character device, devolviendo

verdadero en caso afirmativo.

 

Page 16: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 16/37

5/2/12

Evaluando el resultado de uncomando:

Dado que los comandos que se ejecutan conéxito devuelven un código de ejecuciónequivalente a verdadero, mientras que losque fallan devuelven un código de ejecuciónequivalente a falso, podemos evaluardirectamente el resultado de un comandocomo en el siguiente ejemplo:

grep "$nombre" /etc/passwd > /dev/null

Si el usuario existe el resultado seráverdadero, de lo contrario será falso.

El '> /dev/null' es para evitar la salida del

grep por pantalla. 

Page 17: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 17/37

Haga clic para modificar el estilo de subtítulo delpatrón

5/2/12

Condicionales y ciclos:

 

Page 18: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 18/37

5/2/12

if ... then ... else ... fi

Ejemplo: Shell donde el usuario ingresa porteclado su nombre y es comparado con lavariable nombre.

 

#!/bin/bash

echo -n Ingrese nombre de usuario:

read usuario

if test "$nombre" = "Luis"

then

echo "Hola Luis"

else 

Page 19: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 19/37

5/2/12

1.-Crear y ejecutar el siguiente scripttrabajo.sh:

# trabajo.sh: dice si se trabaja según el día# invocar con parámetros:# domingo, feriado, u otro nombre

cualquiera#if [ $1 = "domingo" ]then

echo "no se trabaja"

elif [ $1 = "feriado" ]then

echo "en algunos se trabaja"else

echo "se trabaja" 

Page 20: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 20/37

5/2/12

for ... in ... do ... done

Este comando implementa una estructurarepetitiva, en la cual una secuencia decomandos se ejecuta una y otra vez. Susintaxis es:

for variable in lista ; do comandos ;done

 

Se puede probar en la línea de comandos:

for NUMERO in 1 2 3 4 ; do echo $NUMERO ; done

for NOMBRE in alfa beta gamma ; do echo$NOMBRE ; done

for ARCH in * ; do echo Nombre archivo $ARCH ; 

Page 21: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 21/37

5/2/12

2.- Crear y ejecutar el siguiente scriptlistapal.sh

# listapal.sh: lista de palabras# muestra palabras de una lista interna#LISTA="silla mesa banco cuadro armario"

for I in $LISTAdo

echo $Idone

# fin listapal.sh 

 

Page 22: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 22/37

5/2/12

3.- Crear y ejecutar el siguiente scriptcontarch.sh

En el siguiente script, el comando expr calculaexpresiones aritméticas; notar su sintaxis.

# contarch.sh

# muestra nombres y cuenta archivos en eldirectorio actual#CUENTA=0for ARCH in *do

echo $ARCHCUENTA=`expr $CUENTA + 1` #

agrega 1 a CUENTAdone

 

Page 23: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 23/37

5/2/12

case ... in ... esac

Este comando implementa alternativas o "casos";elige entre múltiples secuencias de comandos lasecuencia a ejecutar. La elección se realizaencontrando el primer patrón con el que igualauna cadena de caracteres. Su sintaxis es

  case $CADENA in  patrón1)

comandos1;;patrón2)

comandos2;;...*)

comandosN;;esac

 El atrón * se coloca al final; a area cual uier 

Page 24: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 24/37

5/2/12

4.- Crear y ejecutar el siguiente scriptdiasemana.sh : 

# diasemana.sh: nombres de los días de lasemana

# invocar con número del 0 al 6; 0 esdomingo

case $1 in0) echo Domingo;;1) echo Lunes;;2) echo Martes;;

3) echo Miércoles;;4) echo Jueves;;5) echo Viernes;;6) echo Sábado;;

*) echo Debe indicar un número de 0 a 6;;esac 

Page 25: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 25/37

5/2/12

5.- Crear y ejecutar el siguiente scriptestacion.sh :

# estacion.sh# indica la estación del año aproximada

según el mes#

case $1 indiciembre|enero|febrero) echo Verano;;marzo|abril|mayo) echo Otoño;;junio|julio|agosto) echo Invierno;;

setiembre|octubre |noviembre) echoPrimavera;;*)

echo estacion.sh: debe invocarse comoecho estacion.sh mesecho con el nombre del mes en

 

Page 26: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 26/37

5/2/12

while ... do ... done

Este comando implementa una estructurarepetitiva en la cual el conjunto de comandosse ejecuta mientras se mantenga válida unacondición (while = mientras). La condición seexamina al principio y luego cada vez que secompleta la secuencia de comandos. Si lacondición es falsa desde la primera vez, loscomandos no se ejecutan nunca. Su sintaxises

while condición ; do comandos ;done

 

Page 27: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 27/37

5/2/12

6.- Crear y ejecutar el siguiente scriptcrear1.sh

Observar su sintaxis, sobre todo la posición delos espacios en blanco, obligatorios. 

# crear1.sh

# crea archivos arch1....arch9, los lista yluego borra

VAL=1while [ $VAL -lt 10 ] # mientras

$VAL < 10doecho creando archivo arch$VALtouch arch$VALVAL=`expr $VAL + 1`

done 

Page 28: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 28/37

5/2/12

until

Este comando implementa una estructurarepetitiva en la cual el conjunto de comandose ejecuta hasta que se cumpla una

condición. En cuanto la condición se cumple,dejan de ejecutarse los comandos. Lacondición se examina al principio; si esverdadera, los comandos no se ejecutan.

Notar la diferencia con while. Su sintaxis es

until condición ; do

comandos ; done 

Page 29: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 29/37

5/2/12

7.- Crear y ejecutar el siguiente scriptcrear2.sh

Usando until, el script anterior se escribiría

# crear2.sh# crea archivos arch1....arch9, los lista y

luego borraVAL=1until [ $VAL -eq 10 ] # hasta que

$VAL = 10do

echo creando archivo arch$VALtouch arch$VALVAL=`expr $VAL + 1`

done

ls -l arch[0-9] 

Page 30: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 30/37

5/2/12

exit

Este comando se utiliza en programación deshell para terminar inmediatamente un scripty volver al shell original.

 

exit: en un script, termina inmediatamente elscript; en la línea de comando, termina la

ejecución del shell actual, y por lo tanto lasesión de UNIX.

exit 6: termina el script devolviendo elnúmero indicado, lo que puede usarse para

 

Page 31: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 31/37

5/2/12

8.- Crear y ejecutar el siguiente scriptusoexit.sh

#!/bin/bash# usoexit.sh: prueba valores de retorno deexit#

clearecho "Prueba de valores de retorno"echo " Invocar con parámetros "echo " bien, error1, error2, cualquiercosa o nada"echo " Verificar valor de retorno con"echo ' echo $?'echoVALOR=$1

case $VALOR in 

Page 32: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 32/37

5/2/12

expr

Este comando recibe números y operadoresaritméticos como argumentos, efectúa loscálculos indicados y devuelve el resultado.

Cada argumento debe estar separado por

blancos. Opera sólo con números enteros yrealiza las operaciones:

suma (+),

resta (-),multiplicación (*),

división entera (/),

resto de división entera (%). 

Page 33: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 33/37

5/2/12

expr 4 + 5devuelve 9 ( 4 + 5 = 9 ).

expr 3 \* 4 + 6 \/2devuelve 15 ( 3 * 4 + 6 /2 = 15 ).

expr 3 \* \( 4 + 3 \) \/2

devuelve 10 ( 3 * (4 + 3) / 2 = 10 ). expr también realiza operaciones lógicas decomparación, aceptando los operadores =, !=,

>, <, >= y <=. El operador != es "no igual";el ! se usa para negar. Estos caracterestambién requieren ser escapados.

echo `expr 6 \< 10`

devuelve 1, cierto para expr.` ` 

Page 34: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 34/37

5/2/12

read

Este comando tiene como propósito solicitarinformación al usuario. Su ejecución capturalas digitaciones del usuario, hasta obtener uncarácter nueva línea (tecla Enter). El ejemplosiguiente obtiene datos del usuario, los repite

en pantalla, solicita confirmación y emite unmensaje en consecuencia.

9.- Crear y ejecutar el siguiente scriptyo.sh

# yo.sh: captura datos del usuario

Page 35: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 35/37

5/2/12

Depuración.

Se llama depuración ("debug") de unprograma al proceso de verificar sufuncionamiento en todos los casos posibles y

corregir sus errores ("bugs", "pulgas"; delinglés, literalmente.

Cuando se está escribiendo un script, puedeconvenir invocarlo de forma especial para

generar información de comandos ejecutadosy errores, para ayudar en la depuración.

Las salidas se imprimen en el error estándar,por lo que pueden direccionarse a un archivosin mezclarse con la salida del comando.

 

Page 36: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 36/37

5/2/12

Ejercicios en clase :

 

Page 37: Programacion Shell Alumno

5/11/2018 Programacion Shell Alumno - slidepdf.com

http://slidepdf.com/reader/full/programacion-shell-alumno 37/37

5/2/12

Realiza los siguientes ejercicios:

Ejercicio 1: Programa que cambia de directorio y nosmuestra donde estamos en cada momento.

Ejercicio 2:Programa que muestra la hora delsistema cada segundo durante 1 minuto.

Ejercicio 3: Programa que nos dice el día de lasemana que fue ayer 

Ejercicio 4: Programa que pide al usuario queintroduzca una cadena de caracteres y la muestra,

por pantalla del derecho y del revés.

Ejercicio 5:Programa que simula una papelera dereciclaje, mediante el cual en lugar de borrar unarchivo, lo que hace es guardarlo en un subdirectorio,

l fi d it b d id t l