María de Lourdes Torres Martínez Alumno 2 Alumno 3 Alumno 4 Alumno 5.
Programacion Shell Alumno
-
Upload
hugo-castillo -
Category
Documents
-
view
80 -
download
2
Transcript of 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:
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
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
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
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
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
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.
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);
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";
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.
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)
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:
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“
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.
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.
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.
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:
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
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"
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 ;
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
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
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
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
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
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
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
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
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]
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
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
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 (%).
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.` `
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
#
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.
5/11/2018 Programacion Shell Alumno - slidepdf.com
http://slidepdf.com/reader/full/programacion-shell-alumno 36/37
5/2/12
Ejercicios en clase :
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