facultad de ingenier´ıa universidad de buenos aires · comando su, que hace que la sesi´on de un...

37
Facultad de Ingenier´ ıa Universidad de Buenos Aires 75.08—Sistemas Operativos UNIX [email protected] http://fiuba-7508.50megs.com Apunte por: Ignacio Errico [email protected] Version Preliminar Marzo de 2003

Upload: others

Post on 06-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Facultad de Ingenierıa

Universidad de Buenos Aires

75.08—Sistemas Operativos

UNIX

[email protected]

http://fiuba-7508.50megs.com

Apunte por: Ignacio [email protected]

Version Preliminar

Marzo de 2003

Page 2: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Indice

1 Introduccion. 4

1.1 ¿Que es UNIX? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.1.1 ¿Que es UNIX entonces? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.2 Tareas basicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.2.1 Iniciando el sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.2.2 Iniciar una sesion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.2.3 Terminar una sesion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.2.4 Cuentas de usuario y claves de usuario. . . . . . . . . . . . . . . . . . . . 6

1.2.5 Terminales virtuales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.2.6 El comando su. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.2.7 Apagando el sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.3 Conceptos basicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.3.1 Caracteres de control en la lınea de comandos. . . . . . . . . . . . . . . . 8

1.3.2 Directorios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

1.3.3 Permisos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2 El Shell. 13

2.1 Uso de abreviaturas: Metacaracteres. . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.1.1 Nombres de archivos con metacaracteres. . . . . . . . . . . . . . . . . . . 14

2.2 Variables de Ambiente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.2.1 Obteniendo el valor de variables. . . . . . . . . . . . . . . . . . . . . . . . 15

2.3 Variable de usuario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.3.1 Sustitucion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2.4 Entrecomillado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2

Page 3: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

3

2.4.1 Tipos de entrecomillado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.5 Redireccionamiento de la Entrada y Salida. . . . . . . . . . . . . . . . . . . . . . 18

2.5.1 Ejemplos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2.6 Interconexion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3 Programacion con el Shell: Shell-Scripting. 21

3.1 Comentarios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

3.2 Argumentos y Parametros. El comando shift. . . . . . . . . . . . . . . . . . . . 21

3.2.1 Parametros especiales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3.2.2 Estado de salida. El comando exit. . . . . . . . . . . . . . . . . . . . . . 23

3.3 Pruebas. El comando test. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.3.1 Operadores del comando test. . . . . . . . . . . . . . . . . . . . . . . . . 23

3.3.2 Pruebas sobre archivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.3.3 Prueba de valores para operaciones algebraicas. . . . . . . . . . . . . . . . 24

3.3.4 Prueba de valores para cadena de caracteres. . . . . . . . . . . . . . . . . 24

3.4 Aritmetica entera. El comando expr. . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.4.1 Operador de longitud. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.5 Comandos de control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.5.1 Sentencias de Decision. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.5.2 Sentencias de Iteracion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

4 Comandos de Entrada y Salida. 30

4.1 Traduccion de caracteres: el comando tr. . . . . . . . . . . . . . . . . . . . . . . 30

4.1.1 Ejemplos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

4.2 El comando cut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

4.2.1 Ejemplos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

4.3 El comando paste. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

4.3.1 Ejemplos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

5 Expresiones Regulares. 34

5.1 Expresiones regulares simples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

5.1.1 Algunos ejemplos de expresiones regulares simples. . . . . . . . . . . . . . 35

5.2 Expresiones regulares extendidas. . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

5.2.1 Ejemplos de REs Extendidas. . . . . . . . . . . . . . . . . . . . . . . . . . 36

Page 4: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Capıtulo 1

Introduccion.

1.1 ¿Que es UNIX?

El sistema operativo UNIX nacio como un sistema de tiempo compartido, orientado a usosgenerales. En 1973, Ritchie y Thompson reescribieron el nucleo del sistema (el kernel) en C,rompiendo de esta manera la tradicion de software de base escrito en assembler. En 1974 seintroduce en las universidades con fines educacionales y poco tiempo despues estuvo disponiblecon fines comerciales.

UNIX no es en sı un sistema operativo, sino un tipo de sistema operativo. Los sistemas operativostipo UNIX mas 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 granvariedad de maquinas.

2. Abierto. El codigo fuente esta disponible y escrito en un lenguaje de alto nivel. Esto lohace facil de adaptar a exigencias particulares.

3. De utilidad particular para programadores. Es un sistema operativo rico y produc-tivo para programadores.

Su eficacia se debe al enfoque de la programacion, y no a la programacion misma: la combi-nacion de distintos comandos simples permiten lograr grandes tareas generales. De esta manera,monta su potencia en la relacion entre los programas, mas que en la potencia de los programaspropiamente dichos.

1.1.1 ¿Que es UNIX entonces?

En sentido estricto. Es el nucleo de un sistema operativo de tiempo compartido. Un programaque controla los recursos de una computadora y los asigna entre los usuarios. Permite a los

4

Page 5: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 1.2. Tareas basicas. 5

usuarios ejecutar sus programas, controla los dispositivos perifericos conectados, y proporcionaun sistema de archivos que permite el almacenamiento a largo plazo de todo tipo de informacion.

En sentido mas amplio. Abarca, ademas del nucleo, programas esenciales como compiladores,editores, lenguajes de comandos, programas para copiar e imprimir archivos, y muchas otrasaplicaciones.

1.2 Tareas basicas.

1.2.1 Iniciando el sistema.

Este proceso puede variar levemente respecto de lo que uno esta acostumbrado con otros sistemasoperativos. En el caso de no haber instalado otro sistema operativo, el proceso es simplementeencender la computadora y esperar. Por otro lado, si se esta compartiendo el sistema con otrosistema 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 decidio instalarLILO (LInux LOader) la computadora esta preparada para iniciar el sistema operativoque se le especifique ingresando la etiqueta para la particion definida en la instalacion.Presionando la tecla <TAB>, se muestran las etiquetas posibles. Simplemente ingrese lacorrespondiente a Linux, o presione <ENTER> si es la particion que LILO debe iniciar pordefecto.

• Iniciar desde un diskette. Si se creo un diskette de booteo al instalar Linux, tambiense lo puede usar para iniciar el sistema.

1.2.2 Iniciar una sesion.

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 nombredel usuario que tiene permiso para todo en el sistema. Por lo general se usa para realizar tareasde administracion, 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 seejecutan al entrar como root. Mas adelante hablaremos acerca de permisos.

Para ingresar, se debe tipear root y presionar la tecla <ENTER>, y a continuacion aparecera:

Password:

donde se debe tipear la clave del usuario. Tener presente, que si bien no se visualizan loscaracteres cuando uno tipea la clave, se puede corregir con la tecla <BACKSPACE>.

Page 6: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 1.2. Tareas basicas. 6

Recuerde que UNIX es un sistema operativo que distingue mayusculas de minusculas—es “case sensitive”.

Si la clave ingresada es correcta, el sistema mostrara un prompt o sımbolo de espera, que a lolargo de este apunte se representara con el sımbolo # (para el caso del root), que es normalmenteel caracter generado por un programa shell o interprete de comandos, que es la interfaz entre elsistema operativo y el usuario.

1.2.3 Terminar una sesion.

Si bien existen los comandos logout y exit, es comun usar CTRL-D. Esto lleva a la pantalla deLogin: que se describio 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 otemprano uno comete un error, y con este usuario no hay restricciones que salven.

Vamos a describir la forma mas basica 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:

• Definir 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 verificar que no hubieron errores detipeo.

1.2.5 Terminales virtuales.

Una herramienta muy util son las terminales virtuales: se pueden iniciar distintas sesionessimultaneamente, presionando ALT-Fn.

Habiendo creado el nuevo usuario igna, uno puede presionar ALT-F2 y loggearse con este nuevousuario. Para volver a la terminal del root, se presiona ALT-F1.

Page 7: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 1.3. Conceptos basicos. 7

1.2.6 El comando su.

Hay ocasiones en las cuales uno quiere ejecutar algunos comandos como un usuario distinto delque uno estloggeado. Esto es muy util particularmente para administradores del sistema, queusan sus cuentas sin privilegios por lo general. Para evitar todo el proceso de loggeo se usa elcomando su, que hace que la sesion de un usuario ordinario se transforme en una sesion de root.Al ejecutar el comando, pide que se ingrese la clave del root.

Este comando resulta muy util 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 esteejecutando ningun programa, esto no significa que no hay nada corriendo.

Lo que hay que hacer es ejecutar el comando shutdown, el cual solo puede ser ejecutado por elroot. Esta es una buena oportunidad para usar el comando su.

El formato general de shutdown es:

shutdown <opciones> <tiempo>

El parametro <opciones> puede ser:

• -h: detener el sistema cuando se termino de cerrar.

• -r: reiniciar el sistema.

El segundo parametro, <tiempo>, normalmente es now, aunque tambien puede ser el valor deminutos 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 basicos.

En primer lugar, y como mencionamos antes, UNIX es case sensitive: se distinguen mayusculasde minusculas.

Por otro lado, UNIX es full duplex : los caracteres que se tipean, se envıan al sistema, el cuallos 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 clasificarse en dos grupos:

Page 8: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 1.3. Conceptos basicos. 8

• Caracteres comunes.

• Caracteres de control.

Los caracteres tipeados son examinados e interpretados antes de llegar a su destino. Todoslos caracteres se transmiten a la terminal, excepto que el echo este apagado. Los caracteresse almacenan en el nucleo hasta que se presiona <ENTER>. Cuando un caracter es precedidopor el caracter \ (barra invertida), descarta este caracter y almacena el siguiente caracter comouno comun sin otra interpretacion. Al presionar <ENTER>, los datos almacenados se enviaran alprograma que este leyendo datos de la terminal. Los caracteres seran leıdos aunque el nucleoeste ocupado con otras tareas.

Para obtener ayuda acerca de algun 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 unamanual page presionar <q>.

Finalmente, en la filosofıa UNIX, solo existen archivos (una secuencia de bytes) y procesos(programas en ejecucion). Ambos se organizan en estructuras jerarquicas. De esta manera, parael 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 utiles al tipear en la lınea de comandos. Solomencionamos los mas utiles, aunque la lista completa se puede ver de [3].

<CTRL-A>

Va al comienzo del texto.

<CTRL-E>

Va al final 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.

Page 9: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 1.3. Conceptos basicos. 9

<CTRL-L>

Limpia la pantalla.

<ALTL-U>

Pone toda la palabra en mayuscula.

<ALTL-L>

Pone toda la palabra en minuscula.

<CTRL-K>

Borra hasta el final de la lınea.

<TAB>

Completa la cadena incompleta. Es un caracter muy util particularmente para trabajar rapidamentecon nombres de archivos largos.

Tambien es util el manejo de la salida por pantalla:

<CTRL-C>

Interrumpe la ejecucion 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 jerarquicamente archivos. Permitenmantener unida informacion relacionada.

Cada usuario tendra un home directory, o directorio de login, donde podra mantener sus archivos.Al iniciar una sesion se posiciona al usuario en este directorio.

A diferencia del home directory, hablaremos del working directory para referirnos al directorioen el cual se esta posicionado.

Mientras que el working directory cambia al cambiar de directorio, el home directory se mantieneinvariable 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 basicos.

cd <nombre-de-directorio>

Hace que el working directory sea el directorio especificado.

Page 10: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 1.3. Conceptos basicos. 10

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 esta posicionado.

echo $HOME

Imprime en contenido de la variable de ambiente $HOME, que contiene la ruta del home directory.Mas adelante hablaremos de variables de ambiente.

Jerarquıa de directorios.

El directorio de maximo nivel es el / (llamado root —¡nada que ver con el usuario root !).

Allı se encuentran una serie de directorios, que describiremos a continuacion:

/bin

Aca se encuentran los programas basicos.

/dev

Aca se encuentran los dispositivos (terminales, impresoras, etc.). Hablaremos de dispositivosmas adelante.

/etc

Contiene archivos y programas de administracion. Solo por mencionar algunos: passwd es unarchivo 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 ejem-plo, libc.a que es la biblioteca de subrutinas de C.

/tmp

Temporales. Contiene archivos de vida corta. Por ejemplo, cuando se edita un programa, secrea en este directorio un archivo de trabajo, que es una copia del original. Este directorio sedepura periodicamente.

/usr

Sistema de archivos de usuario. Contiene esencialmente los directorios descriptos hasta ahora,con los mismos significados, pero con programas menos vitales para el funcionamiento del sis-tema. Por ejemplo, el compilador FORTRAN esta en /usr/lib.

Vale la pena invertir un tiempo en recorrer estos directorios para estar mas familiarizado con elsistema.

Page 11: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 1.3. Conceptos basicos. 11

1.3.3 Permisos.

Cada archivo tiene un conjunto de permisos asociados, que determinan que se puede hacer yquien puede hacerlo.

Cuando un usuario ingresa al sistema, este lo reconoce por un numero llamado user id (oidentificador 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. Ademas de este valor,se le asigna al usuario un group id, que lo coloca dentro de una cierta clase de usuarios. Elsistema usa estos dos valores para determinar los permisos para un usuario en relacion con unarchivo.

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 cadauna se asigna a:

• el usuario mismo,

• el grupo al que pertenece el usuario, y

• al resto de los usarios.

Esta clasificacion 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--. Estosignifica que el usuario puede leer, escribir (modificar) y ejecutar el archivo; que los usuariosdel grupo al que pertenece pueden solo leerlo y modificarlo; y que el resto de los usuarios solopueden leerlo.

Para ver los permisos de un archivo, usar el comando:

ls -l [<nombre-del-archivo>]

Los corchetes indican que el parametro no es necesario. Hablaremos mas acerca de este comandomas adelante.

Cambiando los permisos de un archivo.

El comando chmod (change mode), permite cambiar permisos de archivos, con el siguiente for-mato:

Page 12: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 1.3. Conceptos basicos. 12

chmod <permisos> <archivos>

Solo el dueno de un archivo puede cambiar los permisos de un archivo.

El parametro <permisos> puede darse de varias maneras. Esencialmente hay dos:

• Con sımbolos representativos. Usando las seis letras definidas antes, y usando + o -

para indicar si se da el permiso, o si se quita, respectivamente.

Por ejemplo:

chmod u+x arch

Le da permiso de ejecucion del archivo arch al usuario.

chmod ug+w-r arch

Les da permiso de modificacion al usuario y al grupo del archivo arch, pero les quitasimultaneamente permiso de lectura.

• Con numeros octales. Para cada clasificacion se puede asignar una combinacion de trespermisos, resultando en 23 = 8 alternativas distintas, lo cual sugiere una representacionen base octal para los permisos.

El “bit” de lectura (r) se define como el bit mas significativo. Ası, los permisos rw- serepresentan por el numero octal 4 + 2 + 0 = 6.

Por ejemplo:

chmod 640 arch

Le asigna los permisos rw- r-- --- al archivo arch, es decir, lectura y modificacion parael usuario, lectura para el grupo al que pertenece el usuario, y ningun permiso al resto delos usuarios.

El parametro archivos puede ser uno o varios archivos separados por espacio o con wildcards—que explicaremos mas adelante.

Tener presente que el usuario root tiene permiso para todo.

Page 13: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Capıtulo 2

El Shell.

Como ya se menciono antes, cuando un usuario se conecta al sistema, este presenta un promptdonde se tipean los comandos que el sistema pasa a ejecutar. No es el kernel el que dirige alusuario, sino un interprete de comandos o shell, que es un programa que realiza la interpretacionde los caracteres ingresados.

A continuacion hablaremos de las ventajas que presta este interprete entre el sistema operativoy el usuario.

2.1 Uso de abreviaturas: Metacaracteres.

Es posible referirse a una serie de archivos mediante el uso de metacaracteres, los cuales soninterpretados por el shell antes de ser pasados al comando en cuestion.

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 ano 2001:

13

Page 14: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 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 pasaal comando rmdir. Es decir, desde el punto de vista del comando rmdir, es como que el usuariohubiese 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 sonlas cadenas que corresponden a los archivos del directorio actual, y es esto lo que le pasa alcomando. Nuevamente, desde el punto de vista del comando rmdir, es como si no se hubieranusado metacaracteres, porque el no los ve.

Notar que el uso de metacaracteres simplifica el diseno de los comandos. De no existirel shell, habrıa que implementar para cada comando la interpretacion 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 ve los metacar-acteres, sino que ve los parametros arch1, . . . , arch4, arch6, . . . , arch9.

rm [a-z]

El comando rm informarıa que no encuentra ningun archivo para borrar, pues no hay archivoscuyos 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 ensus nombres, por ejemplo, arch*.

Esto es posible, y si uno no quiere que el shell interprete un metacaracter, debe anteponerle elmetacaracter \ o escribir el metacaracter entre apostrofes.

Nos referiremos (informalmente) a esta accion 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.

Page 15: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 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 llamaremosvariables 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 ultimos ’:’ indica working directory, aunque suele nosetearse por seguridad.

SHELL

contiene el shell que se esta ejecutando.

PWD

contiene el working directory.

TERM

contiene el tipo de terminal. Ciertos programas lo utilizan para manejar mas eficientemente lapantalla.

2.2.1 Obteniendo el valor de variables.

Obtener el valor de una variable es la accion de indicarle al shell que interprete el contenido dela 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, yno debe ser tipeado. De aquı en adelante seguiremos esta convencion.

Para agregar un directorio a la variable de ambiente PATH, se puede hacer:

$ PATH=$PATH:/user/games

2.3 Variable de usuario.

Como convencion, las variables de ambiente llevan nombres en mayusculas. Uno puede definirvariables propias, usando nombres en minusculas.

Page 16: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 2.3. Variable de usuario. 16

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> tambien funciona con variables.

2.3.1 Sustitucion.

Ya vimos que el shell reemplaza $var por el valor del string asignado a la variable. Tambien,una variable esta configurada, si alguna vez le ha sido asignado un valor, siendo valido el stringnulo como valor para una variable.

Nos centramos ahora en sustituir el valor de una variable, dependiendo de si esta tenıa o no unvalor asignado.

Sustitucion 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 sustituciones el valor de variable con la parte coincidente eliminada.

En el primer caso se reemplaza la menor parte coincidente y en el segundo, la mayorparte coincidente.

${variable%patron}

${variable%%patron}

Si patron coincide con el final del valor de variable , el valor de sustitucion es elvalor de variable con la parte coincidente eliminada.

En el primer caso se reemplaza la menor parte coincidente y en el segundo, la mayorparte coincidente.

Sustitucion condicional.

${variable:-cadena}

Si variable esta asignada y no es nula el valor de sustitucion es el valor de variable ,sino el valor de sustitucion es cadena .

Page 17: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 2.4. Entrecomillado. 17

${variable:=cadena}

Si variable esta asignada y no es nula el valor de sustitucion es el valor de variable ,sino el valor de sustitucion es cadena , y le asigna este valor a variable .

${variable:+cadena}

Si variable esta asignada y no es nula el valor de sustitucion es el valor de cadena ,sino el valor de sustitucion es nulo.

${variable:?cadena}

Si variable esta asignada y no es nula el valor de sustitucion es el valor de variable ,sino el valor de sustitucion es cadena , y sale al shell.

Si cadena es omitido, se imprime el mensaje parameter null or not set. Si se loutiliza en un .profile no sale del sistema.

Sirve para verificar si las variables estan seteadas.

Los : en la sustitucion de variable significa opcional.

2.4 Entrecomillado.

El entrecomillado se utiliza para indicarle al shell que un string, que de otra forma se interpretarıacomo partes separadas, debe ser interpretado como una unidad.

Por ejemplo, un archivo puede llamarse archivo con nombre largo.txt. El contenido de unarchivo 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 parametros archivo, con, nombre y largo.txt porseparado. Para que el shell le pase un unico parametro deberıamos tiperar:

$ cat ’archivo con nombre largo.txt’1

2.4.1 Tipos de entrecomillado.

Distinguimos 3 tipos de entrecomillado:

Comillas. El shell interpreta caracteres especiales.

1Tambien se podrıan castear los espacios.

Page 18: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 2.5. Redireccionamiento de la Entrada y Salida. 18

Apostrofe. 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

2.5 Redireccionamiento de la Entrada y Salida.

La idea de redireccion esta sustentada por el concepto que ya mencionamos, en el que todo endefinitiva es un archivo.

Muchos de los comandos que se describiran en capıtulos posteriores, toman su entrada de laentrada standard o producen su salida por la salida standard.

Es comun que se desee, por ejemplo, la salida de un comando no salga por la salida standardsino que se almacene en un archivo de texto. Lo mismo ocurre para la entrada de datos a uncomando: puede ser deseable que el comando no espere datos desde la entrada standard sinoque los tome desde un archivo.

Los caracteres > y < permiten la redireccion de la salida y la entrada de comandos a o desdearchivos, 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 redireccion no existe, lo crea.Si existe, lo sobreescribe. Notar que es el shell el que se encarga de este redirec-cionamiento. Es decir, el comando cat simplemente hace su tarea de concatencion,desentendiendose de cual sera el destino.

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

Page 19: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 2.6. Interconexion. 19

$ cat arch1 arch2 arch3 >> total

Esto tiene el mismo efecto que en el caso anterior, con la diferencia que si el archivode redireccion 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, esel 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 unaentrada standard. Este ejemplo se menciona con el fin 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: entradastandard, salida standard, salida standard para errores. Los dos primeros casos yalos vimos antes. El tercer caso, se refiere a los mensaje de error, que por defecto seimprimen por la terminal. En muchos casos esto no es deseable3. Para esto es que elshell interpreta a 2> como redireccionamiento de la salida standard para errores. Esdecir, cualquier mensaje destinado a la salida standard para errores no se imprimiraen la terminal, sino que se imprimira en el archivo archivo-de-errores.

$ comando-cualquiera 2> /dev/null

Esencialmente ocurre lo mismo que antes, aunque en este caso, la redireccion es haciael archivo /dev/null, el cual representa un archivo nulo: cualquier secuecia de car-acteres redireccionado a este archivo sera eliminado sin posibilidad de recuperacion.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.

2.6 Interconexion.

La seccion anterior se centro en el problema de redireccionamiento. Con esto solo, si se quisieraconectar dos comandos, se deberia redireccionar la salida de uno a un archivo temporal y que elsegundo comando tome como entrada este archivo.

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

Page 20: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 2.6. Interconexion. 20

Una de las grandes contribuciones de un sistema operativo UNIX es la posibilidad de interconectardos procesos sin necesidad de utilizar archivos temporales auxiliares. Esto se consigue con elcaracter |.

$ who | sort

Este ejemplo es con fines ilustrativos. El comando who imprime por la salida standardlos usuarios loggeados al sistema. El comando sort4 ordena el archivo que se leespecifica. La salida del who no se imprime por la salida standard, sino que seimprime la del sort, cuya entrada es la salida del comando who.

En esta instancia, debe quedar claro que el objetivo y el proposito de tener estar herramientasbrindadas por el sistema, es tener comandos simples, que al interconectarlos produzcan efectosmas sofisticados.

En capıtulos posteriores, veremos como lograr esto, mediante lo que se llaman scripts, para luegover en detalle el funcionamiento de comandos en detalle.

4El comando sort se describe en detalle mas adelante

Page 21: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Capıtulo 3

Programacion con el Shell:

Shell-Scripting.

En el caso mas simple, un script es un archivo con permiso de ejecucion que contiene una seriede comandos que seran ejecutados secuencialmente. Esto salva de estar tipeando esa secuenciade comandos cada vez que se invoca al script.

Shell-Scripting se remonta a la filosofıa clasica de UNIX de separar o dividir un problema grandeen problemas mas pequenos.

3.1 Comentarios.

El caracter # es el mas utilizado para comentarios en shell : este ignora todo lo que viene despuesdel caracter numeral.

Por ejemplo:

$ echo hello # there

hello

$ echo hello#there

hello#there

El caracter : tambien 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 Parametros. El comando shift.

Los parametros de posicion son usados para pasar argumentos desde la lınea de comandos a losscripts. De la misma manera que con las variables, los valores de parametros se obtienen con elcaracter $ y el dıgito que indica su posicion, siendo $0 siempre el nombre del comando.

21

Page 22: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 3.2. Argumentos y Parametros. El comando shift. 22

El shell bsh no permite trabajar con mas de 10 parametros directamente, es decir, interpreta a$10 como el parametro 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 originalde cada variable.

El siguiente es un ejemplo ilustrativo que imprime los argumentos que se pasan al script comoparametros:

while [ ! -z $1 ]

do

echo $1

shift

done

La sentencia while y la expresion de testeo se explican en las secciones 3.5.2 y 3.3 respectiva-mente.

3.2.1 Parametros 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 ultimo comando ejecutado en background

$?

estado del ultimo comando ejecutado en foreground

$-

opciones del shell en efecto

Page 23: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 3.3. Pruebas. El comando test. 23

3.2.2 Estado de salida. El comando exit.

Cada vez que un programa completa su ejecucion, retorna un estado al sistema. Este estado esun numero que indica si el programa ha sido ejecutado existosamente o no. Por lo general, elestado cero indica ejecucion exitosa y todo valor distinto de cero indica que la ejecucion hafallado.

Esto permite, ademas de la verificacion del resultado del programa, el control del mismo en elmanejo de errores y progresion de la ejecucion. Como se menciona en el apartado anterior, paraver el estado de salida, basta ver el valor de $? inmediatamente despues de la ejecucion delproceso en cuestion.

Para hacer que un script termine devolviendo un estado en particular, se utiliza el comandoexit n , siendo n el codigo de terminacion. Si no especifica este parametro, se devolvera el delultimo comando ejecutado.

3.3 Pruebas. El comando test.

El comando test permite evaluar el valor de verdad de expresiones logicas, devolviendo cero encaso de exito, o distinto de cero en caso contrario.

El formato de este comando1 es:

test expresion

o

[ expresion ]

expresion contendra un conjunto de operadores que describiremos a continuacion, segun laprueba. Tambien, expresion debe estar rodeada por espacios y debe entrecomillarse paraembeber los espacios dentro de ella.

3.3.1 Operadores del comando test.

! . . . . . . negacion-a . . . . . . AND-o . . . . . . OR

3.3.2 Pruebas sobre archivos.

Algunos tipos de prueba sobre archivos son:1tanto para Bourne Shell como para Korn Shell, permitiendo este ultimo la prueba mediante [[ expresion

]].

Page 24: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 3.4. Aritmetica entera. El comando expr. 24

-a file . . . . . . file existe.-d file . . . . . . file existe y es un directorio.-f file . . . . . . file existe y es un archivo regular.-L file . . . . . . file existe y es un link simbolico.-p file . . . . . . file existe y es una named pipe.-s file . . . . . . file existe y no es vacıo.-r file . . . . . . file existe y tiene permiso de lectura.-w file . . . . . . file existe y tiene permiso de escritura.-x file . . . . . . file existe y tiene permiso de ejecucion.

file1 -nt file2 . . . . . . file1 es mas nuevo que file2 .file1 -ot file2 . . . . . . file1 es mas antiguo que file2 .

3.3.3 Prueba de valores para operaciones algebraicas.

A -eq B . . . . . . igual aA -ge B . . . . . . mayor o igual aA -gt B . . . . . . mayor aA -le B . . . . . . menor o igual aA -lt B . . . . . . menor aA -ne B . . . . . . 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 aconsejableentrecomillar a la variable con comillas dobles para evitar errores en el comando test.

string1 = string2 . . . . . . las cadenas son igualesstring1 != 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 Aritmetica entera. El comando expr.

En Bourne Shell, todas las variables son strings. Las operaciones matematicas entre strings noson posibles, pero existe una forma de evaluar una expresion tipo string como una expresionmatematica, utilizando el comando expr.

expr evalua sus argumentos como una expresion matematica y devuleve el resultado a la salidastandard.

Las operaciones disponibles son: +, -, *, % (resto) y /.

Cuando se utilicen estos operadores debera haber un espacio a ambos lados del mismo.

Page 25: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 3.5. Comandos de control. 25

Hay tambien una operacion de equiparacion, :, que compara el primer argumento con el se-gundo. El segundo debe ser una expresion regular (a ver mas adelante). La operacion retornael numero de caracteres coincidentes, o cero si no hay coincidencia. Al utilizar una expresionregular coincidente con todo, .*, el operador de equiparacion puede ser usado para determinarla longitud del primer argumento.

Si se ejecuta una expresion entre comillas simples, el resultado reemplaza a la expresion misma.Recordar que $, *, etc., deben estar casteados para que no sean interpretados por el shell.

Ejemplo.

$ a=’expr 1 + 2’

$ b=’expr $a \* 4’

$ echo $a $b

3 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 decision

• sentencias de iteracion

3.5.1 Sentencias de Decision.

Sentencia if.

Formato:

if condicion

then

comandos

[elif condicion

then

comandos ]

Page 26: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 3.5. Comandos de control. 26

[elsecomandos ]

fi

Ejemplo.

El siguiente script determina si el archivo pasado como parametro existe y tiene un tamanomayor 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 seleccion de multiples alternativas. Cada posibilidad es conocida comobranch y cada branch debe estar separada por ;;, siendo opcional en el ultimo branch.

La variable en la sentencia case debe ser una coincidencia explıcita: no debe haber ex-presiones regulares o nombres de archivos referenciados con comodines. Sı es posible usar lacondicion OR que puede ser utilizada en los patrones, representada por |.

Los metacaracteres pueden usarse en los patrones con el siguiente significado:

• * : cero o mas ocurrencias de uno o todos los caracteres.

• ? : cualquier caracter.

• [] : configura y determina rangos.

Formato:

case valor in

pat1)

comandos

;;

pat2)

comandos

;;

...

patN)

comandos

Page 27: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 3.5. Comandos de control. 27

;;

*)

comandos por defecto

;;

esac

Ejemplo.

El siguiente script muestra un pequeno menu para determinar que hacer con el archivo pasadocomo parametro.

if test $# -ne 1 # verificamos que se pase un parametro

then

Uso: $0 archivo # $0 es el nombre del script

exit 1 # salimos devolviendo un codigo de terminacion de error por uso erroneo

fi

if test ! -f "$1" # verificamos la existencia del archivo

then

echo $1 no es un nombre de archivo valido.

exit 2 # salimos devolviendo un codigo de terminaci’on de error por archivo no

valido

fi

echo ¿Que desea hacer con $1?: # presentamos un menu

echo ’<I> para imprimirlo.’

echo ’<B> para borrarlo.’

echo ’<otra-tecla> para salir.’

read 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 valorpara una variable, y el comando lp para formatear e imprimir archivos.

Sentencia select.

Esta sentencia, solo disponible en Korn Shell, permite un listado de seleccion por menu. Estecomando usa la variable de ambiente PS3 para el prompt, y COLUMNS y LINES para determinarla apariencia del menu.

Page 28: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 3.5. Comandos de control. 28

Formato:

select variable in arg1 arg2 ...argN

do

comandos

done

El usuario selecciona el elemento de la lista sobre la cual ejecutara los comandos , los cualesse continuaran 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 Iteracion.

Sentencia for.

Formato:

for variable in lista

do

Page 29: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 3.5. Comandos de control. 29

comandos

done

o alternativamente

for variable in lista ; do comando1 ; ...; comandoN ; done

La lista puede ser enunciada explıcitamente o ser el resultado de otro comando o metacracteres.

Para cada iteracion, variable toma el valor de cada uno de los elementos de lista , concluyendoel ciclo cuando se llegue al ultimo 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 aca se tienen vistas varias de las herramientas que brinda el sistema. Pasaremos ahora aestudiar comandos simples en detalle.

Page 30: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Capıtulo 4

Comandos de Entrada y Salida.

Estudiaremos ahora comandos del sistema en detalle. Dado que muchos de ellos incluyen op-ciones muy especıficas y fuera del alcance de este apunte, se sugiere consultar las manual pagescorrespondientes para mayor informacion.

4.1 Traduccion de caracteres: el comando tr.

El comando tr es un filtro utilziado para traducir los caracteres desde la entrada standard haciala salida standard.

Sintaxis:

tr [charset1 ] [charset2 ]

Notar que la sintaxis no especifica archivos. Para trabajar con archivos, el ingreso debe serredireccionado desde la lınea de comandos.

Los rangos y conjuntos pueden ser utilizados como un mapeo de caracteres de uno en uno. Sicharset2 es mas corto que charset1 , entonces charset2 es completado con la repeticion delultimo caracter en el conjunto.

4.1.1 Ejemplos.

Para el ejemplo utilizaremos el siguiente archivo, que llamaremos arch:

Mercurio G. Total horas 80

Urano B. Total horas 78

Tierra F. Total horas 80

Marte B. Total horas 40

Neptuno T. Total horas 80

$ tr 8 2 < arch

30

Page 31: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 4.2. El comando cut. 31

Mercurio G. Total horas 20

Urano B. Total horas 72

Tierra F. Total horas 20

Marte B. Total horas 40

Neptuno T. Total horas 20

$ tr [a-z] [A-Z] < arch

MERCURIO G. TOTAL HORAS 80

URANO B. TOTAL HORAS 78

TIERRA F. TOTAL HORAS 80

MARTE B. TOTAL HORAS 40

NEPTUNO T. TOTAL HORAS 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 fija.

Sintaxis:

cut -lista [arch1 arch2 ...archN ]

Si no se le indica ningun archivo, toma como entrada la entrada standard.

El modificador lista puede ser:

-ci El caracter i -esimo.-ci,j,k Los caracteres i -esimo, j -esimo y k -esimo.-ci-j Desde el caracter i -esimo hasta el j -esimo.-ci - 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 definido, como la salida delcomando who1. Como alternativa se tiene la especificacion de campos a cortar:

• Con la opcion -dcaracter se le especifica al comando cut el caracter que debe tomarcomo separador de campos.

• La opcion -flista especifica el campo o campos que seran cortados.

• La opcion -s indica que no se impriman aquellas lıneas que no contienen al separador decampos.

1El comando who lista informacion 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.

Page 32: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 4.3. El comando paste. 32

4.2.1 Ejemplos.

$ who

root term/01 Apr 12 08:00

user1 term/00 Apr 12 09:01

user2 term/02 Apr 12 09:13

user3 term/03 Apr 12 09:15

$ who | cut -c1-5

root

user1

user2

user3

$ who | cut -c1-5,19-

root Apr 12 08:00

user1 Apr 12 09:01

user2 Apr 12 09:13

user3 Apr 12 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 mas simple de uso, en la que cada lınea de cada archivos se ponenjuntas separadas por una tabulacion.

Page 33: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 4.3. El comando paste. 33

paste -d lista arch1 arch2 ...archN

En este caso, en lugar de utilizar el separador por defecto, paste utiliza como sepa-radores 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 ademas de los archivos indicados, debe tomar una entrada que le estasiendo redireccionada.

4.3.1 Ejemplos.

Supongamos los siguientes tres archivos:

nombres ciudades telefonos

user1 Atlanta (404)555-5356

user2 New York (212)555-3456

user3 Los Angeles (213)555-1234

$ paste nombres telefonos

user1 (404)555-5356

user2 (212)555-3456

user3 (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 user2 user3

$ cut -d: -f5 clientes1 | paste - clientes2

Page 34: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Capıtulo 5

Expresiones Regulares.

Las expresiones regulares (REs) son patrones que describen strings y se usan para matchear1

esos strings. Las expresiones regulares permiten, por ejemplo, seleccionar algun conjunto deregistros de un campo de un archivo de datos. El espectro de aplicacion varıa desde algo simplecomo el reemplazo por parte del shell del caracter * por todos los archivos de un directorio hastamatcheos mas refinados como los que utilizan comandos como grep y awk.

Las expresiones regulares se construyen a partir de caracteres ordinarios y metacaracteres. Loscaracteres ordinarios se matchean a sı mismos, mientras que los metacaracteres matchean dis-tintos grupos de caracteres o modifican la operacion 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 hablo 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 unabarra invertida se tomara como una caracter ordinario, inclusive si este es un metacaracter.

• Caracteres entre corchetes [] representan un solo caracter matcheado de todos los delconjunto.

– Si el primer caracter de un conjunto es el acento circunflejo ^ se matchea el comple-mento del conjunto, es decir, todo lo no perteneciente al conjunto.

– Si se utiliza el guion -, se esta indicando un rango de caracteres.1En este apunte vamos a usar este termino para significar corresponder o coincidir, por falta de un verbo que

exprese mas precisamente el verbo ingles to match.

34

Page 35: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 5.1. Expresiones regulares simples. 35

Por Ejemplo.

abcde Los caracteres ’a’, ’b’, ’c’, ’d’ y ’e’ se matchean en ese orden.[abcde] Uno de los caracteres ’a’, ’b’, ’c’, ’d’ o ’e’ se matchean.[a-e] Idem anterior.[^a-e] Un caracter, salvo ’a’, ’b’, ’c’, ’d’ o ’e’, se matchean.\[\]\\ Los caracteres ’[’, ’]’, ’\’ se matchean en ese orden.

5.1 Expresiones regulares simples.

Aparte de los caracteres ya mencionados, las expresiones regulares simples brindan los siguientesmetacaracteres:

• El asterisco * significa repetir la RE anterior a el un numero arbitrario de veces, incluyendoninguna vez.

• El punto . matchea un caracter cualquiera.

• El acento circunflejo ^ en este caso esta sobrecargado: solo tiene sentido como primercaracter de una RE, caso en el cual significa matchear el comienzo de la lınea.

• El signo de pesos $ solo tiene sentido como ultimo caracter de una RE, caso en el cualsignifica matchear el final de la lınea.

El comando grep trabaja con llaves, cuando son casteadas, para denotar una cantidad de ocur-rencias de la RE que precede:

\{n\} Exactamente n ocurrencias.\{n,\} Por lo menos n ocurrencias.\{n,m\} Entre n y m ocurrencias.

Tambien, el editor vi trabaja con parentesis angulares <> para indicar comienzo o final de unapalabra, 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 fin).

^[a-zA-Z]$

Page 36: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Seccion 5.2. Expresiones regulares extendidas. 36

Lıneas de una sola palabra.

^[0-9]$

Lıneas con exactamente un numero.

d.n

Cualquier secuencia de tres caracteres comenzando con una ’d’ y terminando conuna ’n’.

d[aeiou]n

’dan’, ’den’, ’din’, ’don’, or ’dun’.

4[2-9][0-9][0-9]-[0-9]\{4\}

Un nmero telefonico del Gran Buenos Aires: un cuatro, un dıgito entre dos y nueve,dos dıgitos, un guion y cuatro dıgitos.

5.2 Expresiones regulares extendidas.

Las expresiones regulares extendidas agregan parentesis para agrupar.

• La barra vertical (o pipe) | para alternar.

• El signo mas + para repetir el item precedente por lo menos una vez.

• El signo de interrogacion ? 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’, ’BeatrizDieguez’, ’Beatriz Fernandez’, ’Carla Dieguez’ o ’Carla Fernandez’.

[0-9]+

Matchea un numero entero (uno o mas dıgitos).

(\+|-)?[0-9]+

[+-]?[0-9]+

Matchea un numero entero que puede o no llevar signo (un signo mas, un signo menoso nada, seguido de un numero entero).

Further articles in this series will focus on various utilities which use REs to select data forprocessing–grep, egrep, sed, and awk.

Page 37: Facultad de Ingenier´ıa Universidad de Buenos Aires · comando su, que hace que la sesi´on de un usuario ordinario se transforme en una sesi´on de root. Al ejecutar el comando,

Referencias

[1] Apunte de “Entorno UNIX” por Paola Chamoles.Ano 1999.75.08—Sistemas Operativos.

[2] Red-Hat Official Installation Guide.http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/install-guide/

[3] Manual page del shell bash.

37