Anda di halaman 1dari 37

Facultad de Ingenier a Universidad de Buenos Aires

75.08Sistemas Operativos

UNIX

so7508@hotmail.com http://fiuba-7508.50megs.com

Apunte por: Ignacio Errico perrico@fi.uba.ar

Version Preliminar Marzo de 2003

Indice
1 Introducci on. 1.1 Qu e es UNIX? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1 1.2 Qu e es UNIX entonces? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 4 5 5 5 6 6 6 7 7 7 8 9 11 13 13 14 15 15 15 16 17

Tareas b asicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 Iniciando el sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Iniciar una sesi on. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Terminar una sesi on. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cuentas de usuario y claves de usuario. . . . . . . . . . . . . . . . . . . . Terminales virtuales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . El comando su. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Apagando el sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.3

Conceptos b asicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1 1.3.2 1.3.3 Caracteres de control en la l nea de comandos. . . . . . . . . . . . . . . . Directorios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Permisos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 El Shell. 2.1 Uso de abreviaturas: Metacaracteres. . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 2.2 Nombres de archivos con metacaracteres. . . . . . . . . . . . . . . . . . .

Variables de Ambiente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Obteniendo el valor de variables. . . . . . . . . . . . . . . . . . . . . . . .

2.3

Variable de usuario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.1 Sustituci on. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.4

Entrecomillado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

3 2.4.1 2.5 Tipos de entrecomillado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 18 18 19 21 21 21 22 23 23 23 23 24 24 24 25 25 25 28 30 30 30 31 32 32 33 34 35 35 36 36

Redireccionamiento de la Entrada y Salida. . . . . . . . . . . . . . . . . . . . . . 2.5.1 Ejemplos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.6

Interconexi on. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 Programaci on con el Shell: Shell-Scripting. 3.1 3.2 Comentarios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Argumentos y Par ametros. El comando shift. . . . . . . . . . . . . . . . . . . . 3.2.1 3.2.2 3.3 Par ametros especiales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Estado de salida. El comando exit. . . . . . . . . . . . . . . . . . . . . .

Pruebas. El comando test. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1 3.3.2 3.3.3 3.3.4 Operadores del comando test. . . . . . . . . . . . . . . . . . . . . . . . . Pruebas sobre archivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . Prueba de valores para operaciones algebraicas. . . . . . . . . . . . . . . . Prueba de valores para cadena de caracteres. . . . . . . . . . . . . . . . .

3.4

Aritm etica entera. El comando expr. . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.1 Operador de longitud. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.5

Comandos de control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.1 3.5.2 Sentencias de Decisi on. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Sentencias de Iteraci on. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4 Comandos de Entrada y Salida. 4.1 Traducci on de caracteres: el comando tr. . . . . . . . . . . . . . . . . . . . . . . 4.1.1 4.2 Ejemplos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

El comando cut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 Ejemplos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.3

El comando paste. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1 Ejemplos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5 Expresiones Regulares. 5.1 Expresiones regulares simples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1 5.2 Algunos ejemplos de expresiones regulares simples. . . . . . . . . . . . . .

Expresiones regulares extendidas. . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.1 Ejemplos de REs Extendidas. . . . . . . . . . . . . . . . . . . . . . . . . .

Cap tulo 1

Introducci on.
1.1 Qu e es UNIX?

El sistema operativo UNIX naci o como un sistema de tiempo compartido, orientado a usos generales. En 1973, Ritchie y Thompson reescribieron el n ucleo del sistema (el kernel ) en C, rompiendo de esta manera la tradici on de software de base escrito en assembler. En 1974 se introduce en las universidades con nes educacionales y poco tiempo despu es estuvo disponible con nes comerciales. UNIX no es en s un sistema operativo, sino un tipo de sistema operativo. Los sistemas operativos tipo UNIX m as conocidos son AIX, SCO, SVR4, SOLARIS. El exito de UNIX se debe principalmente a tres causas: 1. Ventaja comercial. Por estar escrito en C es portable, y se puede ejecutar en una gran variedad de m aquinas. 2. Abierto. El c odigo fuente est a disponible y escrito en un lenguaje de alto nivel. Esto lo hace f acil de adaptar a exigencias particulares. 3. De utilidad particular para programadores. Es un sistema operativo rico y productivo para programadores. Su ecacia se debe al enfoque de la programaci on, y no a la programaci on misma: la combinaci on de distintos comandos simples permiten lograr grandes tareas generales. De esta manera, monta su potencia en la relaci on entre los programas, m as que en la potencia de los programas propiamente dichos.

1.1.1

Qu e es UNIX entonces?

En sentido estricto. Es el n ucleo de un sistema operativo de tiempo compartido. Un programa que controla los recursos de una computadora y los asigna entre los usuarios. Permite a los 4

Secci on 1.2. Tareas b asicas.

usuarios ejecutar sus programas, controla los dispositivos perif ericos conectados, y proporciona un sistema de archivos que permite el almacenamiento a largo plazo de todo tipo de informaci on. En sentido m as amplio. Abarca, adem as del n ucleo, programas esenciales como compiladores, editores, lenguajes de comandos, programas para copiar e imprimir archivos, y muchas otras aplicaciones.

1.2
1.2.1

Tareas b asicas.
Iniciando el sistema.

Este proceso puede variar levemente respecto de lo que uno est a acostumbrado con otros sistemas operativos. En el caso de no haber instalado otro sistema operativo, el proceso es simplemente encender la computadora y esperar. Por otro lado, si se est a compartiendo el sistema con otro sistema operativo, es probable que uno tenga que realizar alguna de las siguientes opraciones: Seleccionar Linux en el prompt de LILO. Si al instalar el sistema se decidi o instalar LILO (LInux LOader ) la computadora est a preparada para iniciar el sistema operativo que se le especique ingresando la etiqueta para la partici on denida en la instalaci on. Presionando la tecla <TAB>, se muestran las etiquetas posibles. Simplemente ingrese la correspondiente a Linux, o presione <ENTER> si es la partici on que LILO debe iniciar por defecto. Iniciar desde un diskette. Si se cre o un diskette de booteo al instalar Linux, tambi en se lo puede usar para iniciar el sistema.

1.2.2

Iniciar una sesi on.

Al iniciar el sistema, o al conectarse a una terminal, se visiualiza el siguiente mensaje: Login: La primera vez que uno entra al sistema, se debe ingresar el usuario root. Este es el nombre del usuario que tiene permiso para todo en el sistema. Por lo general se usa para realizar tareas de administraci on, como por ejemplo, para crear nuevos usuarios, apagar el sistema, etc. Dado que este usuario tiene permiso para hacer cualquier cosa, hay que saber que comandos se ejecutan al entrar como root. M as adelante hablaremos acerca de permisos. Para ingresar, se debe tipear root y presionar la tecla <ENTER>, y a continuaci on aparecer a: Password: donde se debe tipear la clave del usuario. Tener presente, que si bien no se visualizan los caracteres cuando uno tipea la clave, se puede corregir con la tecla <BACKSPACE>.

Secci on 1.2. Tareas b asicas.

Recuerde que UNIX es un sistema operativo que distingue may usculas de min usculas es case sensitive . Si la clave ingresada es correcta, el sistema mostrar a un prompt o s mbolo de espera, que a lo largo de este apunte se representar a con el s mbolo # (para el caso del root), que es normalmente el caracter generado por un programa shell o int erprete de comandos, que es la interfaz entre el sistema operativo y el usuario.

1.2.3

Terminar una sesi on.

Si bien existen los comandos logout y exit, es com un usar CTRL-D. Esto lleva a la pantalla de Login: que se describi o antes.

1.2.4

Cuentas de usuario y claves de usuario.

Como sugerimos antes, no es una buena idea usar la cuenta de root todo el tiempo. Tarde o temprano uno comete un error, y con este usuario no hay restricciones que salven. Vamos a describir la forma m as b asica de crear un usuario. En el prompt tipeamos: # useradd igna # passwd igna New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully

El comando passwd en general se puede usar para: Denir claves para nuevos usuarios. Cambiar claves de usuarios existentes. Cambiar la clave del usuario loggeado. El comando requiere que la clave se ingrese dos veces para vericar que no hubieron errores de tipeo.

1.2.5

Terminales virtuales.

Una herramienta muy u til son las terminales virtuales: se pueden iniciar distintas sesiones simult aneamente, presionando ALT-Fn. Habiendo creado el nuevo usuario igna, uno puede presionar ALT-F2 y loggearse con este nuevo usuario. Para volver a la terminal del root, se presiona ALT-F1.

Secci on 1.3. Conceptos b asicos.

1.2.6

El comando su.

Hay ocasiones en las cuales uno quiere ejecutar algunos comandos como un usuario distinto del que uno est loggeado. Esto es muy u til particularmente para administradores del sistema, que usan sus cuentas sin privilegios por lo general. Para evitar todo el proceso de loggeo se usa el comando su, que hace que la sesi on de un usuario ordinario se transforme en una sesi on de root. Al ejecutar el comando, pide que se ingrese la clave del root. Este comando resulta muy u til particularmente si uno es su propio administrador de sistema, como sucede con muchos usuarios Linux.

1.2.7

Apagando el sistema.

Apagar el sistema no se trata simplemente de apagar la computadora. Aunque uno no est e ejecutando ning un programa, esto no signica que no hay nada corriendo. Lo que hay que hacer es ejecutar el comando shutdown, el cual solo puede ser ejecutado por el root. Esta es una buena oportunidad para usar el comando su. El formato general de shutdown es: shutdown <opciones> <tiempo> El par ametro <opciones> puede ser: -h: detener el sistema cuando se termin o de cerrar. -r: reiniciar el sistema. El segundo par ametro, <tiempo>, normalmente es now, aunque tambi en puede ser el valor de minutos a esperar antes de que se inicie el proceso de cerrado del sistema. Ejemplos: shutdown -r +15 Empezar a apagar el sistema dentro de 15 minutos y una vez terminado, reiniciar. shutdown -h now Apagar el sistema inmediatamente, y detenerse cuando se termine el proceso.

1.3

Conceptos b asicos.

En primer lugar, y como mencionamos antes, UNIX es case sensitive : se distinguen may usculas de min usculas. Por otro lado, UNIX es full duplex : los caracteres que se tipean, se env an al sistema, el cual los pasa a la terminal. Este proceso, conocido como eco, los copia directamente a la pantalla, aunque en ciertas ocasiones se desactiva (por ejemplo, para tipeo de claves). Los caracteres pueden clasicarse en dos grupos:

Secci on 1.3. Conceptos b asicos. Caracteres comunes. Caracteres de control.

Los caracteres tipeados son examinados e interpretados antes de llegar a su destino. Todos los caracteres se transmiten a la terminal, excepto que el echo est e apagado. Los caracteres se almacenan en el n ucleo hasta que se presiona <ENTER>. Cuando un caracter es precedido por el caracter \ (barra invertida ), descarta este caracter y almacena el siguiente caracter como uno com un sin otra interpretaci on. Al presionar <ENTER>, los datos almacenados se enviar an al programa que est e leyendo datos de la terminal. Los caracteres ser an le dos aunque el n ucleo est e ocupado con otras tareas. Para obtener ayuda acerca de alg un comando, usar el comando: man <nombre-del-comando> que despliega la manual page para ese comando. Lo primero que se recomienda hacer es ejecutar man man es decir, ver la manual page del mismo man. Para volver al prompt mientras se visualiza una manual page presionar <q>. Finalmente, en la losof a UNIX, solo existen archivos (una secuencia de bytes ) y procesos (programas en ejecuci on). Ambos se organizan en estructuras jer arquicas. De esta manera, para el sistema, el teclado, la diskettera, etc. son archivos.

1.3.1

Caracteres de control en la l nea de comandos.

Vamos a comentar algunos caracteres de control u tiles al tipear en la l nea de comandos. Solo mencionamos los m as u tiles, aunque la lista completa se puede ver de [3]. <CTRL-A> Va al comienzo del texto. <CTRL-E> Va al nal del texto. <CTRL-B> Mueve el cursor un caracter a la izquierda. <CTRL-F> Mueve el cursor un caracter a la derecha. <ALTL-B> Va al comienzo de la palabra anterior. <ALTL-F> Va al comienzo de la palabra siguiente.

Secci on 1.3. Conceptos b asicos. <CTRL-L> Limpia la pantalla. <ALTL-U> Pone toda la palabra en may uscula. <ALTL-L> Pone toda la palabra en min uscula. <CTRL-K> Borra hasta el nal de la l nea.

<TAB> Completa la cadena incompleta. Es un caracter muy u til particularmente para trabajar r apidamente con nombres de archivos largos. Tambi en es u til el manejo de la salida por pantalla: <CTRL-C> Interrumpe la ejecuci on de un programa. <CTRL-S> Pausa una salida. <CTRL-Q> Continua mostrando una salida pausada.

1.3.2

Directorios.

Los directorios son un tipo de archivo que permiten agrupar jer arquicamente archivos. Permiten mantener unida informaci on relacionada. Cada usuario tendr a un home directory, o directorio de login, donde podr a mantener sus archivos. Al iniciar una sesi on se posiciona al usuario en este directorio. A diferencia del home directory, hablaremos del working directory para referirnos al directorio en el cual se est a posicionado. Mientras que el working directory cambia al cambiar de directorio, el home directory se mantiene invariable para un usuario del sistema. Los directorios privados de los usuarios del sistema suelen estar en /users o /home. Comandos para administrar directorios. Describiremos los comandos b asicos. cd <nombre-de-directorio> Hace que el working directory sea el directorio especicado.

Secci on 1.3. Conceptos b asicos. mkdir <nombre-de-directorio> Crea un directorio. rmdir <nombre-de-directorio> Elimina un directorio que no contiene archivos. pwd Print Working Directory. Imprime la ruta del directorio en el cual se est a posicionado.

10

echo $HOME Imprime en contenido de la variable de ambiente $HOME, que contiene la ruta del home directory. M as adelante hablaremos de variables de ambiente. Jerarqu a de directorios. El directorio de m aximo nivel es el / (llamado root nada que ver con el usuario root !). All se encuentran una serie de directorios, que describiremos a continuaci on: /bin Ac a se encuentran los programas b asicos. /dev Ac a se encuentran los dispositivos (terminales, impresoras, etc.). Hablaremos de dispositivos m as adelante. /etc Contiene archivos y programas de administraci on. Solo por mencionar algunos: passwd es un archivo que contiene datos de los usuarios, rc se ejecuta al iniciar el sistema. /lib Biblioteca. Contiene principalemente partes del compilador C, preprocesador de C y, por ejemplo, libc.a que es la biblioteca de subrutinas de C. /tmp Temporales. Contiene archivos de vida corta. Por ejemplo, cuando se edita un programa, se crea en este directorio un archivo de trabajo, que es una copia del original. Este directorio se depura peri odicamente. /usr Sistema de archivos de usuario. Contiene esencialmente los directorios descriptos hasta ahora, con los mismos signicados, pero con programas menos vitales para el funcionamiento del sistema. Por ejemplo, el compilador FORTRAN est a en /usr/lib. Vale la pena invertir un tiempo en recorrer estos directorios para estar m as familiarizado con el sistema.

Secci on 1.3. Conceptos b asicos.

11

1.3.3

Permisos.

Cada archivo tiene un conjunto de permisos asociados, que determinan que se puede hacer y quien puede hacerlo. Cuando un usuario ingresa al sistema, este lo reconoce por un n umero llamado user id (o identicador de usuario ). Diferentes nombres de usuario pueden tener el mismo user id aunque no es algo muy deseable, desde el punto de vista de la seguridad. Adem as de este valor, se le asigna al usuario un group id, que lo coloca dentro de una cierta clase de usuarios. El sistema usa estos dos valores para determinar los permisos para un usuario en relaci on con un archivo. Los permisos de un archivo pueden permitir: leer, escribir, y/o ejecutar el archivo. Estas acciones se representan por r, w, x, respectivamente (debido a read, write, execute ), y cada una se asigna a: el usuario mismo, el grupo al que pertenece el usuario, y al resto de los usarios. Esta clasicaci on se representa por u, g, o, respectivamente (debido a user, group, others ). Por ejemplo, supongamos que el archivo arch tiene los siguiente permisos: rwx rw- r--. Esto signica que el usuario puede leer, escribir (modicar) y ejecutar el archivo; que los usuarios del grupo al que pertenece pueden solo leerlo y modicarlo; y que el resto de los usuarios solo pueden leerlo. Para ver los permisos de un archivo, usar el comando: ls -l [<nombre-del-archivo>] Los corchetes indican que el par ametro no es necesario. Hablaremos m as acerca de este comando m as adelante. Cambiando los permisos de un archivo. El comando chmod (change mode ), permite cambiar permisos de archivos, con el siguiente formato:

Secci on 1.3. Conceptos b asicos. chmod <permisos> <archivos> Solo el due no de un archivo puede cambiar los permisos de un archivo. El par ametro <permisos> puede darse de varias maneras. Esencialmente hay dos:

12

Con s mbolos representativos. Usando las seis letras denidas antes, y usando + o para indicar si se d a el permiso, o si se quita, respectivamente. Por ejemplo: chmod u+x arch Le da permiso de ejecuci on del archivo arch al usuario. chmod ug+w-r arch Les da permiso de modicaci on al usuario y al grupo del archivo arch, pero les quita simult aneamente permiso de lectura. Con n umeros octales. Para cada clasicaci on se puede asignar una combinaci on de tres 3 permisos, resultando en 2 = 8 alternativas distintas, lo cual sugiere una representaci on en base octal para los permisos. El bit de lectura (r) se dene como el bit m as signicativo. As , los permisos rw- se representan por el n umero octal 4 + 2 + 0 = 6. Por ejemplo: chmod 640 arch Le asigna los permisos rw- r-- --- al archivo arch, es decir, lectura y modicaci on para el usuario, lectura para el grupo al que pertenece el usuario, y ning un permiso al resto de los usuarios. El par ametro archivos puede ser uno o varios archivos separados por espacio o con wildcards que explicaremos m as adelante. Tener presente que el usuario root tiene permiso para todo.

Cap tulo 2

El Shell.
Como ya se mencion o antes, cuando un usuario se conecta al sistema, este presenta un prompt donde se tipean los comandos que el sistema pasa a ejecutar. No es el kernel el que dirige al usuario, sino un int erprete de comandos o shell, que es un programa que realiza la interpretaci on de los caracteres ingresados. A continuaci on hablaremos de las ventajas que presta este int erprete entre el sistema operativo y el usuario.

2.1

Uso de abreviaturas: Metacaracteres.

Es posible referirse a una serie de archivos mediante el uso de metacaracteres, los cuales son interpretados por el shell antes de ser pasados al comando en cuesti on. Los siguientes son metacaracteres: ? Un caracter cualquiera. * Cualquier cadena de caracteres. [conjunto] Cualquier caracter del conjunto. [!conjunto] Cualquier caracter que no este en el conjunto. Ejemplos. Supongamos que creamos los directorios Mayo2001, Junio2001, . . . , Mayo2002. Si que quieren eliminar todos los directorios del a no 2001: 13

Secci on 2.1. Uso de abreviaturas: Metacaracteres.

14

rmdir *2001 En este caso, el shell sustituye el metacaracter * por Mayo, Junio, etc., y es esto lo que le pasa al comando rmdir. Es decir, desde el punto de vista del comando rmdir, es como que el usuario hubiese tipeado rmdir Mayo2001 Junio 2001 etc., con todos los direcctorios que correspondan. Si se quieren eliminar los meses Junio y Julio: rmdir Ju?io* El shell reemplaza el metacaracter ? por n y l respectivamente, y el * por 2001, que son las cadenas que corresponden a los archivos del directorio actual, y es esto lo que le pasa al comando. Nuevamente, desde el punto de vista del comando rmdir, es como si no se hubieran usado metacaracteres, porque el no los v e. Notar que el uso de metacaracteres simplica el dise no de los comandos. De no existir el shell, habr a que implementar para cada comando la interpretaci on de metacaracteres. Ahora, supongamos que tenemos los archivos arch1, arch2, . . . , arch9. rm arch[1-46-9] Elimina todos los archivos, salvo el archivo arch5. Como siempre, el comando no v e los metacaracteres, sino que v e los par ametros arch1, . . . , arch4, arch6, . . . , arch9. rm [a-z] El comando rm informar a que no encuentra ning un archivo para borrar, pues no hay archivos cuyos nombres sean exclusivamente caracteres de la a a la z. rm [a-z]8 Borra el archivo arch8. rm *[!8] Borra todos los archivos, salvo arch8.

2.1.1

Nombres de archivos con metacaracteres.

Inmediatamente surje la pregunta de si es posible tener archivos que tengan metacaracteres en sus nombres, por ejemplo, arch*. Esto es posible, y si uno no quiere que el shell interprete un metacaracter, debe anteponerle el metacaracter \ o escribir el metacaracter entre ap ostrofes. Nos referiremos (informalmente) a esta acci on como casteo de un caracter. Por ejemplo: rm arch Borra el archivo arch*, y no todos los archivos cuyo nombre comiencen con arch. rm arch* Tiene el mismo efecto que el anterior.

Secci on 2.2. Variables de Ambiente.

15

2.2

Variables de Ambiente.

Algunas propiedades del shell son controladas por una serie de variables de este, que llamaremos variables de ambiente. Algunas variables que t picamente usa el shell son: HOME contiene el home directory del usuario. PATH contiene la lista de directorios, separados por :, donde el shell busca los comandos a ejecutar. Colocar . o nada antes de los primeros o u ltimos : indica working directory, aunque suele no setearse por seguridad. SHELL contiene el shell que se est a ejecutando. PWD contiene el working directory. TERM contiene el tipo de terminal. Ciertos programas lo utilizan para manejar m as ecientemente la pantalla.

2.2.1

Obteniendo el valor de variables.

Obtener el valor de una variable es la acci on de indicarle al shell que interprete el contenido de la variable. Los valores de variables se abtienen anteponiendo el caracter $ al nombre de la variable. Por ejemplo, para ver el contenido de una variable, se puede hacer: $ echo $HOME El caracter $ en negrita antes del comando echo representa el prompt del shell, y no debe ser tipeado. De aqu en adelante seguiremos esta convenci on. Para agregar un directorio a la variable de ambiente PATH, se puede hacer: $ PATH=$PATH:/user/games

2.3

Variable de usuario.

Como convenci on, las variables de ambiente llevan nombres en may usculas. Uno puede denir variables propias, usando nombres en min usculas.

Secci on 2.3. Variable de usuario. Por ejemplo, si uno accede muchas veces a un determinado directorio, podr a hacer: $ midir=/nombre/de/directorio/terriblemente/largo y simplemente ejecutar: $ cd $midir Notar que el auto-completado con la tecla <TAB> tambi en funciona con variables.

16

2.3.1

Sustituci on.

Ya vimos que el shell reemplaza $var por el valor del string asignado a la variable. Tambi en, una variable est a congurada, si alguna vez le ha sido asignado un valor, siendo v alido el string nulo como valor para una variable. Nos centramos ahora en sustituir el valor de una variable, dependiendo de si esta ten a o no un valor asignado. Sustituci on incondicional. En este caso, si la variable ten a valor, se pierde. ${variable#patron} ${variable##patron} Si patron coincide con el comienzo del valor de variable , el valor de sustituci on es el valor de variable con la parte coincidente eliminada. En el primer caso se reemplaza la menor parte coincidente y en el segundo, la mayor parte coincidente. ${variable%patron} ${variable%%patron} Si patron coincide con el nal del valor de variable , el valor de sustituci on es el valor de variable con la parte coincidente eliminada. En el primer caso se reemplaza la menor parte coincidente y en el segundo, la mayor parte coincidente. Sustituci on condicional. ${variable:-cadena} Si variable est a asignada y no es nula el valor de sustituci on es el valor de variable , sino el valor de sustituci on es cadena .

Secci on 2.4. Entrecomillado. ${variable:=cadena} Si variable est a asignada y no es nula el valor de sustituci on es el valor de variable , sino el valor de sustituci on es cadena , y le asigna este valor a variable . ${variable:+cadena} Si variable est a asignada y no es nula el valor de sustituci on es el valor de cadena , sino el valor de sustituci on es nulo. ${variable:?cadena} Si variable est a asignada y no es nula el valor de sustituci on es el valor de variable , sino el valor de sustituci on es cadena , y sale al shell. Si cadena es omitido, se imprime el mensaje parameter null or not set. Si se lo utiliza en un .profile no sale del sistema. Sirve para vericar si las variables est an seteadas. Los : en la sustituci on de variable signica opcional.

17

2.4

Entrecomillado.

El entrecomillado se utiliza para indicarle al shell que un string, que de otra forma se interpretar a como partes separadas, debe ser interpretado como una unidad. Por ejemplo, un archivo puede llamarse archivo con nombre largo.txt. El contenido de un archivo puede mostrarse por la salida standard utilizando el comando cat. Si tipeamos: $ cat archivo con nombre largo.txt El shell le pasar a al comando cat los par ametros archivo, con, nombre y largo.txt por separado. Para que el shell le pase un u nico par ametro deber amos tiperar: $ cat archivo con nombre largo.txt1

2.4.1

Tipos de entrecomillado.

Distinguimos 3 tipos de entrecomillado: Comillas. El shell interpreta caracteres especiales.


1

Tambi en se podr an castear los espacios.

Secci on 2.5. Redireccionamiento de la Entrada y Salida. Ap ostrofe. El shell no interpreta caracteres especiales. Acento grave (como en ` a). El shell ejecuta el comando y pasa la salida. Por ejemplo: $ mivar=es una $ echo esto $mivar prueba esto $mivar prueba $ echo "esto $mivar prueba" esto es una prueba $ echo date Mar, 20 Ago 2002 01:26:43 GMT-03:00

18

2.5

Redireccionamiento de la Entrada y Salida.

La idea de redirecci on est a sustentada por el concepto que ya mencionamos, en el que todo en denitiva es un archivo. Muchos de los comandos que se describir an en cap tulos posteriores, toman su entrada de la entrada standard o producen su salida por la salida standard. Es com un que se desee, por ejemplo, la salida de un comando no salga por la salida standard sino que se almacene en un archivo de texto. Lo mismo ocurre para la entrada de datos a un comando: puede ser deseable que el comando no espere datos desde la entrada standard sino que los tome desde un archivo. Los caracteres > y < permiten la redirecci on de la salida y la entrada de comandos a o desde archivos, respectivamente.

2.5.1

Ejemplos.

$ cat arch1 arch2 arch3 Este comando concatena los tres archivos2 por la salida standard. $ cat arch1 arch2 arch3 > total Este comando concatena los tres archivos y esta salida se guarda en el archivo total. Nada se imprime en la salida standard. Si el archivo de redirecci on no existe, lo crea. Si existe, lo sobreescribe. Notar que es el shell el que se encarga de este redireccionamiento. Es decir, el comando cat simplemente hace su tarea de concatenci on, desentendi endose de cual ser a el destino.
2

Es decir, imprime consecutivamente el contenido de los tres archivos en el orden indicado.

Secci on 2.6. Interconexi on. $ cat arch1 arch2 arch3 >> total Esto tiene el mismo efecto que en el caso anterior, con la diferencia que si el archivo de redirecci on existe, no lo sobreescribe, sino que hace un append. $ cat arch $ cat < arch Si bien, ambos casos producen el mismo resultado, en el primer caso, el comando ve que tiene que trabajar con el archivo arch. En el segundo caso, en cambio, es el shell quien le pasa el contenido del archivo al comando, y por lo tanto el comando no se entera de que trabaja con el archivo, y a sus efectos, ve simplemente una entrada standard. Este ejemplo se menciona con el n de marcar esta, si bien sutil, diferencia entre ambos casos. $ comando-cualquiera 2> archivo-de-errores Para cada proceso de un sistema UNIX se asignan tres descriptores de archivo : entrada standard, salida standard, salida standard para errores. Los dos primeros casos ya los vimos antes. El tercer caso, se reere a los mensaje de error, que por defecto se imprimen por la terminal. En muchos casos esto no es deseable3 . Para esto es que el shell interpreta a 2> como redireccionamiento de la salida standard para errores. Es decir, cualquier mensaje destinado a la salida standard para errores no se imprimir a en la terminal, sino que se imprimir a en el archivo archivo-de-errores. $ comando-cualquiera 2> /dev/null Esencialmente ocurre lo mismo que antes, aunque en este caso, la redirecci on es hacia el archivo /dev/null, el cual representa un archivo nulo : cualquier secuecia de caracteres redireccionado a este archivo ser a eliminado sin posibilidad de recuperaci on. Para hacer una analog a, es una suerte de papelera de reciclaje. $ comando-cualquiera << EOF El comando toma su entrada desde la entrada standard hasta que se ingrese EOF.

19

2.6

Interconexi on.

La secci on anterior se centr o en el problema de redireccionamiento. Con esto solo, si se quisiera conectar dos comandos, se deberia redireccionar la salida de uno a un archivo temporal y que el segundo comando tome como entrada este archivo.
3

Por ejemplo, en casos en que se deba llevar un log de los errores o el avance del programa.

Secci on 2.6. Interconexi on.

20

Una de las grandes contribuciones de un sistema operativo UNIX es la posibilidad de interconectar dos procesos sin necesidad de utilizar archivos temporales auxiliares. Esto se consigue con el caracter |. $ who | sort Este ejemplo es con nes ilustrativos. El comando who imprime por la salida standard los usuarios loggeados al sistema. El comando sort4 ordena el archivo que se le especica. La salida del who no se imprime por la salida standard, sino que se imprime la del sort, cuya entrada es la salida del comando who. En esta instancia, debe quedar claro que el objetivo y el prop osito de tener estar herramientas brindadas por el sistema, es tener comandos simples, que al interconectarlos produzcan efectos m as sosticados. En cap tulos posteriores, veremos como lograr esto, mediante lo que se llaman scripts, para luego ver en detalle el funcionamiento de comandos en detalle.

El comando sort se describe en detalle m as adelante

Cap tulo 3

Programaci on con el Shell: Shell-Scripting.


En el caso m as simple, un script es un archivo con permiso de ejecuci on que contiene una serie de comandos que ser an ejecutados secuencialmente. Esto salva de estar tipeando esa secuencia de comandos cada vez que se invoca al script. Shell-Scripting se remonta a la losof a cl asica de UNIX de separar o dividir un problema grande en problemas m as peque nos.

3.1

Comentarios.

El caracter # es el m as utilizado para comentarios en shell : este ignora todo lo que viene despu es del caracter numeral. Por ejemplo: $ echo hello # there hello $ echo hello#there hello#there El caracter : tambi en es de comentarios, pero debe usarse al principio de la l nea. En verdad, este es el comando null del shell.

3.2

Argumentos y Par ametros. El comando shift.

Los par ametros de posici on son usados para pasar argumentos desde la l nea de comandos a los scripts. De la misma manera que con las variables, los valores de par ametros se obtienen con el caracter $ y el d gito que indica su posici on, siendo $0 siempre el nombre del comando.

21

Secci on 3.2. Argumentos y Par ametros. El comando shift.

22

El shell bsh no permite trabajar con m as de 10 par ametros directamente, es decir, interpreta a $10 como el par ametro uno seguido del caracter cero. Para ello se utiliza el comando shift. Lo que hace shift es pasar el contenido de $1 a $0 y as siguiendo, perdiendo el valor original de cada variable. El siguiente es un ejemplo ilustrativo que imprime los argumentos que se pasan al script como par ametros: while [ ! -z $1 ] do echo $1 shift done La sentencia while y la expresi on de testeo se explican en las secciones 3.5.2 y 3.3 respectivamente.

3.2.1

Par ametros especiales.

Supongamos que se ejecuta: $ prog a b c Entonces vale: $0 prog $# 4 $* a b c seguido de los archivos del working directory "$*" a b c * $$ id del proceso padre $! pid del u ltimo comando ejecutado en background $? estado del u ltimo comando ejecutado en foreground $opciones del shell en efecto

Secci on 3.3. Pruebas. El comando test.

23

3.2.2

Estado de salida. El comando exit.

Cada vez que un programa completa su ejecuci on, retorna un estado al sistema. Este estado es un n umero que indica si el programa ha sido ejecutado existosamente o no. Por lo general, el estado cero indica ejecuci on exitosa y todo valor distinto de cero indica que la ejecuci on ha fallado. Esto permite, adem as de la vericaci on del resultado del programa, el control del mismo en el manejo de errores y progresi on de la ejecuci on. Como se menciona en el apartado anterior, para ver el estado de salida, basta ver el valor de $? inmediatamente despu es de la ejecuci on del proceso en cuesti on. Para hacer que un script termine devolviendo un estado en particular, se utiliza el comando exit n , siendo n el c odigo de terminaci on. Si no especica este par ametro, se devolver a el del u ltimo comando ejecutado.

3.3

Pruebas. El comando test.

El comando test permite evaluar el valor de verdad de expresiones l ogicas, devolviendo cero en caso de exito, o distinto de cero en caso contrario. El formato de este comando1 es: test expresi on o [ expresi on ] expresi on contendr a un conjunto de operadores que describiremos a continuaci on, seg un la prueba. Tambi en, expresi on debe estar rodeada por espacios y debe entrecomillarse para embeber los espacios dentro de ella.

3.3.1

Operadores del comando test.

! . . . . . . negaci on -a . . . . . . AND -o . . . . . . OR

3.3.2

Pruebas sobre archivos.

Algunos tipos de prueba sobre archivos son:


1

tanto para Bourne Shell como para Korn Shell, permitiendo este u ltimo la prueba mediante [[ expresi on

]].

Secci on 3.4. Aritm etica entera. El comando expr. -a file -d file -f file -L file -p file -s file -r file -w file -x file file1 -nt file2 file1 -ot file2 . . . . . . file existe. . . . . . . file existe y es un directorio. . . . . . . file existe y es un archivo regular. . . . . . . file existe y es un link simb olico. . . . . . . file existe y es una named pipe. . . . . . . file existe y no es vac o. . . . . . . file existe y tiene permiso de lectura. . . . . . . file existe y tiene permiso de escritura. . . . . . . file existe y tiene permiso de ejecuci on. . . . . . . file1 es m as nuevo que file2 . . . . . . . file1 es m as antiguo que file2 .

24

3.3.3
A A A A A A -eq -ge -gt -le -lt -ne

Prueba de valores para operaciones algebraicas.


B B B B B B . . . . . . igual a . . . . . . mayor o igual a . . . . . . mayor a . . . . . . menor o igual a . . . . . . menor a . . . . . . distinto de

3.3.4

Prueba de valores para cadena de caracteres.

Debido a que una cadena puede contener nulos o espacios intermedios, siempre es aconsejable entrecomillar a la variable con comillas dobles para evitar errores en el comando test. string1 = string2 . . . . . . las cadenas son iguales string1 != string2 . . . . . . las cadenas no son iguales string . . . . . . la cadena no es nula -z string . . . . . . la cadena tiene longitud cero (es nula) -n string . . . . . . la cadena no es nula

3.4

Aritm etica entera. El comando expr.

En Bourne Shell, todas las variables son strings. Las operaciones matem aticas entre strings no son posibles, pero existe una forma de evaluar una expresi on tipo string como una expresi on matem atica, utilizando el comando expr. expr eval ua sus argumentos como una expresi on matem atica y devuleve el resultado a la salida standard. Las operaciones disponibles son: +, -, *, % (resto) y /. Cuando se utilicen estos operadores deber a haber un espacio a ambos lados del mismo.

Secci on 3.5. Comandos de control.

25

Hay tambi en una operaci on de equiparaci on, :, que compara el primer argumento con el segundo. El segundo debe ser una expresi on regular (a ver m as adelante). La operaci on retorna el n umero de caracteres coincidentes, o cero si no hay coincidencia. Al utilizar una expresi on regular coincidente con todo, .*, el operador de equiparaci on puede ser usado para determinar la longitud del primer argumento. Si se ejecuta una expresi on entre comillas simples, el resultado reemplaza a la expresi on misma. Recordar que $, *, etc., deben estar casteados para que no sean interpretados por el shell. Ejemplo. $ $ $ 3 a=expr 1 + 2 b=expr $a \* 4 echo $a $b 12

3.4.1

Operador de longitud.

${#variable} Devuelve la longitud de variable .

3.5

Comandos de control.

Los comandos de control pueden dividirse en dos grupos: sentencias de decisi on sentencias de iteraci on

3.5.1

Sentencias de Decisi on.

Sentencia if. Formato: if condici on then comandos [elif condici on then comandos ]

Secci on 3.5. Comandos de control. [else comandos ] fi Ejemplo.

26

El siguiente script determina si el archivo pasado como par ametro existe y tiene un tama no mayor a cero. if test -s "$1" then echo $1 es un archivo existente con tama~ no mayor a cero. else echo $1 no existe o tiene tama~ no nulo. fi Sentencia case. Es utilizada para la selecci on de m ultiples alternativas. Cada posibilidad es conocida como branch y cada branch debe estar separada por ;;, siendo opcional en el u ltimo branch. La variable en la sentencia case debe ser una coincidencia expl cita: no debe haber expresiones regulares o nombres de archivos referenciados con comodines. S es posible usar la condici on OR que puede ser utilizada en los patrones, representada por |. Los metacaracteres pueden usarse en los patrones con el siguiente signicado: * : cero o m as ocurrencias de uno o todos los caracteres. ? : cualquier caracter. [] : congura y determina rangos. Formato: case valor in pat1) comandos ;; pat2) comandos ;; ... patN) comandos

Secci on 3.5. Comandos de control. ;; *) comandos por defecto ;; esac Ejemplo.

27

El siguiente script muestra un peque no men u para determinar que hacer con el archivo pasado como par ametro. if test $# then Uso: $0 exit 1 # fi if test ! -ne 1 # verificamos que se pase un par ametro archivo # $0 es el nombre del script salimos devolviendo un c odigo de terminaci on de error por uso err oneo -f "$1" # verificamos la existencia del archivo

then echo $1 no es un nombre de archivo v alido. exit 2 # salimos devolviendo un c odigo de terminacion de error por archivo no v alido fi echo Qu e desea hacer con $1?: # presentamos un menu echo echo echo read <I> para imprimirlo. <B> para borrarlo. <otra-tecla> para salir. accion # leemos la opcion que se ingrese

case $accion in I|i) lp $1 ;; B|b) rm $1 ;; *) echo Saliendo sin hacer nada... esac

;;

En este ejemplo se introdujeron los comandos read, para leer de la entrada standard el valor para una variable, y el comando lp para formatear e imprimir archivos. Sentencia select. Esta sentencia, solo disponible en Korn Shell, permite un listado de selecci on por men u. Este comando usa la variable de ambiente PS3 para el prompt, y COLUMNS y LINES para determinar la apariencia del men u.

Secci on 3.5. Comandos de control. Formato: select variable in arg1 arg2 ...argN do comandos done

28

El usuario selecciona el elemento de la lista sobre la cual ejecutar a los comandos , los cuales se continuar an ejecutando hasta que se encuentre con comandos de ruptura, tales como break, exit o return. Ejemplo. PS3="Elija uno: " select i in 6109 6110 6620 7506 7542 exit do case $i in 6109) echo $1 Probabilidad y Estadistica B ;; 6110) echo $1 Analisis Matematico III ;; 6620) echo $1 Organizacion de Computadoras ;; 7506) echo $1 Organizacion de Datos ;; 7542) echo $1 Taller de Programacion I ;; exit) echo Saliendo... exit 0 ;; *) echo Seleccion invalida ;; esac read rta?"Continuar? (s/n)? " if [ $rta != s ] then echo Fin del menu exit 0 fi done

3.5.2

Sentencias de Iteraci on.

Sentencia for. Formato: for variable in lista do

Secci on 3.5. Comandos de control. comandos done o alternativamente for variable in lista ; do comando1 ; ...; comandoN ; done

29

La lista puede ser enunciada expl citamente o ser el resultado de otro comando o metacracteres. Para cada iteraci on, variable toma el valor de cada uno de los elementos de lista , concluyendo el ciclo cuando se llegue al u ltimo elemento de lista . Sentencia while. Esta sentencia ejecuta los comandos mientras la condicion sea verdadera. Formato: while condicion do comandos done Sentencia until. Esta sentencia cicla hasta que condicion se cumpla. Formato: until condicion do comandos done Hasta ac a se tienen vistas varias de las herramientas que brinda el sistema. Pasaremos ahora a estudiar comandos simples en detalle.

Cap tulo 4

Comandos de Entrada y Salida.


Estudiaremos ahora comandos del sistema en detalle. Dado que muchos de ellos incluyen opciones muy espec cas y fuera del alcance de este apunte, se sugiere consultar las manual pages correspondientes para mayor informaci on.

4.1

Traducci on de caracteres: el comando tr.

El comando tr es un ltro utilziado para traducir los caracteres desde la entrada standard hacia la salida standard. Sintaxis: tr [charset1 ] [charset2 ] Notar que la sintaxis no especica archivos. Para trabajar con archivos, el ingreso debe ser redireccionado desde la l nea de comandos. Los rangos y conjuntos pueden ser utilizados como un mapeo de caracteres de uno en uno. Si charset2 es m as corto que charset1 , entonces charset2 es completado con la repetici on del u ltimo caracter en el conjunto.

4.1.1

Ejemplos.

Para el ejemplo utilizaremos el siguiente archivo, que llamaremos arch: Mercurio Urano Tierra Marte Neptuno G. B. F. B. T. Total Total Total Total Total horas horas horas horas horas 80 78 80 40 80

$ tr 8 2 < arch

30

Secci on 4.2. El comando cut. Mercurio Urano Tierra Marte Neptuno G. B. F. B. T. Total Total Total Total Total horas horas horas horas horas 20 72 20 40 20

31

$ tr [a-z] [A-Z] < arch MERCURIO URANO TIERRA MARTE NEPTUNO G. B. F. B. T. TOTAL TOTAL TOTAL TOTAL TOTAL HORAS HORAS HORAS HORAS HORAS 80 78 80 40 80

4.2

El comando cut.

El comando cut puede ser usado para cortar columnas desde una tabla o campos de un archivo. Los campos cortados no necesariamente tiene que ser de longitud ja. Sintaxis: cut -lista [arch1 arch2 ...archN ] Si no se le indica ning un archivo, toma como entrada la entrada standard. El modicador lista puede ser: -ci -ci,j,k -ci-j -ci El caracter i - esimo. Los caracteres i - esimo, j - esimo y k - esimo. Desde el caracter i - esimo hasta el j - esimo. A partir del caracter i - esimo.

El comando cut empieza a contar los caracteres desde 1. Esto funciona muy bien en los archivos que posean un formato bien denido, como la salida del comando who1 . Como alternativa se tiene la especicaci on de campos a cortar: Con la opci on -dcaracter se le especica al comando cut el caracter que debe tomar como separador de campos. La opci on -flista especica el campo o campos que ser an cortados. La opci on -s indica que no se impriman aquellas l neas que no contienen al separador de campos.
El comando who lista informaci on sobre los usuarios loggeados al sistema. Los nombres de usuario son los caracteres del 1 al 8, las terminales son del 12 al 24 y las fecha y hora del login son del 25 al 36.
1

Secci on 4.3. El comando paste.

32

4.2.1
$ who root user1 user2 user3

Ejemplos.

term/01 term/00 term/02 term/03

Apr Apr Apr Apr

12 12 12 12

08:00 09:01 09:13 09:15

$ who | cut -c1-5 root user1 user2 user3 $ who | cut -c1-5,19root user1 user2 user3 Apr Apr Apr Apr 12 12 12 12 08:00 09:01 09:13 09:15

Sea ahora el archivo infou: root:x:0:0:Super User:/:/bin/ksh cron:NONE:1:1:Time Daemon:/: user1::100:101:555 1212:/home/user1:/bin/sh $ cut -d: -f1,6 infou

root:/ cron:/ user1:/home/user1

4.3

El comando paste.

El comando paste funciona en cierta forma a la inversa del comando cut: yuxtapone columnas. Distinas sintaxis: paste arch1 arch2 ...archN Esta es la forma m as simple de uso, en la que cada l nea de cada archivos se ponen juntas separadas por una tabulaci on.

Secci on 4.3. El comando paste. paste -d lista arch1 arch2 ...archN En este caso, en lugar de utilizar el separador por defecto, paste utiliza como separadores los caracteres indicados en lista . paste -s [-d lista ] arch1 arch2 ...archN Se utiliza para pegar l neas dentro de un mismo archivo. paste - arch1 [arch2 ...archN ] Indica que adem as de los archivos indicados, debe tomar una entrada que le est a siendo redireccionada.

33

4.3.1

Ejemplos.

Supongamos los siguientes tres archivos: nombres user1 user2 user3 ciudades Atlanta New York Los Angeles telefonos (404)555-5356 (212)555-3456 (213)555-1234

$ paste nombres telefonos user1 user2 user3 (404)555-5356 (212)555-3456 (213)555-1234

$ paste -d=+ nombres ciudades telefonos user1=Atlanta+(404)555-5356 user2=New York+(212)555-3456 user3=Los Angeles+(213)555-1234 $ paste -s nombres user1 $ cut -d: user2 user3

-f5 clientes1 | paste - clientes2

Cap tulo 5

Expresiones Regulares.
Las expresiones regulares (REs ) son patrones que describen strings y se usan para matchear 1 esos strings. Las expresiones regulares permiten, por ejemplo, seleccionar alg un conjunto de registros de un campo de un archivo de datos. El espectro de aplicaci on var a desde algo simple como el reemplazo por parte del shell del caracter * por todos los archivos de un directorio hasta matcheos m as renados como los que utilizan comandos como grep y awk. Las expresiones regulares se construyen a partir de caracteres ordinarios y metacaracteres. Los caracteres ordinarios se matchean a s mismos, mientras que los metacaracteres matchean distintos grupos de caracteres o modican la operaci on de otros caracteres. En UNIX tenemos tres tipos o niveles de expresiones regulares : 1. los del shell, para nombres de archivos, de los cuales ya se habl o antes; 2. los simples, utilizados por comandos como grep y sed; 3. los extendidos, utilizados por comandos como egrep. Para los tres casos, se cumple: La barra invertida \ se usa para castear un caracter, es decir, todo caracter que siga a una barra invertida se tomar a como una caracter ordinario, inclusive si este es un metacaracter. Caracteres entre corchetes [] representan un solo caracter matcheado de todos los del conjunto. Si el primer caracter de un conjunto es el acento circunejo ^ se matchea el complemento del conjunto, es decir, todo lo no perteneciente al conjunto. Si se utiliza el gui on -, se est a indicando un rango de caracteres.
En este apunte vamos a usar este t ermino para signicar corresponder o coincidir, por falta de un verbo que exprese m as precisamente el verbo ingl es to match.
1

34

Secci on 5.1. Expresiones regulares simples. Por Ejemplo. abcde [abcde] [a-e] [^a-e] \[\]\\ Los caracteres a, b, c, d y e se matchean en ese orden. Uno de los caracteres a, b, c, d o e se matchean. Idem anterior. Un caracter, salvo a, b, c, d o e, se matchean. Los caracteres [, ], \ se matchean en ese orden.

35

5.1

Expresiones regulares simples.

Aparte de los caracteres ya mencionados, las expresiones regulares simples brindan los siguientes metacaracteres: El asterisco * signica repetir la RE anterior a el un n umero arbitrario de veces, incluyendo ninguna vez. El punto . matchea un caracter cualquiera. El acento circunejo ^ en este caso est a sobrecargado : solo tiene sentido como primer caracter de una RE, caso en el cual signica matchear el comienzo de la l nea. El signo de pesos $ solo tiene sentido como u ltimo caracter de una RE, caso en el cual signica matchear el nal de la l nea. El comando grep trabaja con llaves, cuando son casteadas, para denotar una cantidad de ocurrencias de la RE que precede: \{n\} \{n,\} \{n,m\} Exactamente n ocurrencias. Por lo menos n ocurrencias. Entre n y m ocurrencias.

Tambi en, el editor vi trabaja con par entesis angulares <> para indicar comienzo o nal de una palabra, respectivamente.

5.1.1

Algunos ejemplos de expresiones regulares simples.

p[aeo]lo Alguno de palo, pelo, polo. ^$ Una l nea en blanco (matchear comienzo, nada, y n). ^[a-zA-Z]$

Secci on 5.2. Expresiones regulares extendidas. L neas de una sola palabra. ^[0-9]$ L neas con exactamente un n umero. d.n Cualquier secuencia de tres caracteres comenzando con una d y terminando con una n. d[aeiou]n dan, den, din, don, or dun. 4[2-9][0-9][0-9]-[0-9]\{4\} Un nmero telef onico del Gran Buenos Aires: un cuatro, un d gito entre dos y nueve, dos d gitos, un gui on y cuatro d gitos.

36

5.2

Expresiones regulares extendidas.

Las expresiones regulares extendidas agregan par entesis para agrupar. La barra vertical (o pipe ) | para alternar. El signo m as + para repetir el item precedente por lo menos una vez. El signo de interrogaci on ? para matchear el item precedente ninguna o una vez.

5.2.1

Ejemplos de REs Extendidas.

(Andrea|Beatriz|Carla) (Dieguez|Fernandez) Matchea alguno de los seis nombres Andrea Dieguez, Andrea Fernandez, Beatriz Dieguez, Beatriz Fernandez, Carla Dieguez o Carla Fernandez. [0-9]+ Matchea un n umero entero (uno o m as d gitos). (\+|-)?[0-9]+ [+-]?[0-9]+ Matchea un n umero entero que puede o no llevar signo (un signo m as, un signo menos o nada, seguido de un n umero entero). Further articles in this series will focus on various utilities which use REs to select data for processinggrep, egrep, sed, and awk.

Referencias
[1] Apunte de Entorno UNIX por Paola Chamoles. A no 1999. 75.08Sistemas Operativos. [2] Red-Hat Ocial Installation Guide. http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/install-guide/ [3] Manual page del shell bash.

37

Anda mungkin juga menyukai