Sunteți pe pagina 1din 35

INSTITUTO TECNOLGICO Y DE ESTUDIOS SUPERIORES

DE MONTERREY
LABORATORIO DE SISTEMAS OPERATIVOS

Prctica 2
Programacin shell
Autor: Dr. Juan A. Nolazco Flores
Co-autores: M.C Jorge Villaseor, M.C Roberto Aceves, Ing. Raul Fuentes

Indice
Objetivo
Comandos
Grep
Ejercicio:
Chmod y control de archivos
Shell scripting
Variables
Ejercicio:
Programacin Shell
Tipo de Shell
Procesamiento de comandos
Ejercicio
Comillas del Shell
Ejercicio:
Meta caracteres:
Ejercicio:
Aritmtica del Shell:
Ejercicio:
Comandos para Control de Flujo
Comando de Repeticin
ltimas observaciones
Laboratorio:
Investigacin
Texto
Cdigos ejemplo
Despliegue de correos oficiales a partir de matrculas

Objetivo
Durante la prctica pasada el alumno aprendi a usar los comandos de forma individual y a leer sus
argumentos; solo una pregunta requera el uso del smbolo de pipeline para unir la salida de un
comando a la entrada de otro comando. En esta ocasin el alumno utilizar lo aprendido para crear los
denominamos Shell scripts que permiten la automatizacin de cualquier tipo de tareas, incluyendo
entre otros el ejecutar un comando dependiendo del xito o fracaso del anterior, realizar complejas
operaciones con archivos de entrada cuyos nombres aparecen en la lnea de comandos del nuevo Shell
script etc.

Comandos
A continuacin se muestra un breve resumen de los comandos que se utilizaron durante la prctica
pasada:
ls: Lista archivos y directorios
mkdir: Crea un directorio.
rmdir: Borra un directorio. Nota: el directorio debe de estar vaco.
cd: Cambia el directorio actual a otro.
less: Permite visualizar un documento de texto.
cat: Lee, concatena y despliega archivos de texto en stdout.
head: Despliega en stdout las primeras lneas de un archivo de texto.
tail: Despliega en stdout las ltimas lneas de un archivo de texto.
rm: Remueve archivos.
pwd: Imprime la direccin del directorio actual.
touch: Cambia el timestamp de un archivo (o lo crea).
more: Despliega las lneas de un archivo de texto.
ln: Crea enlaces entre archivos.
grep Imprime lineas que coincidan con un patrn.
chmod Cambia las propiedades de lectura, escritura y ejecuccin de un archivo.

La mayora de ellos se utuilizan para navegar por los directorios y manipular archivos o bien desplegar
sus contenidos pero existen otro par de comandos muy importantes y muy utilizados para navegacin y
resumen de resultados los cuales son GREP y AWK. El primero es muy bsico y por lo mismo se
utilizar a partir de esta prctica mientras que el segundo es ms poderoso y tendr su propia prctica
de laboratorio

Grep
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

Esta utilera de Unix es una de las mas populares. Su modo de uso ms bsico es cuando recibe como
parmetros una expresin regular y el nombre de un archivo. El comando lee la informacin del
archivo e imprime las lneas que contengan coincidencias con la expresin regular.

En su forma mas bsica, GREP nos permite buscar patrones, mediante expresiones regualares, dentro
de un archivo pero por lo general GREP es una herramienta utilizada cuando uno o ms comandos
desplegaran mucha informacin que no necesariamente nos interesa; por ejemplo. cuando slo
buscamos lneas del archivo que mencionen ciertos usuarios o programas.

NOTA: Es muy posible que el alumno an no tenga prctica con las Expresiones regulares
pero no debe de preocuparse; el uso de stas durante el laboratorio estara limitado a las mas
sencillas. Como quiera, puede utilizar esta liga de Wikipedia para leer mas acerca de ellas:
http://es.wikipedia.org/wiki/Expresi%C3%B3n_regular

Ejercicio:

Busca la palabra Navajo en el archivo /usr/share/dict/words , que es el diccionario de palabras de


Linux.

La sintaxis clsica uilizando la entrada estandar es: grep <archivo> <expresin regular> y en este
caso sera:

ccna_admin@ccnalab12:/home/redes1$ grep Navajos /usr/share/dict/words


Navajos

Como se mencionaba anteriormente GREP se utiliza ms para el despliegue de informacin, en este


caso con una entrada desviada se puede utilizar la siguiente lnea:

ccna_admin@ccnalab12:/home/redes1$ cat /usr/share/dict/words | grep Navajos


Navajos

Recordar que el primer comando ( cat <archivo1> <archivo 2> ) se encarga de desplegar (ms
propiamente, enviar a standard output) el resultado de la concatenacin de dos archivos; o el
contenido de un archivo si solo se menciona uno solo en el comando. Esto se puede cambiar por
cualquier otra sere de comandos. En este caso particular utilizar los comandos more o cat daran el
mismo resultado .

Un ejemplo de resumen de datos puede ser por ejemplo buscar todo lo que empiece con "nav" en dicho
archivo y trabajar con ellos.

ccna_admin@ccnalab12:/$ more /usr/share/dict/words | grep Nav | wc -l


13

En este caso lo que se hace es el conteo de palabras que contienen "nav". Son trece.
Chmod y control de archivos
Un elemento bsico de los archivos en Sistemas basados en UNIX son sus propiedades para decidir
que se puede hacer con ellos y quienes lo pueden hacer. Lo primero prcticamente se divide en 3
elementos:

Lectura (Read) - Leer el contenido del archivo (y desplegarlo)


Escritura (Write) - Alterar el contenido del archivo
Ejecucin (EXecute) - Utilizar un programa para cargar el archivo (o bien ejecutar el
archivo)
Estos tres campos quedan definidos para lo que se considera UGO:
Usuario (User)
Grupo (Group)
Otros (Others)

En otras palabras el usuario dueo del archivo tiene sus derechos sobre el archivo (usualmente todos),
los miembros del grupo al que pertenece el usuario pueden tener algunos derechos (usualmente
lectura ) y todos los dems usuarios podran no tener ningun derecho. Por ejemplo, todo los archivos
claves del usuario Root en el folder /etc/ permiten su lectura para los demas usuarios pero no su
modificacin por los dems usuarios; es por eso que cuando en el ejercicio anterior buscamos Navajo,
pudimos realizarlo.
Una forma sencilla de verificar estos permisos es utilizando el comando ls -l , como se muestra en el
siguiente ejemplo:
usuario@Localhost:~$ ls -l /etc/shells
-rw-r--r-- 1 root root 73 Apr 25 2012 /etc/shells
Este despliega los datos del archivo /etc/shells e inicia mostrandos primeramente las propiedades del
archivo; el primer guin muestra propiedades especiales del archivo, por ejemplo si se trata de un
folder (en cuyo caso desplegara d), una liga (l) o casos mas especiales que veremos en una futura
prctica. Inmediatamente vienen los controles de UGO, justamente en ese orden y despus aparece
root root que se debe leer como usuario: Root y Grupo: Root (en ese orden. Viendo sus propiedades
vemos que todos los usuarios lo pueden leer, pero solo el usuario Root lo puede modificar pero por
default no le es posible ejecutarlo.
Tip: Cuando hablamos de usuario y su grupo en ocasiones lo escribimos de esta forma:
user:grupo, en este ejemplo sera: root:root, esto se puede hacer incluso ms completo si viene
acompaado de @<maquina-local> , en este caso si tuvisemos root:root@ServFTP
hablaramos del usuario y de su grupo en una mquina especfica
Para poder modificar estos valores el primer requisito es que sea el usuario dueo quien lo haga (o en
su defecto el usuario Root) y mediante el comando chmod cuya sintaxis es:
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...

Los modos tpicos son los primeros dos: mediante letras u octal (base ocho) El octal se refiere a poner
explcitamente los bits de RWX para el conjunto de archivos. Por ejemplo 777 octal (que en binario se
vera como 111111111) le dara todos los permisos a todos los usuarios , 700 solo dara todo los
permisos al usuario que cre el archivo y 744 permitira que los dems usuarios puedan leer el archivo.
El otro modo es un poco ms amigable y permite solo modificar una propiedad, por ejemplo u+r
indica que al usuario se le de el permiso de lectura mientras que u-r elimina ese permiso y en ningn
caso se alteraron los dems. Ejemplos validos:
usuario@localhost:~$ chmod u+r Archivo1
usuario@localhost:~$ chmod u-r,o+r Archivo1
usuario@localhost:~$ chmod 600 Archivo1

Shell scripting
Cuando estamos utilizando un Shell tenemos mucho ms poder de lo que uno supondra al principio,
ya que a diferencia de otras interfaces de lneas de comandos el shell tiene la capacidad de utilizar
variables y estatutos de control de flujo para la toma de decisiones y ejecucin de comandos del
sistema y/o aplicaciones.
En la prctica anterior ejecutaron todos los pasos de forma manual y tomaban decisiones sencillas
poniendo todo de forma de constantes, pero que pasara si tuviesen que repetir el proceso de crear
directorios en 4,10 200 mquinas? Sera tedioso hacerlo manualmente; en su lugar lo podran ejecutar
de forma automatizada desde una sola mquina ( por medio de sesiones remotas). O si en un servidor
al arrancar un servicio primero deban de correr toda una serie de pruebas y respecto a sus resultados
decidir que hacer para tener funcionando al servidor, eso tambien lo pueden automatizar. Esto y ms se
puede automatizar porque shell scripting permite la automatizacin de tareas administrativas.
Para la introduccin a este mecanismo iniciaremos primero hablando de las variables que existen en los
shells, luego veremos los tipos de shell (ya que la sintaxis depende mucho de ello) y por ultimo
manejaremos los controles de flujo del shell BASH, en cada caso manejaremos sencillos ejemplos (y en
el apendice hay un ejemplo completo de formato de texto).

Variables
Cuando se esta utilizando un shell como Bash o Sh se tienen adems de los comandos variables y
las hay de dos tipos, las definidas por el usuarios y las de sistema. Las variables de sistema son
variables predefinidas, por ejemplo HOME, USERNAME, SHELL, PWD. Las variables de usuario se
crean en el momento en el que el usuario las use por primera vez. Estas variables existirn en la sesin
Shell que se estn utilizando en ese momento y dejarn de existir cuando el usuario termine su sesin.

Sin importar el origen de estas variables son de un tipo universal, es decir puedne contener numeros,
letras o cualquier otro formato por lo tanto el usuario debe de saber como trabajarla de antemano. Para
desplegar su contenido se identifican con el smbolo $ ($<VARIABLE> )

Ejercicio:
(1) - Utilice el comando env para conocer las variables del sistema, indique los valores que tienen en su
sistema las variables antes mencionadas. Es ms fcil encontrar dichas variables usando env en
conjunto con grep (ej env | grep HOME).

Las variables del usuario son variables que el usuario define utilizando la siguiente sintaxis:
NOMBRE_VARIABLE=<valor>

El nombre de la variable es un carcter alfanumrico, seguido por caracteres numericos o el carcter


_. Por ejemplo:http://es.wikipedia.org/wiki/Expresi%C3%B3n_regular

user@localhost$ MYVAR=10

El valor de una variable se imprime utilizando el comando echo. Por ejemplo, para imprimir el valor
almacenado en la variable MYVAR: El comando env no desplegar las variables de usuario.

user@localhost$ echo $MYVAR.

Recuerde que dicha variable local existir mientras la sesin del Shell este activa, si el alumno cierra la
terminal se borrara la sesin.
Programacin Shell
Un programa shell es un archivo tipo texto con comandos que son ejecutados secuencialmente.
Comnmente se les conoce con el nombre de script.

Para hacer ejecutable un archivo de comandos, se utiliza el comando chmod como sigue:

user@localhost$ chmod +x <archivo_de_comandos>

Este comando "chmod" cambia los permisos del archivo agregando el de ejecucin (+x) para el
usuario.

Ejemplo: Suponga que tenemos almacenado en un archivo llamado "renglon" el siguiente conjunto de
comandos:

head -5 arch_datos | tail -1

entonces hacemos ejecutable este archivo como sigue:


user@localhost$ chmod +x renglon

Suponiendo que existe el archivo arch_datos y que tiene mas de 5 renglones, entonces para ejecutarlo
hacemos lo siguiente:

user@localhost$ ./renglon

Este sera el ejemplo ms bsico

Tipo de Shell

Durante la prctica pasada utilizamos una terminal corriendo un tipo de shell, usualmente BASH ya
que en un entorno Linux (moderno) Existen una gran variedad de Shells cuyas diferencias radican en
la sintaxis pero no es objetivo de esta prctica profundizar en ellos. Durante la prctica nos
enfocaremos exclusivamente en BASH.

Para confirmar que efectivamente tenemos el shell BASH veremos el contenido del archivo:
/etc/shells . Lo siguiente es la salida de un sistema Ubuntu 11.10 y obviamente puede variar en cada
versin del S.O. o por distribucin.

ccna_admin@ccnalab12:/home/redes1$ cat /etc/shells


# /etc/shells: valid login shells
/bin/csh
/bin/sh
/usr/bin/es
/usr/bin/ksh
/bin/ksh
/usr/bin/rc
/usr/bin/tcsh
/bin/tcsh
/usr/bin/esh
/bin/dash
/bin/bash
/bin/rbash
/bin/false

Por lo mismo que existen una gran variedad de Shells es requerido que la primera lnea de todo Shell
script sea definir el lenguaje en el que est redactado, eso se logra utilizando el conjunto de caracteres
"#!" y se trata de un caso especial que solo debe aparecer una vez. El uso de # (sin el signo de
admiracin) sirve para identificar que se trata de una lnea de comentario.

Por lo mismo, el contenido del script (en un archivo de texto) que hemos realizado hasta este punto
debe de ser lo siguiente

#!
/bin/bas
h

head -5
arch_da
tos | tail
-1

Curiosidad: Notar que la ltima lnea de /etc/shells es /bin/false, esto se utiliza


en ciertos escenarios donde no se desea que un usuario (o programa) pueda
acceder a un shell al realizar ciertas tareas, esto por motivos de seguridad.

Procesamiento de comandos
La sintaxis de un comando en Unix es como sigue:

Comando [argumentos opcionales] <parametros obligatorios>

Los argumentos pueden ser opciones o archivos separados por espacios. Cada opcin va precedida del
caracter "-" y sirven para modificar de diversas maneras la ejecucin del comando.

Si el comando es un script del Shell, cada uno los elementos de la lnea de comando se almacena en
una variable, como se presenta a continuacin:

$@ Muestra todos los argumentos en un string


$0 es el nombre del comando,
$1 es la primer argumento,
$2 es la segundo argumento, etc.
$# Total de variables introducidas

El programa shell puede tomar estas variables para procesarlas. Entonces, en el ejemplo anterior. Si
queremos generalizar para ver cualquier rengln podemos crear un archivo renglon2 con la siguiente
informacin:

#! /bin/bash
head -$1 arch_datos| tail -1

entonces hacemos ejecutable este archivo como sigue:

user@localhost$ chmod +x renglon2

Suponiendo que existe el archivo arch_datos y que tiene mas de 15 renglones, entonces para ver el
contenido del rengln 15 hacemos lo siguiente:

user@localhost$ ./rengln2 15

Ejercicio

Usa el archivo de texto con 15 renglones que creaste anteriormente para comprobar el funcionamiento
de este script.

El siguiente cdigo muestra el manejo de los argumentos de un script (args.sh) en dos formas distintas:
#!/bin/bash
# la primera lnea con un '!' como primer caracter
# del comentario indica qu intrprete se utilizar
# en este caso, bash ubicado en /bin/bash
# Este programa muestra como procesar, uno por uno, los
# argumentos que se dan como entrada a un script.

# <-- este es el simbolo usado para definir un comentario


echo numero de argumentos: $#

# La variable $# contiene la cantidad de argumentos que


# se le dieron al programa (argc)

# respaldamos la lista de los argumentos


ARGUMENTOS=$@

# La varialbe $@ contiene la lista de argumentos (argv)


# Esta es la primera forma de hacerlo:
for arg in $@
do
echo "argumento: $arg"
done
echo ""

# Esta es la segunda forma de hacerlo:


ARGNUM=$# # numero de argumentos

for ((VAR = 1 ; VAR <= $ARGNUM ; VAR++))


do
echo "argumento (${VAR}) = $1"
shift
# hace un corrimiento de la lista de argumentos: $@ ,
# es decir, elimina el primer argumento.
# Por ejemplo:
# si $@ contiene "1 2 3 4" entonces $1 vale: 1
# despues de ejecutar el comando: shift
# $@ es igual a "2 3 4" y $1 vale: 2
done

La sintaxis de los ciclos se vern mas adelante.

Comillas del Shell


El shell tiene definido tres tipos de comillas para ser usados con comandos y/o variables:
es la comilla doble
es la comilla sencilla
` es la comilla inversa.

Los caracteres delimitados por la comilla doble pierden su significado del carcter, excepto los
caracteres $ y \
Los caracteres limitados por comilla simple pierden su significado para el shell.
Los caracteres en comilla inversa forman un comando para ejecutar.

Ejemplos:
user@localhost$ a=5
user@localhost$ echo $a
5
user@localhost$> echo $a
$a
user@localhost$ echo `expr $a + 3`
8

Ejercicio:
Explique con sus propias palabras que accin se realiza al ejecutar cada uno de los siguientes
comandos:

(5) - fecha=date
(6) - echo hoy es: $fecha
(7) - echo hoy es: $fecha
(8) - echo hoy es: `$fecha `

Meta caracteres:
Los meta caracteres son una especie de comodines que se pueden utilizar al momento de referirse a
algn nombre o dato y permiten elegir variaciones de cierto patrn, estos pueden ser: *, ?, [abc]* y se
manejan como si fuesen expresiones regulares.

Ejercicio:
Indica con tus propias palabras que hace cada uno de los siguientes comandos:

(9) - mkdir -p {meet,meat,beat,feet,mean,seat}

(10) - ls m*

(11) - ls me?t

(12) - ls [sm]eat

Aritmtica del Shell:


La sintaxis para realizar operaciones aritmticas son:
expr <op1> <operador_matematico> <op2>

expr es un comando que evala las expresiones que recibe como argumentos.
Ejemplo:

Suma:
user@localhost home $ expr 1 + 3

Resta:
user@localhost home $ expr 2 - 1

Divisin:
user@localhost home $ expr 10 / 2

Mdulo:
user@localhost home $ expr 20 % 3

Para hacer operaciones con numeros flotantes, tenemos que utilizar el comando bc que es el intrprete
de un lenguaje de aritmtica con precisin arbitraria.

user@localhost home $ a=8.32 ; b=5.64


user@localhost home $ c=`echo $a + $b | bc`
user@localhost home $ echo "$a + $b = $c"

Ejercicio:
Si intentas utilizar la multiplicacin directamente en consola notaras que marca un error.
ccna_admin@ccnalab12:~$ expr 7 * 3
expr: syntax error

La razn es sencilla, el smbolo de multiplicacin coincide con un smbolo de meta-caracter, por lo


tanto primero se tiene que hacer que el shell no lo vea como tl, Que sintaxis utilizar para lograr la
multiplicacin?

Comandos para Control de Flujo


Adems de variables y comandos, cuando estamos utilizando shell scripting podemos hacer uso de
ciertos estatutos para lograr un control de flujo. Estos son similares a los lenguaje de programacin
pero tienen una sintaxis mas estricta.

La sintaxis del comando if es la siguente:

if condition; then
comando1_then
...
else
comando1_else
...
fi

Ejemplos de expresiones o condiciones:


5>2
3+6
$a > 3

Podemos ver un ejemplo del uso de este estatuo en un archivo que denominaremos signo.sh el scual
contiene lo siguiente

#!/bin/bash
#
# Script que dado un numero como argumento

# nos dice si el numero es positivo o negativo


#
if [ $# -eq 0 ]
then
echo "Uso: commando argumento"
exit 1
fi
if [ $1 -lt 0 ]
then
echo "$1 es negativo"
else
echo "$1 es positivo"
fi

Habra notado que utilizamos -lt en vez de > y esto se debe a que el primero es un comparador
artimetico y el segundo lxico. Como quiera la siguiente tabla da un indicador de los tipos de condiciones
que podemos usar:
Comparaciones ( $VAR1 OP $VAR2 ) :
-eq equal to
-ne not equal to
-lt less than
-le less than or equal to
-gt greater than
-ge greater than or equal to

Operaciones de archivos ( OP $FILE ):


-s file exists and is not empty
-f file exists and is not a directory
-d directory exists
-x file is executable
-w file is writable
-r file is readable

Puede consultar otras condiciones en la siguiente liga: http://tldp.org/LDP/Bash-Beginners-


Guide/html/sect_07_01.html

La sintaxis de comando if multinivel:


if condition; then
comando1_then
...
elif condition2; then
comando1_elif
...
elif condition3; then
comando1_elif_2
...
else
comando1_else
...
fi
Comando de Repeticin
La sintaxis del for que en cada iteracin le asigna la la variable var el siguiente elemento de la lista:

for { var } in { list }


do
comando1
...
done

y la sintaxis del for que repite los commandos hasta que la expr2 es verdadera:

for (( expr1; expr2; expr3 ))


do
comando1
...
done

Ejemplos: Suponiendo que un archivo doble1.sh almacena los siguientes comandos:


#!/bin/bash
#
#Script que imprime el doble de los valores de la lista.
#
for i in 1 2 3 4 5
do
echo "v=`expr $((2 * $i))`"
done

otra forma de realizar el programa es como sigue en el script doble2.sh:

#!/bin/bash
#
#Script que imprime el doble de los valores de la lista.
#
for (( i = 0 ; i <= 5; i++ ))
do
echo "Welcome $((2 * $i)) times"
done

La sintaxis del commando while es como sigue

while [ condicion ]
do
commando
....
done
Ejemplo (test_while.sh):
#!/bin/sh
#
#Script to test while statement
#
#
n=$1
i=1
while [ $i -le 10 ]
do
echo "v= `expr $((2 * $i))`"
i=`expr $i + 1`
done

Se pueden obtener ms ejemplos a de esta fuente: http://tldp.org/LDP/abs/html/arrays.html

ltimas observaciones
Es importante dejar algo claro, shell scripting no es un lenguaje de programacin convencional
como Javascript, C/C++, JAVA, C#, Phyton entre otros pero no se compila ni puede desplegar
grficos. Shell scripting corresponde mas al termino Lenguaje de dominio-especifico y tiene el
poder de ejecutar no solo los comandos del S.O. sino tambien las aplicaciones de cualquier otro
lenguaje de programacin.
Tomemos por ejemplo un caso de resultados de control de clima, tomamos la automatizacin de
alimentar los datos del clima a un programa de Matlab, este arrojara pronsticos y estos los podemos
introducir a un programa en Java que despliega estos formatos en servidores Web (mediante Servlets)
todo utilizando un simple shell scripting automatizado para ejecutarse cada cierto tiempo, e incluso
si se presenta un problema el script podra tener lneas preparadas para enviar un correo (mediante los
comandos propios del S.O. o desde cualquier programa hecho con cualquier lenguaje de programacin
que lo permita).

Laboratorio:
El laboratorio se realizara en la siguiente liga: Enlace al laboratorio. Para su correcta realizacin
utilizara la informacin de esta prctica as como los elementos que vienen a continuacin.

Investigacin

Investigar para qu sirven los siguientes comandos ya que sern utilizados para elaboracin de la
prctica. No olvide revisar los argumentos que pueden manejar ya que algunos comandos con ciertos
argumentos pueden realizar las funciones bases de otros.
1. join
2. paste
3. cut
4. tr
5. sed
6. uniq
7. sort

TIP: Se espera que utilice los man(uales) de cada uno de ellos.


No olvide que tambin utilizaremos el comando GREP

Texto
Primer ejercicio de texto
Archivo1.txt
El miedo es
el lado
oscuro
a la ira,
al odio, el
sufrimiento.
Percibo
mucho

Archivo2.txt
el
camin
o
hacia.
El
miedo
lleva
la ira
lleva
odio
lleva al
miedo
en ti.

Lo siguiente es el texto que se utilizarn en los3 ltimos ejercicios de la parte de texto.


Recuerde qeu IoN debe qeudar en ION y no cualquier otra letra o en otras palabras.
DIME VENCEDOR RAPAZ
ESTE AMOROSO TORMENTO VERDE EMBELESO
COGIOME SIN PREVENCION

DETENTE SOMBRA

Detente, sombra de mi bien esquivo,


imagen del hechizo que ms quiero,
bella ilusin por quien alegre muero,
dulce ficcin por quien penosa vivo.

Si al imn de tus gracias, atractivo,


sirve mi pecho de obediente acero,
para qu me enamoras lisonjero
si has de burlarme luego fugitivo?

Mas blasonar no puedes, satisfecho,


de que triunfa de m tu tirana:
que aunque dejas burlado el lazo estrecho

que tu forma fantstica cea,


poco importa burlar brazos y pecho
si te labra prisin mi fantasa.

IoN

REDONDILLAS

Hombres necios que acusis


a la mujer, sin razn,
sin ver que sois la ocasin
de lo mismo que culpis;

si con ansia sin igual


solicitis su desdn,
por qu queris que obren bien
si las incitis al mal?

Combats su resistencia
y luego, con gravedad,
decs que fue liviandad
lo que hizo la diligencia.

Parecer quiere el denuedo


de vuestro parecer loco,
al nio que pone el coco
y luego le tiene miedo.
Queris, con presuncin necia,
hallar a la que buscis
para prentendida, Thais,
y en la posesin, Lucrecia.

Qu humor puede ser ms raro


que el que, falto de consejo,
l mismo empaa el espejo
y siente que no est claro?

Con el favor y el desdn


tenis condicin igual,
quejndoos, si os tratan mal,
burlndoos, si os quieren bien.

Opinin, ninguna gana,


pues la que ms se recata,
si no os admite, es ingrata,
y si os admite, es liviana.

Siempre tan necios andis


que, con desigual nivel,
a una culpis por cruel
y a otra por fcil culpis.

Pues como ha de estar templada


la que vuestro amor pretende?,
si la que es ingrata ofende,
y la que es fcil enfada?

Mas, entre el enfado y la pena


que vuestro gusto refiere,
bien haya la que no os quiere
y quejaos en hora buena.

Dan vuestras amantes penas


a sus libertades alas,
y despus de hacerlas malas
las queris hallar muy buenas.

Cul mayor culpa ha tenido


en una pasin errada:
la que cae de rogada,
o el que ruega de cado?

O cul es de ms culpar,
aunque cualquiera mal haga;
la que peca por la paga
o el que paga por pecar?

Pues, para qu os espantis


de la culpa que tenis?
Queredlas cual las hacis
o hacedlas cual las buscis.

Dejad de solicitar,
y despus, con ms razn,
acusaris la aficin
de la que os fuere a rogar.

Bien con muchas armas fundo


que lidia vuestra arrogancia,
pues en promesa e instancia
juntis diablo, carne y mundo.

IoN

FINJAMOS QUE SOY FELIZ

Finjamos que soy feliz,


triste pensamiento, un rato;
quiz prodris persuadirme,
aunque yo s lo contrario,
que pues slo en la aprehensin
dicen que estriban los daos,
si os imaginis dichoso
no seris tan desdichado.

Srvame el entendimiento
alguna vez de descanso,
y no siempre est el ingenio
con el provecho encontrado.
Todo el mundo es opiniones
de pareceres tan varios,
que lo que el uno que es negro
el otro prueba que es blanco.

A unos sirve de atractivo


lo que otro concibe enfado;
y lo que ste por alivio,
aqul tiene por trabajo.

El que est triste, censura


al alegre de liviano;
y el que esta alegre se burla
de ver al triste penando.

Los dos filsofos griegos


bien esta verdad probaron:
pues lo que en el uno risa,
causaba en el otro llanto.

Clebre su oposicin
ha sido por siglos tantos,
sin que cul acert, est
hasta agora averiguado.

Antes, en sus dos banderas


el mundo todo alistado,
conforme el humor le dicta,
sigue cada cual el bando.

Uno dice que de risa


slo es digno el mundo vario;
y otro, que sus infortunios
son slo para llorados.

Para todo se halla prueba


y razn en qu fundarlo;
y no hay razn para nada,
de haber razn para tanto.

Todos son iguales jueces;


y siendo iguales y varios,
no hay quien pueda decidir
cul es lo ms acertado.

Pues, si no hay quien lo sentencie,


por qu pensis, vos, errado,
que os cometi Dios a vos
la decisin de los casos?

O por qu, contra vos mismo,


severamente inhumano,
entre lo amargo y lo dulce,
queris elegir lo amargo?

Si es mo mi entendimiento,
por qu siempre he de encontrarlo
tan torpe para el alivio,
tan agudo para el dao?

El discurso es un acero
que sirve para ambos cabos:
de dar muerte, por la punta,
por el pomo, de resguardo.

Si vos, sabiendo el peligro


queris por la punta usarlo,
qu culpa tiene el acero
del mal uso de la mano?

No es saber, saber hacer


discursos sutiles, vanos;
que el saber consiste slo
en elegir lo ms sano.

Especular las desdichas


y examinar los presagios,
slo sirve de que el mal
crezca con anticiparlo.

En los trabajos futuros,


la atencin, sutilizando,
ms formidable que el riesgo
suele fingir el amago.

Qu feliz es la ignorancia
del que, indoctamente sabio,
halla de lo que padece,
en lo que ignora, sagrado!

No siempre suben seguros


vuelos del ingenio osados,
que buscan trono en el fuego
y hallan sepulcro en el llanto.

Tambin es vicio el saber,


que si no se va atajando,
cuando menos se conoce
es ms nocivo el estrago;
y si el vuelo no le abaten,
en sutilezas cebado,
por cuidar de lo curioso
olvida lo necesario.

Si culta mano no impide


crecer al rbol copado,
quita la sustancia al fruto
la locura de los ramos.
Si andar a nave ligera
no estorba lastre pesado,
sirve el vuelo de que sea
el precipicio ms alto.

En amenidad intil,
qu importa al florido campo,
si no halla fruto el otoo,
que ostente flores el mayo?

De qu sirve al ingenio
el producir muchos partos,
si a la multitud se sigue
el malogro de abortarlos?

Y a esta desdicha por fuerza


ha de seguirse el fracaso
de quedar el que produce,
si no muerto, lastimado.

El ingenio es como el fuego,


que, con la materia ingrato,
tanto la consume ms
cuando l se ostenta ms claro.

Es de su propio Seor
tan rebelado vasallo,
que convierte en sus ofensas
las armas de su resguardo.

Este psimo ejercicio,


este duro afn pesado,
a los ojos de los hombres
dio Dios para ejercitarlos.

Qu loca ambicin nos lleva


de nosotros olvidados?
Si es para vivir tan poco,
de qu sirve saber tanto?
Oh, si como hay de saber,
hubiera algn seminario
o escuela donde a ignorar
se ensearan los trabajos!

Qu felizmente viviera
el que, flojamente cauto,
burlara las amenazas
del influjo de los astros!
Aprendamos a ignorar,
pensamiento, pues hallamos
que cuanto aado al discurso,
tanto le usurpo a los aos.

IoN

PUES ESTOY CONDENADA

Pues estoy condenada,


Fabio, a la muerte, por decreto tuyo,
y la sentencia airada
ni la apelo, resisto ni la huyo,
yeme, que no hay reo tan culpado
a quien el confesar le sea negado.

Porque te han informado,


dices, de que mi pecho te ha ofendido,
me has, fiero, condenado.
Y pueden, en tu pecho endurecido
ms la noticia incierta, que no es ciencia,
que de tantas verdades la experiencia?

Si a otros crdito has dado,


Fabio, por qu a tus ojos se lo niegas,
y el sentido trocado
de la ley, al cordel mi cuello entregas,
pues liberal me amplas los rigores
y avaro me restringes los favores?

Si a otros ojos he visto,


mtenme, Fabio, tus airados ojos;
si a otro cario asisto,
asstanme implacables tus enojos;
y si otro amor del tuyo me divierte,
t, que has sido mi vida, me des muerte.

Si a otro, alegre, he mirado,


nunca alegre me mires ni te vea;
si le habl con agrado,
eterno desagrado en ti posea;
y si otro amor inquieta mi sentido,
squeseme el alma t, que mi alma has sido.

Mas, supuesto que muero,


sin resistir a mi infeliz suerte,
que me des slo quiero
licencia de que escoja yo mi muerte;
deja la muerte a mi eleccin medida,
pues en la tuya pongo yo la vida.

IoN

ESTA TARDE MI BIEN

Esta tarde, mi bien, cuando te hablaba,


como en tu rostro y tus acciones va
que con palabras no te persuada,
que el corazn me vieses deseaba;

y Amor, que mis intentos ayudaba,


venci lo que imposible pareca:
pues entre el llanto, que el dolor verta,
el corazn deshecho destilaba.

Baste ya de rigores, mi bien, baste:


no te atormenten ms celos tiranos,
ni el vil recelo tu inquietud contraste

con sombras necias, con indicios vanos,


pues ya en lquido humor viste y tocaste
mi corazn deshecho entre tus manos.

IoN

ESTOS VERSOS LECTOR MIO

Estos versos, lector mo,


que a tu deleite consagro,
y slo tienen de buenos
conocer yo que son malos,
ni disputrtelos quiero,
ni quiero recomendarlos,
porque eso fuera querer
hacer de ellos mucho caso.

No agradecido te busco:
pues no debes, bien mirado,
estimar lo que yo nunca
juzgu que fuera a tus manos.
En tu libertad te pongo,
si quisieres censurarlos;
pues de que, al cabo, te ests
en ella, estoy muy al cabo.
No hay cosa ms libre que
el entendimiento humano;
pues lo que Dios no violenta,
por qu yo he de violentarlo?

Di cuanto quisieres de ellos,


que, cuanto ms inhumano
me los mordieres, entonces
me quedas ms obligado,
pues le debes a mi musa
el ms sazonado plato
(que es el murmurar), segn
un adagio cortesano.
Y siempre te sirvo, pues,
o te agrado, o no te agrado:
si te agrado, te diviertes;
murmuras, si no te cuadro.

Bien pudiera yo decirte


por disculpa, que no ha dado
lugar para corregirlos
la priesa de los traslados;
que van de diversas letras,
y que algunos, de muchachos,
matan de suerte el sentido
que es cadver el vocablo;
y que, cuando los he hecho,
ha sido en el corto espacio
que ferian al ocio las
precisiones de mi estado;
que tengo poca salud
y continuos embarazos,
tales, que aun diciendo esto,
llevo la pluma trotando.

Pero todo eso no sirve,


pues pensars que me jacto
de que quiz fueran buenos
a haberlos hecho despacio;
y no quiero que tal creas,
sino slo que es el darlos
a la luz, tan slo por
obedecer un mandato.

Esto es, si gustas creerlo,


que sobre eso no me mato,
pues al cabo hars lo que
se te pusiere en los cascos.
Y adis, que esto no es ms de
darte la muestra del pao:
si no te agrada la pieza,
no desenvuelvas el fardo.

IoN

YA QUE PARA DESPEDIRME

Ya que para despedirme,


dulce idolatrado dueo,
ni me da licencia el llanto
ni me da lugar el tiempo,

hblente los tristes rasgos,


entre lastimosos ecos,
de mi triste pluma, nunca
con ms justa causa negros.

Y aun sta te hablar torpe


con las lgrimas que vierto,
porque va borrando el agua
lo que va dictando el fuego.

Hablar me impiden mis ojos;


y es que se anticipan ellos,
viendo lo que he de decirte,
a decrtelo primero.

Oye la elocuencia muda


que hay en mi dolor, sirviendo
los suspiros, de palabras,
las lgrimas, de conceptos.

Mira la fiera borrasca


que pasa en el mar del pecho,
donde zozobran, turbados,
mis confusos pensamientos.

Mira cmo ya el vivir


me sirve de afn grosero;
que se avergenza la vida
de durarme tanto tiempo.

Mira la muerte, que esquiva


huye porque la deseo;
que aun la muerte, si es buscada,
se quiere subir de precio.
Mira cmo el cuerpo amante,
rendido a tanto tormento,
siendo en lo dems cadver,
slo en el sentir es cuerpo.

Mira cmo el alma misma


aun teme, en su ser exento,
que quiera el dolor violar
la inmunidad de lo eterno.

En lgrimas y suspiros
alma y corazn a un tiempo,
aqul se convierte en agua,
y sta se resuelve en viento.

Ya no me sirve de vida
esta vida que poseo,
sino de condicin sola
necesaria al sentimiento.

Mas, por qu gasto razones


en contar mi pena y dejo
de decir lo que es preciso,
por decir lo que ests viendo?

En fin, te vas, ay de mi!


Dudosamente lo pienso:
pues si es verdad, no estoy viva,
y si viva, no lo creo.

Posible es que ha de haber da


tan infausto, funesto,
en que sin ver yo las tuyas
esparza sus luces Febo?

Posible es que ha de llegar


el rigor a tan severo,
que no ha de darle tu vista
a mis pesares aliento?

Ay, mi bien, ay prenda ma,


dulce fin de mis deseos!
Por qu me llevas el alma,
dejndome el sentimiento?

Mira que es contradiccin


que no cabe en un sujeto,
tanta muerte en una vida,
tanto dolor en un muerto.

Mas ya que es preciso, ay triste!,


en mi infeliz suceso,
ni vivir con la esperanza,
ni morir con el tormento,

dame algn consuelo t


en el dolor que padezco;
y quien en el suyo muere,
viva siquiera en tu pecho.

No te olvides que te adoro,


y srvante de recuerdo
las finezas que me debes,
si no las prendas que tengo.

Acurdate que mi amor,


haciendo gala de riesgo,
slo por atropellarlo
se alegraba de tenerlo.

Y si mi amor no es bastante,
el tuyo mismo te acuerdo,
que no es poco empeo haber
empezado ya en empeo.

Acurdate, seor mo,


de tus nobles juramentos;
y lo que jur la boca
no lo desmientan tus hechos.

Y perdona si en temer
mi agravio, mi bien, te ofendo,
que no es dolor, el dolor
que se contiene atento.

Y adis; que con el ahogo


que me embarga los alientos,
ni s ya lo que te digo
ni lo que te escribo leo.

IoN

DIME VENCEDOR RAPAZ


Dime vencedor Rapaz,
vencido de mi constancia,
Qu ha sacado tu arrogancia
de alterar mi firme paz?
Que aunque de vencer capaz
es la punta de tu arpn,
qu importa el tiro violento,
si a pesar del vencimiento
queda viva la razn?

Tienes grande seoro;


pero tu jurisdiccin
domina la inclinacin,
mas no pasa el albedro.
Y as librarme confo
de tu loco atrevimiento,
pues aunque rendida siento
y presa la libertad,
se rinde la voluntad
pero no el consentimiento.

En dos partes dividida


tengo el alma en confusin:
una, esclava a la pasin,
y otra, a la razn medida.
Guerra civil, encendida,
aflige el pecho importuna:
quiere vencer cada una,
y entre fortunas tan varias,
morirn ambas contrarias
pero vencer ninguna.

Cuando fuera, Amor, te va,


no merec de ti palma;
y hoy, que ests dentro del alma,
es resistir valenta.
Crrase, pues, tu porfa,
de los triunfos que te gano:
pues cuando ocupas, tirano,
el alma, sin resistillo,
tienes vencido el Castillo
e invencible el Castellano.

Invicta razn alienta


armas contra tu vil saa,
y el pecho es corta campaa
a batalla tan sangrienta.
Y as, Amor, en vano intenta
tu esfuerzo loco ofenderme:
pues podr decir, al verme
expirar sin entregarme,
que conseguiste matarme
mas no pudiste vencerme.

IoN

COGIOME SIN PREVENCION

Cogime sin prevencin


Amor, astuto y tirano:
con capa de cortesano
se me entr en el corazn.
Descuidada la razn
y sin armas los sentidos,
dieron puerta inadvertidos;
y l, por lograr sus enojos,
mientras suspendi los ojos
me salte los odos.

Disfrazado entr y maoso;


mas ya que dentro se vio
del Paladin, sali
de aquel disfraz engaoso;
y, con nimo furioso,
tomando las armas luego,
se descubri astuto Griego
que, iras brotando y furores,
matando los defensores,
puso a toda el Alma fuego.

Y buscando sus violencias


en ella al pramo fuerte,
dio al Entendimiento muerte,
que era Rey de las potencias;
y sin hacer diferencias
de real o plebeya grey,
haciendo general ley
murieron a sus puales
los discursos racionales
porque eran hijos del Rey.

A Casandra su fiereza
busc, y con modos tiranos,
at a la Razn las manos,
que era del Alma princesa.
En prisiones su belleza
de soldados atrevidos,
lamenta los no credos
desastres que adivin,
pues por ms voces que dio
no la oyeron los sentidos.

Todo el palacio abrasado


se ve, todo destruido;
Deifobo all mal herido,
aqu Paris maltratado.
Prende tambin su cuidado
la modestia en Polixena;
y en medio de tanta pena,
tanta muerte y confusin,
a la ilcita aficin
slo reserva en Elena.

Ya la Ciudad, que vecina


fue al Cielo, con tanto arder,
slo guarda de su ser
vestigios, en su ruina.
Todo el amor lo extermina;
y con ardiente furor,
slo se oye, entre el rumor
con que su crueldad apoya:
"Aqu yace un Alma Troya
Victoria por el Amor!"

IoN

ESTE AMOROSO TORMENTO

Este amoroso tormento


que en mi corazn se ve,
se que lo siento y no se
la causa porque lo siento

Siento una grave agona


por lograr un devaneo,
que empieza como deseo
y para en melancola.

y cuando con mas terneza


mi infeliz estado lloro
se que estoy triste e ignoro
la causa de mi tristeza. "

Siento un anhelo tirano


por la ocasin a que aspiro,
y cuando cerca la miro
yo misma aparto la mano.
Porque si acaso se ofrece,
despus de tanto desvelo
la desazona el recelo
o el susto la desvanece.

Y si alguna vez sin susto


consigo tal posesin
(cualquiera) leve ocasin
me malogra todo el gusto.

Siento mal del mismo bien


con receloso temor
y me obliga el mismo amor
tal vez a mostrar desdn.

IoN

VERDE EMBELESO

Verde embeleso de la vida humana,


loca esperanza, frenes dorado,
sueo de los despiertos intrincado,
como de sueos, de tesoros vana;

alma del mundo, senectud lozana,


decrpito verdor imaginado;
el hoy de los dichosos esperado,
y de los desdichados el maana:

sigan tu sombra en busca de tu da


los que, con verdes vidrios por anteojos,
todo lo ven pintado a su deseo;

que yo, ms cuerda en la fortuna ma,


tengo en entrambas manos ambos ojos
y solamente lo que toco veo.
Cdigos ejemplo

Despliegue de correos oficiales a partir de matrculas


#!/bin/bash
#Version: 1.0.1 ( 28/01/11 )
#Objetivo: Ensear la forma de leer ORIGENs y manejo de strings
# Elementos clave: "Un shell debe ser flexible en los parametros de entrada pero estricto en los de salida
# Entrada: Una lista de matriculas (alfa numerico), salida: A0#######@itesm.mx
# LA parte dinamica es de 9 caracteres, la parte estatica es de 9
# en total cada linea del ORIGEN resultante debera tener 18 caracteres
ARGS=1 #Max de argumentos que puede recibir
ORIGEN="entrada.txt" ; DESTINO="matriculas.txt" #Entrada y Salida no estandar del bash
Match="" #Variable usada para hacer busqeudas con grep
Line=$@
EXPREG1="^A0[0-9]*" #ER utilizadas para buscar los posibles formatos
EXPREG2="^[0-9]*" # de las matriculas escritas por los alumnos.
EXPREG3="^A[0-9]?@itesm.mx"

LeerORIGEN(){
#echo "" > "$DESTINO" #Un archivo temporal es creado para ir guardando lo exitoso
#El for avanzara en cada Palabra hallada en lo que regrese cat $ORIGEN
for WORD in `cat $ORIGEN`
do
#Aqui es donde buscaremos WORD, en teoria puede ser Alfa numerico o solo numerico
#Iremos descartando, primero A0#######
Match=`echo "$WORD" | grep -xwi "$EXPREG1"`
if [ "$Match" = "" ]
then
#echo "No es el primer formato "
#Puede estar ya bien en el formato definitivo
Match=`echo "$WORD" | grep -xwi "$EXPREG3"`
if [ "$Match" != "" ]
then
#La longitud es necesaria de checar
if [ "${#Match}" -eq 18 ]
then
#Un correo en el formato y longitud debido
#echo "Un correo hallado" "$EXPREG3" ": " $Match
echo "$Match" #>> "$DESTINO"
fi
else #Puede ser meramente numero (Sin A0)
Match=`echo "$WORD" | grep -xwi "$EXPREG2"`
if [ "$Match" != "" ]
then
#LA longitud es un problema... A-00787620, A0-1787620 y A00-787620 son
# validas, por lo tanto ifelse
if [ "${#Match}" -eq 8 ]
then
#echo "Una matricula escrita informalmente""$EXPREG2" ": " $Match
echo "A""$Match""@itesm.mx" #>> "$DESTINO"
elif [ "${#Match}" -eq 7 ]
then
#echo "Una matricula escrita informalmente""$EXPREG2" ": " $Match
echo "A0""$Match""@itesm.mx" #>> "$DESTINO"
elif [ "${#Match}" -eq 6 ]
then
#echo "Una matricula escrita informalmente" "$EXPREG2" ": " $Match
echo "A00""$Match""@itesm.mx" #>> "$DESTINO"
fi
fi
fi

else
#OJO: Espacios en blanco todavia pasan y longigutdes largas tambien
# Debemos garantizar que solo se registren longitud de 9 caracteres
# ${#Match} es uno de las tantas opciones para obtener longitud de strings
if [ "${#Match}" -eq 9 ]
then
#echo "Una matricula hallada" "$EXPREG1" ": " $Match
echo "$Match""@itesm.mx" #>> "$DESTINO"
fi
fi
done
}

###########################################################
####### Equivalente a un MAIN ######################
###########################################################
#echo $#
#echo $@
#echo $1
#echo "BASH para convertir matriculas a cuentas de @itesm.mx"

#Validamos argumentos de entradas


#Para 1.0 se ocupa un argumento a fuerzas
if [ $# -eq "$ARGS" ]
then
ORIGEN=$1
#echo "Archivo de origen: " "$ORIGEN"
else
echo "$0" " Error : Falta el archivo de entrada "
exit 1
fi

# Checamos meramente si existe el ORIGEN con el que se desea trabajar s


if !( test -e $ORIGEN )
then
echo "$0" " Error : No hay ORIGEN de entrada disponible"
exit 1
else
#echo "Leyendo el ORIGEN " $ORIGEN
LeerORIGEN $# $1
fi

exit 0
Dr. Juan A. Nolazco Flores, Sistemas Operativos, Ene-May 2009

S-ar putea să vă placă și