Sistemas Operativos III
Scripts Avanzados - Linux 1
Unidad 11Scripts Avanzados
Copyright 2007 por TECSUP
Redes y Comunicaciones de Datos
Sistemas Operativos III
Scripts Avanzados - Linux 2
2
Introduccin
Se pueden desarrollar scripts ms potentes utilizando una serie de herramientas que permiten manipular la informacin mostrada en pantalla.
Adems existen ciertos scripts que se ejecutan en el arranque del sistema o al inicio de una sesin y que pueden ser de utilidad para programar la ejecucin de una determinada tarea.
En esta unidad trataremos sobre las herramientas de programacin que se pueden usar para manipular la informacin, los scripts de arranque e inicio, as como el uso de cuadros de dilogo para mejorar la interaccin con el usuario.
Sistemas Operativos III
Scripts Avanzados - Linux 3
3
Objetivos Utilizar herramientas de programacin para desarrollar
scripts mas complejos.
Identificar los scripts de arranque y de inicio.
Utilizar cuadros de dialogo para mejorar la apariencia de los scripts.
Sistemas Operativos III
Scripts Avanzados - Linux 4
4
Contenido
Herramientas de programacin.
Secuencia de ejecucin. Script de arranque. Script de inicio.
Cuadros de Dilogo.
Sistemas Operativos III
Scripts Avanzados - Linux 5
Herramientas de Programacin
Redes y Comunicaciones
Sistemas Operativos III
Scripts Avanzados - Linux 6
6
Herramientas de Programacin
Se puede utilizar una serie de comandos, para darle tratamiento a la informacin obtenida de los archivos o de la salida de un comando. Entre ellos tenemos: grep (ya visto anteriormente) cut head tail sort
Sistemas Operativos III
Scripts Avanzados - Linux 7
7
Comando cut
Permite extraer varios campos de datos de un archivo o de la salida de un comando
Donde chars especifica el nmero de caracteres a extraer de cada lnea -c5 Extrae el carcter 5 -c20-50 Extrae del carcter 20 al 50 -c5- Extrae del carcter 5 hasta el final
Ej.$ w | cut -c1-8
4:58pmUSER
$cut -cchars file
Opciones -d y -fSe utilizan cuando los datos estn delimitados por un carcter en particular.
Donde dchars es el carcter que delimita cada campo y fieldsespecifica el numero de campo a ser extrado.Ej.
$cut -d: -f1 /etc/passwd$cut -d: -f1,5 /etc/passwd$cut -f1 phonebook (toma el tab como delimitador por defecto)
Sistemas Operativos III
Scripts Avanzados - Linux 8
8
Ejemplo de cut $ cat passwd
hernan:x:654:100::/home/hernan:/bin/bashcarlos:x:655:100::/home/carlos:/bin/bashfernando:x:656:100::/home/fernando:/bin/bashleonardo:x:657:100::/home/leonardo:/bin/bash
$ cut -d: -f1 passwdhernancarlosfernandoleonardo
Sistemas Operativos III
Scripts Avanzados - Linux 9
9
Comando sort
Ordena las lneas de un archivo
La opcin -u elimina lneas duplicadas La opcin -r ordena en forma descendente La opcin -o especifica el archivo de salida
$sort file
Sistemas Operativos III
Scripts Avanzados - Linux 10
10
Comando head
Permite extraer las primeras lneas de un texto
$ w5:08pm up 43 days, 4:34, 2 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATroot tty1 - 9Aug 1 15days 1.15s 0.93s -bashuser0 pts/0 216.244.185.2 4:14pm 0.00s 1.39s 0.09s w
$ w | head -15:08pm up 43 days, 4:34, 2 users, load average: 0.00, 0.00, 0.00
Sistemas Operativos III
Scripts Avanzados - Linux 11
11
Comando tail
Permite extrae las ultimas lneas de un texto
$ freetotal used free shared buffers cached
Mem: 79348 66128 13220 5240 38452 13752-/+ buffers/cache: 13924 65424Swap: 130656 2228 128428
$ free | tail -1Swap: 130656 2228 128428
El comando tail con el parametro f ademas nos permite ver en tiempo real
la variacin del contenido de archivos como por ejemplo los de log.
Sistemas Operativos III
Scripts Avanzados - Linux 12
12
Secuencia de Ejecucin Existen una serie de scripts, que se ejecutan en el sistema
y que afectan a los usuarios que se conectan. Estos son: Script de arranque: que se ejecutan en el proceso de
carga del sistema: Script de Inicio Globales: que afectan a todos los
usuarios. Script de Inicio Individuales: que afectan a un usuario
especifico.
Sistemas Operativos III
Scripts Avanzados - Linux 13
13
Script de Arranque del Sistema
Son shells-script que se encuentran en el directorio /etc/rc.d
Son ejecutados por el proceso init siguiendo las instrucciones del archivo /etc/inittab
Se ejecutan con los mximos privilegios (privilegios de root).
No es necesario que entre ningn usuario al sistema para ejecutarse y se ejecutan una nica vez al arrancar el sistema.
Se indican los archivos de arranque por orden de ejecucin:/etc/rc.d/rc.sysinit/etc/rc.d/rc /etc/rc.d/rc.local
El administrador del sistema slo debera modificar el archivo/etc/rc.d/rc.local
Sistemas Operativos III
Scripts Avanzados - Linux 14
14
Script de inicio Globales de Usuario.
Estos scripts se utilizan para configurar el entorno global de los usuarios.
Estos archivos son el /etc/profile y el /etc/bashrc. El archivo /etc/profile contiene variables de entorno del
sistema y programas de inicio . El archivo /etc/bashrc contiene alias del sistema y
funciones.
Sistemas Operativos III
Scripts Avanzados - Linux 15
15
Script de Inicio Individual de Usuario
Existen tres archivos en el directorio de un usuario que le permiten configurar el entorno individual de una cuenta. Estos archivos son copiados del directorio /etc/skel, cuando el usuario es creado.
Los nombres de estos archivos son: .bash_profile .bashrc .bash_logout.
.bash_profileEs el ms importante de los tres. Es ledo y los comandos incluidos en l, ejecutados, cada vez que el usuario entra en el sistema. Cualquier cambio hecho en este archivo no tendrefecto hasta que salgamos y entremos en el sistema de nuevo. Contiene variables de entorno personales y programas de inicio.
.bashrcEs ledo cuando el usuario arranca un subshell, escribiendo por ejemplo bash en la lnea de comandos. Contiene alias personales y funciones.
bash_logoutEs el archivo ledo por bash, cuando salimos del sistema. Podemos definir, por ejemplo que se borren los archivos temporales creados en nuestra ultima sesin o registrar el tiempo que hemos estado utilizando el sistema. Si .bash_logout no existe, ningn comando ser ejecutado a nuestra salida.
Sistemas Operativos III
Scripts Avanzados - Linux 16
16
/etc/issue
El archivo /etc/issue es un archivo de texto plano que permite personalizar la pantalla de entrada al sistema. Se puede usar algunas secuencias de Escape para insertar informacin sobre el sistema.
Todos los cdigos de escape consisten en una barra invertida (\) seguida de una de las letras:
d Inserta la fecha actual.s Inserta el nombre del sistema, el nombre del sistema operativo.l Inserta el nombre de la lnea tty actual.m Inserta el identificador de la arquitectura de la mquina, i486 por ejemplo.n Inserta el nombre de nodo de la mquina, tambin conocido como nombre de mquina (hostname).r Inserta la versin del ncleo, por ejemplo 2.4.16. t Inserta la hora actual, etc
Sistemas Operativos III
Scripts Avanzados - Linux 17
17
/etc/motd
El archivo /etc/motd, messages of to day (mensaje del da) es un archivo de texto que se muestra a todos los usuarios que inicien sesin ese da. Tradicionalmente, es usado por los Administradores de Sistemas como una especie de Boletn para comunicacin con los usuarios.
Sistemas Operativos III
Scripts Avanzados - Linux 18
18
Secuencia de Inicio
/etc/issue
/etc/motd
/etc/profile
/etc/bashrc
/home/usuario/.bashrc
/home/usuario/.bash_profile
Mensaje antes del login
Mensaje despus del login
Sistemas Operativos III
Scripts Avanzados - Linux 19
19
Dilogos en Linux
La programacin en shell, que hemos visto permite una interaccin bsica con el usuario, a travs del comando read.
Sin embargo hay aplicaciones en donde las cuadros de dialogo (como por ejemplo, del tipo Si o No), facilitan la interaccin con el usuario.
HerramientasXdialog y dialog son dos utilidades clsicas fciles de usar que permiten mejorar tus scripts de shell con una interfaz de usuario grfica. Instalacin: En Fedora 3 (CD 2):
rpm -Uvh dialog-version.i386.rpm
Sistemas Operativos III
Scripts Avanzados - Linux 20
20
Ejemplo 1: dialog --title Advertencia --backtitle Linux Script
--msgbox Linux sin competencia 9 40
< OK >
Linux sin competencia
Advertencia
Linux Script
Sintaxis de DialogLa sintaxis para utilizar los dilogos es el siguiente:
dialog --title {title} --backtitle {backtitle} {Box options}
En donde las opciones Box son:--yesno {text} {height} {width}--msgbox {text} {height} {width}--infobox {text} {height} {width}--inputbox {text} {height} {width} [{init}]--textbox {file} {height} {width}--menu {text} {height} {width} {menu} {height} {tag1} item1}...
Sistemas Operativos III
Scripts Avanzados - Linux 21
21
Ejemplo 2:dialog --title Alerta --backtitle Linux Script
--yesno "\nDesea borrar el archivo? 7 60
sel=$? #asigna a sel el valor devuelto por dialog
case $sel in0) echo Se borra el archivo;;1) echo No se borra el archivo;;255) echo Cancelado, presion la tecla [ESCAPE];
esac
Sistemas Operativos III
Scripts Avanzados - Linux 22
22
Ejemplo 2:
< Yes >
Desea borrar el archivo?
Alerta
Linux Script
< No >
Al escoger Yes el programa devuelve el valor de 0.Al escoger No el programa devuelve el valor de 1.Al presionar la tecla ESC el programa devuelve el valor de 255.
Sistemas Operativos III
Scripts Avanzados - Linux 23
23
Ejemplo 3:dialog --title Nombre del usuario" --backtitle "Linux Script
--inputbox Ingresa tu nombre:" 8 60 2>/tmp/input.$$sel=$?na=`cat /tmp/input.$$` #muestra el resultado
case $sel in #evalua la tecla presionada 0) echo "Hola $na" ;;1) echo Ha cancelado la operacin" ;;255) echo Ha presionado la tecla [ESCAPE]" ;;
esac
rm -f /tmp/input.$$ #borra el archivo con el resultado
Sistemas Operativos III
Scripts Avanzados - Linux 24
24
Ejemplo 3:
< OK >
Ingresa tu nombre:Nombre del usuario
Linux Script
< Cancel >
Al escoger OK el programa devuelve el valor de 0.Al escoger Cancel el programa devuelve el valor de 1.Al presionar la tecla ESC el programa devuelve el valor de 255.
Sistemas Operativos III
Scripts Avanzados - Linux 25
25
Ejemplo 4:dialog --backtitle "Linux Script" --title "Men Principal"
--menu Utilizar las flechas" 15 50 3\Date/time Muestra la fecha"\Calendar Muestra el calendario"\Editor Carga el editor vi" 2>/tmp/menuitem.$$
menuitem=`cat /tmp/menuitem.$$` #muestra la opcin seleccionadaopt=$? # asigna a menuitem el resultadocase $menuitem in
Date/time) date;;Calendar) cal;;Editor) vi;;
esac
Sistemas Operativos III
Scripts Avanzados - Linux 26
26
Ejemplo 4:
< OK >
Utilizar las flechas
Men Principal
Linux Script
< Cancel >
Date/timeCalendarEditor
Muestra la fechaMuestra el calendarioCarga el editor vi
Se puede encontrar mayor informacin acerca de este programa en:# man dialog# dialog --help# dialog
Sistemas Operativos III
Scripts Avanzados - Linux 27
27
getopts
while getopts x:y:z opt ; docase "$opt" in
x) echo "$OPTARG";;y) echo "$OPTARG";;z) echo "$OPTARG";;
esacdone
$ demo05 -x uno -y dos -z tres
demo05
$ demo05 -y dos -z tres $ demo05 -y dos -x uno -z tres
Es un comando integrado a Bash.
Es utilizado para verificar los argumentos enviados al script.
Se utiliza acompaado con: while.
Sintaxis:
getopts {cadena_de_opciones} {opt}
Evala cada uno de los argumentos indicados en
cadena_de_opciones y el nombre del argumento es asignado a la
variable opt.
El valor del argumento es asignado a la variable: OPTARG.
Sistemas Operativos III
Scripts Avanzados - Linux 28
28
Enlaces
Los ficheros de inicio de bash: http://www.escomposlinux.org/lfs-es/blfs-es-5.0/postlfs/profile.html
Ejemplo de un archivo bashrc: http://gugs.sindominio.net/repositorio/bashrc
Programacin en Bash y ejemplos: http://www.tldp.org/LDP/abs/html/index.html
Uso de Getopts: http://blackshell.usebox.net/archivo/393.php http://www.mkssoftware.com/docs/man1/getopts.1.asp
Sobre Dialog: http://hightek.org/dialog/ http://hightek.org/dialog/manual-0.7.html
Sobre Xdialog: http://xdialog.dyns.net/ http://es.tldp.org/LinuxFocus/pub/mirror/LinuxFocus/Castellano/November20
02/article267.shtml
Sistemas Operativos III
Scripts Avanzados - Linux 29
29
Preguntas
1. Qu comando permite extraer las ultimas lneas de un archivo?
2. En que archivo debera el administrador incluir un scriptpara que se cargue en el arranque del sistema?
3. Qu archivo permite personalizar la pantalla de entrada al sistema?
Sistemas Operativos III
Scripts Avanzados - Linux 30
30
Respuestas
1. tail.2. /etc/rc.d/rc.local.3. /etc/issue.