Académique Documents
Professionnel Documents
Culture Documents
Sistemas Operativos y
Programacin
Unidad Temtica 1 - Sistemas Operativos
Boletn Prctica 2
Uso de Shell Scripts
Redirecciones y Tuberas
Variables
Manejo de interrupciones
argumento, etc.
La variable $@ referencia a todos los argumentos (en conjunto), excluyendo el
2. REDIRECCIONES Y TUBERAS
2.1. REDIRECCIONES
Cuando desde el shell ejecutamos un programa, ste dispone de tres canales de
comunicacin que permiten que el programa lea o escriba datos a travs de ellos. Estos
canales son:
-
Salida estndar: canal por el cual el programa escribir su salida. Por defecto,
lo que se escribe en este canal se vuelca sobre la ventana del shell, de manera
que cuando ejecutamos una orden como ls, su salida aparece en la misma
ventana.
Entrada estndar: canal por el cual el programa puede leer datos de entrada.
Por defecto, este canal recoge lo que se teclee sobre la ventana del shell,
permitiendo que el programa lo pueda leer.
Entrada estndar
$ programa
programa
Salida estndar
Ventana shell
Salida de error
Cada uno de los tres canales puede ser redirigido para que acte sobre un fichero en vez
de hacerlo sobre la ventana de shell. A continuacin veremos cmo podemos hacerlo.
programa
Salida
estndar
Ventana shell
Salida de error
fichero
programa
Salida
de error
Ventana shell
Salida estndar
fichero
EJERCICIO: Vuelva ahora a ejecutar la ltima orden anterior, pero redirija esta vez la
salida estndar en vez de la de error (por ejemplo, al fichero sal.dat). Qu se
muestra por pantalla?. Indique la orden introducida y su resultado:
6
programa
Salida
estndar
Ventana shell
Salida
de error
fichero1
fichero2
Si se quiere lanzar la salida de error hacia el mismo fichero que se lanza la salida
estndar, se usa la nomenclatura 2>&1. Tambin se puede usar 1>&2 para aadir la
salida estndar a la salida de error. Por ejemplo, si en el ejemplo anterior queremos que
tanto la salida estndar como la salida de error se lancen hacia el mismo el fichero
podremos utilizar:
$ cat noexisto.dat dir.dat 1> sal.dat 2>&1
2.1.3. Redireccin de la entrada estndar
Al igual que se puede redirigir la salida estndar, se puede hacer lo propio con la
entrada estndar.
Para ello usaremos el smbolo <
$ programa < fichero
fichero
Entrada estndar
$ programa <fichero
programa
Salida estndar
Ventana shell
Salida de error
Por ejemplo:
$ tail -3 < salida.dat
La orden tail (explicada en la Prctica 1) filtra su entrada, dejando pasar nicamente las
ltimas lneas (en este ejemplo las tres ltimas lneas).
EJERCICIO: Utilizando la orden head (explicada en la Prctica 1) y la redireccin de
entrada, muestre las primeras 5 lneas de: (a) un fichero que exista; (b) un fichero que
no exista. Qu mensajes se muestran por pantalla en ambos casos?
8
10
2.1.4. Tuberas
En UNIX y en Linux se permite usar la salida estndar de un proceso como la entrada
estndar de otro, tal y como si colocramos una tubera que los uniera. A una secuencia
de rdenes enlazadas de este modo se le llama tubera (pipeline). Para conectar dos
procesos con una tubera, usaremos el smbolo | de la siguiente forma:
$ programa1 | programa2
La idea se muestra en el siguiente esquema (por claridad se han omitido los canales que
no se ven afectados por la tubera).
| wc
$ ultimasLineas 2 salida.dat
Las 2 ultimas lineas del fichero
son:
Penultima linea
Ultima linea
salida.dat
EJERCICIO: a)Cmo habra que lanzar el shell script anterior para que el resultado
no saliera por pantalla, sino que se almacenara en un fichero? b)y para que si se
produjese un error, no se viera ni se almacenase en ningn sitio?
12
a)
b)
12
DE SHELL SCRIPTS.
REDIRECCIONES
Descripcin
Ejemplos
($ es el prompt del sistema)
sh
chmod +x
Argumentos de
un shell script
$ sh contenido
$ chmod +x contenido
$ ./contenido
Ejemplo:
Descripcin
$ argumentos a b c
$0
$1
$2
$@
$#
Nmero de argumentos
Redirecciones y
Tuberas
>
Descripcin
Redireccin de la salida estndar.
>>
2>
<
$0 argumentos
$1 a
$2 b
$@ a b c
$# 3
Ejemplos
$ ls l > dir.txt
$ echo Mas info >> dir.txt
$ cat noexisto 2> error.txt
$ tail -3 < salida.dat
$ ls l
tail -3
13