Está en la página 1de 37

Programacin Shell:

Haga clic para modificar el estilo de subttulo del patrn

5/2/12

Que son los shells?

Es una parte fundamental de todo sistema operativo que se encarga de ejecutar rdenes bsicas para el manejo del sistema. incorporar caractersticas como:

Suelen

control de procesos de ficheros para escribir pequeos programas


muchos: cmd.exe - DOS y derivados
5/2/12

redireccin leguaje
Hay

command.com

Para

escribir nuestros programas en shell usaremos cualquier clase de editor de texto, por ejemplo vi. programa debe empezar con la siguiente lnea (debe ser la primera lnea del fichero):

El

#!/bin/bash

Los caracteres #! indican al sistema que el primer argumento que sigue en la lnea es el programa a utilizar para ejecutar este archivo. En este caso usamos el shell /bin/bash.
5/2/12 hallas escrito y guardado tu script

Cuando

Para

hacer el script ejecutable debemos escribir el siguiente comando: chmod 755 nombre-del-script. puedes ejecutar tu script escribiendo:
./nombre-del-script o

Despus

sh nombre-del-script
5/2/12

2.- Variables
Asignacin: La

asignacin de variables se realiza simplemente indicando su nombre,

un

signo =, y el valor, como en el


siguiente ejemplo: nombre="Luis"
Valor: El

valor de una variable se toma

anteponiendo un signo $ al nombre,


as si queremos imprimir el valor de la variable nombre que creamos antes ejemplo: 5/2/12 echo $nombre

Comentarios en los scripts.


En

un script todo lo que venga despus del smbolo # y hasta el prximo carcter nueva lnea se toma como comentario y no se ejecuta.

Ejemplos: echo

Hola todos # comentario hasta fin de lnea slo imprime "Hola todos". # cat /etc/passwd 5/2/12 no ejecuta nada, pues el smbolo # convierte

Estructuras bsicas de programacin.


Las

estructuras bsicas de programacin son slo dos:


1. 2.

la estructura repetitiva la estructura alternativa.

Cada

forma tiene sus variaciones, y la combinacin de todas ellas generan mltiples posibilidades, pero detrs de cualquiera de ellas, por compleja que parezca, se encuentran siempre repeticiones o alternativas.
5/2/12

1.-

Estructura repetitiva: se realiza una accin un cierto nmero de veces, o mientras dure una condicin. desde i = 1 hasta i = 7 escribir dia_semana(i);

Ejemplo:

5/2/12

Estructura

alternativa: en base a la comprobacin de una condicin, se decide una accin diferente para cada caso.

Ejemplo:

# orculo caso $estado en soltero) escribir "El casamiento ser su felicidad"; casado) escribir "El divorcio le devolver la felicidad"; divorciado) escribir "Slo ser feliz si se vuelve a casar"; 5/2/12

Comandos de programacin.
Comandos

del shell.

tpicos de programacin

5/2/12

Funciones:
Una tarea Ejemplo:

que se realiza repetidamente dentro del mismo programa puede escribirse funcin dia_semana(da_hoy) aparte e invocarse como una "funcin". caso $dia_hoy en Para definir una funcin es preciso elegir un 1) devolver "Lunes";; nombre y escribir un trozo de cdigo asociado 2) a ese nombre. devolver "Martes";; La funcin suele recibir algn valor como 3) "parmetro" en base al cual realiza su tarea. devolver "Mircoles";: Definida as la funcin, para usarla basta 4) escribir su nombre y colocar el valor del devolver "Jueves";; parmetro entre parntesis. 5) devolver "Viernes;; 5/2/12 6)

Argumentos:
Los

argumentos que se pasan en el momento de invocar el script se asignan a las variables automticas $1, $2, $3, etc...
script $1

Ejemplo:

perro gato loro

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

En

ocasiones se desea asignar a una variable el valor obtenido mediante la ejecucin de otro comando. Esto se logra encerrando el comando entre ' como se ve en el siguiente 5/2/12 ejemplo:

Expresiones:
El

comando test permite evaluar expresiones devolviendo 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 debemos usar el operador != como en C:


test

"$nombre" != "Carlos
5/2/12

Otros parmetros son:


test $variable test -z $variable test $variable1 -eq $variable2 test $variable1 -ge $variable2 test $variable1 -gt $variable2 test $variable1 -le $variable2 test $variable1 -lt $variable2 test $variable1 -ne $variable2 Chequea si la variable contiene algn dato, en cuyo caso devuelve verdadero. Chequea si la variable no contiene datos (longitud cero), en cuyo caso devuelve verdadero. Chequea igualdad entre variables numricas enteras, si son iguales devuelve verdadero. Chequea si el primer valor es mayor o igual que el segundo, en cuyo caso devuelve verdadero. Chequea si el primer valor es mayor que el segundo, en cuyo caso devuelve verdadero. Chequea si el primer valor es menor o igual que el segundo, en cuyo caso devuelve verdadero. Chequea si el primer valor es menor que el segundo, en cuyo caso devuelve verdadero. Chequea que los dos valores no sean iguales, en cuyo caso devuelve verdadero.

5/2/12

test $archivo1 -nt $archivo2 test -f $archivo test -d $archivo test -r $archivo test -w $archivo test -x $archivo test -b $archivo test -c $archivo

Chequea las fechas de modificacin de dos archivos, devolviendo verdadero si el archivo1 es ms nuevo que el archivo2. Chequea si el archivo existe, en caso afirmativo devuelve verdadero. Chequea si el archivo en cuestin es un directorio y si existe, en cuyo caso devuelve verdadero. Chequea si tenemos permiso de lectura sobre el archivo, devolviendo verdadero en caso afirmativo. Chequea si tenemos permiso de escritura sobre el archivo, devolviendo verdadero en caso afirmativo. Chequea si tenemos permiso de ejecucin sobre el archivo, devolviendo verdadero en caso afirmativo. Chequea si el archivo es un block device, devolviendo verdadero en caso afirmativo. Chequea si el archivo es un character device, devolviendo verdadero en caso afirmativo.

5/2/12

Evaluando el resultado de un comando:


Dado

que los comandos que se ejecutan con xito devuelven un cdigo de ejecucin equivalente a verdadero, mientras que los que fallan devuelven un cdigo de ejecucin equivalente a falso, podemos evaluar directamente el resultado de un comando como en el siguiente ejemplo:
grep Si El

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

el usuario existe el resultado ser verdadero, de lo contrario ser falso. '> /dev/null' es para evitar la salida del grep por pantalla. 5/2/12

Condicionales y ciclos:
Haga clic para modificar el estilo de subttulo del patrn

5/2/12

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


Ejemplo:

Shell donde el usuario ingresa por teclado su nombre y es comparado con la variable nombre.

#!/bin/bash echo read if

-n Ingrese nombre de usuario: usuario

test "$nombre" = "Luis" "Hola Luis"


5/2/12

then echo else

1.-Crear

y ejecutar el siguiente script trabajo.sh: # trabajo.sh: dice si se trabaja segn el da #invocar con parmetros: #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/2/12

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


Este

comando implementa una estructura repetitiva, en la cual una secuencia de comandos se ejecuta una y otra vez. Su sintaxis es:

for variable in lista ; do comandos ; done


puede probar en la lnea de comandos:
NUMERO in 1 2 3 4 ; do echo $NUMERO ; done

Se

for for for

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


5/2/12 ARCH in * ; do echo Nombre archivo $ARCH ;

2.-

Crear y ejecutar el siguiente script listapal.sh # listapal.sh: lista de palabras #muestra palabras de una lista interna # LISTA="silla mesa banco cuadro armario" for I in $LISTA do echo $I done # fin listapal.sh

5/2/12

3. En

Crear y ejecutar el siguiente script contarch.sh el siguiente script, el comando expr calcula expresiones aritmticas; notar su sintaxis. # contarch.sh #muestra nombres y cuenta archivos en el directorio actual # CUENTA=0 for ARCH in * do echo $ARCH CUENTA=`expr $CUENTA + 1` # agrega 1 a CUENTA 5/2/12 done

case ... in ... esac


Este

comando implementa alternativas o "casos"; elige entre mltiples secuencias de comandos la secuencia a ejecutar. La eleccin se realiza encontrando el primer patrn con el que iguala una cadena de caracteres. Su sintaxis es case $CADENA in patrn1) comandos1;; patrn2) comandos2;; ... *) comandosN;; esac 5/2/12 El patrn * se coloca al final; aparea cualquier

4.-

Crear y ejecutar el siguiente script diasemana.sh : # diasemana.sh: nombres de los das de la semana # invocar con nmero del 0 al 6; 0 es domingo case $1 in 0) echo Domingo;; 1) echo Lunes;; 2) echo Martes;; 3) echo Mircoles;; 4) echo Jueves;; 5) echo Viernes;; 6) echo Sbado;; *) echo Debe indicar un nmero de 0 a 6;; 5/2/12 esac

5.- Crear y ejecutar el siguiente script estacion.sh : # estacion.sh # indica la estacin del ao aproximada segn el mes # case $1 in diciembre|enero|febrero) echo Verano;; marzo|abril|mayo) echo Otoo;; junio|julio|agosto) echo Invierno;; setiembre|octubre |noviembre) echo Primavera;; *) echo estacion.sh: debe invocarse como echo estacion.sh mes echo con el nombre del mes 5/2/12 en

while ... do ... done


Este

comando implementa una estructura repetitiva en la cual el conjunto de comandos se ejecuta mientras se mantenga vlida una condicin (while = mientras). La condicin se examina al principio y luego cada vez que se completa la secuencia de comandos. Si la condicin es falsa desde la primera vez, los comandos no se ejecutan nunca. Su sintaxis es

while condicin ; do comandos ; done


5/2/12

6.-

Crear y ejecutar el siguiente script crear1.sh su sintaxis, sobre todo la posicin de los espacios en blanco, obligatorios. # crear1.sh # crea archivos arch1....arch9, los lista y luego borra VAL=1 while [ $VAL -lt 10 ] # mientras $VAL < 10 do echo creando archivo arch$VAL touch arch$VAL VAL=`expr $VAL + 1` 5/2/12 done

Observar

until
Este

comando implementa una estructura repetitiva en la cual el conjunto de comando se ejecuta hasta que se cumpla una condicin. En cuanto la condicin se cumple, dejan de ejecutarse los comandos. La condicin se examina al principio; si es verdadera, los comandos no se ejecutan. Notar la diferencia con while. Su sintaxis es

until condicin ; do comandos ; done 5/2/12

7.-

Crear y ejecutar el siguiente script crear2.sh until, el script anterior se escribira

Usando

# crear2.sh # crea archivos arch1....arch9, los lista y luego borra VAL=1 until [ $VAL -eq 10 ] # hasta que $VAL = 10 do echo creando archivo arch$VAL touch arch$VAL VAL=`expr $VAL + 1` done 5/2/12 ls -l arch[0-9]

exit
Este

comando se utiliza en programacin de shell para terminar inmediatamente un script y volver al shell original. en un script, termina inmediatamente el script; en la lnea de comando, termina la ejecucin del shell actual, y por lo tanto la sesin de UNIX. 6: termina el script devolviendo el 5/2/12 nmero indicado, lo que puede usarse para

exit:

exit

8.-

Crear y ejecutar el siguiente script usoexit.sh #!/bin/bash # usoexit.sh: prueba valores de retorno de exit # clear echo "Prueba de valores de retorno" echo " Invocar con parmetros " echo " bien, error1, error2, cualquier cosa o nada" echo " Verificar valor de retorno con" echo ' echo $?' echo VALOR=$1 5/2/12 case $VALOR in

expr
Este

comando recibe nmeros y operadores aritmticos como argumentos, efecta los clculos indicados y devuelve el resultado. argumento debe estar separado por blancos. Opera slo con nmeros enteros y realiza las operaciones:

Cada

suma (+), (-), (*),


5/2/12

resta

multiplicacin divisin resto

entera (/),

de divisin entera (%).

expr

4+5 devuelve 9 ( 4 + 5 = 9 ). expr 3 \* 4 + 6 \/2 devuelve 15 ( 3 * 4 + 6 /2 = 15 ). expr 3 \* \( 4 + 3 \) \/2 devuelve 10 ( 3 * (4 + 3) / 2 = 10 ). expr tambin realiza operaciones lgicas de comparacin, aceptando los operadores =, !=, >, <, >= y <=. El operador != es "no igual"; el ! se usa para negar. Estos caracteres tambin requieren ser escapados. echo `expr 6 \< 10` devuelve 1, cierto para expr. 5/2/12

read
Este

comando tiene como propsito solicitar informacin al usuario. Su ejecucin captura las digitaciones del usuario, hasta obtener un carcter nueva lnea (tecla Enter). El ejemplo siguiente obtiene datos del usuario, los repite en pantalla, solicita confirmacin y emite un mensaje en consecuencia. Crear y ejecutar el siguiente script yo.sh # yo.sh: captura datos del usuario # 5/2/12

9.

Depuracin.
Se

llama depuracin ("debug") de un programa al proceso de verificar su funcionamiento en todos los casos posibles y corregir sus errores ("bugs", "pulgas"; del ingls, literalmente. se est escribiendo un script, puede convenir invocarlo de forma especial para generar informacin de comandos ejecutados y errores, para ayudar en la depuracin. salidas se imprimen en el error estndar, por lo que pueden direccionarse a un archivo 5/2/12 sin mezclarse con la salida del comando.

Cuando

Las

Ejercicios en clase :

5/2/12

Realiza los siguientes ejercicios:


Ejercicio Ejercicio Ejercicio Ejercicio

1: Programa que cambia de directorio y nos muestra donde estamos en cada momento. 2:Programa que muestra la hora del sistema cada segundo durante 1 minuto. 3: Programa que nos dice el da de la semana que fue ayer 4: Programa que pide al usuario que introduzca una cadena de caracteres y la muestra, por pantalla del derecho y del revs. 5:Programa que simula una papelera de reciclaje, mediante el cual en lugar de borrar un archivo, lo que hace es guardarlo en un subdirectorio, 5/2/12 con el fin de evitar borrados accidentales.

Ejercicio

También podría gustarte