Vous êtes sur la page 1sur 23

SHELL SCRIPTING

05/08/2013

Sistemas Operativos: Proyecto Final


En este reporte contiene la descripcin acerca del proyecto final para la materia de sistemas operativos as como conceptos adicionales que se nos fueron requeridos. Mora Ruiz Alejandro. Pantoja Snchez Emmanuel. Sols Granados Sal. Tamayo De La Torre Roberto Eduardo

Shell scripting

Shell scripting
S I S T E M A S O P E RAT I VO S : P ROY E CT O F I N A L
Introduccin. Un Shell Script o un Bash Script no es ms que un archivo de texto-plano que contiene comandos del Shell. Pueden ser ejecutados escribiendo su nombre a una Shell, o poniendo su nombre en otro script de Shell, bsicamente es como si se tratara de programar un ejecutable (.exe) de Windows, solo que en este caso es de Linux (.sh). Con el fin de terminar la materia de 6to cuatrimestre, sistemas operativos, se realiz este proyecto final, que es bsicamente sobre el Shell scripting, se nos pidi realizar las dos ltimas practicas utilizando base de datos y a su vez escoger entre ZENITY y WHIPTAIL para realizarlo. En este reporte se encontrara con una investigacin acerca de estos dos, as como las prcticas realizadas.

Pgina 1

Shell scripting

Zenity. Zenity, Zen Dialogs, es un software que permite generar dilogos simples empleando la biblioteca de GTK+, ideado como sustituto de gdialog para GNOME2 y dialog en consola. Puede usar Zenity para interactuar grficamente con el usuario con mens o cajas de dilogos ya pre configurado y combinable entre s. Zenity es una herramienta de GNOME que se puede descargar, pero est en los repositorios de algunas distribuciones y en otras como Ubuntu ya est instalado por defecto Soporta diferentes tipos de dilogos Dialogo de calendario. Dialogo de contrasea. Dialogo de escala. Dialogo de formularios. Dialogo de lista. Dialogo de mensaje. Dialogo de progreso. Dialogo de seleccin de archivos. Dialogo de seleccin de color. Dialogo para la entrada de texto. Dialogo para el texto de informacin. Icono de notificacin.

Dialogo de calendario. Para utilizar este dialogo se usa la opcin --calendar, zenity devuelve la fecha seleccionada a la salida estndar si no se especifica lnea de comando, el dialogo utiliza la fecha actual. El dialogo de calendario soporta varias opciones: --text=texto: Especifica el texto que se muestra en el dilogo del calendario. --day=da: Especifica el da que se selecciona en el dilogo del calendario. Da debe ser un nmero entre 1 y 31 ambos incluidos. --month=mes: Especifica el mes que se selecciona en el dilogo del calendario. Mes debe ser un nmero entre 1 y 12 ambos incluidos. --year=ao: Especifica el ao que se selecciona en el dilogo del calendario. --date-format=formato: Especifica el formato que se devuelve desde el dilogo de calendario despus de la seleccin de la fecha. El formato predeterminado depende de configuracin regional. Formato debe ser un formato que sea compatible con la funcin strftime, por ejemplo %A %d/%m/%y.

Pgina 2

Shell scripting

Dialogo de contrasea. Se utiliza la opcin --password para crear un dilogo de contrasea. El dilogo de contrasea soporta la siguiente opcin:

--username: Mostrar el campo de nombre de usuario.

Dialogo de escala. Se utiliza la opcin --scale para crear un dilogo de escala. El dilogo de escala soporta las siguientes opciones:

--text=TEXTO: Establezca el texto del dilogo. (Predeterminado: Ajustar el valor de la escala). --value=VALOR: Establezca el valor inicial. (Predeterminado: 0) Debe especificar un valor que est entre los valores mnimo y mximo. --min-value=VALOR: Establezca el valor mnimo. (Predeterminado: 0). --max-value=VALOR: Establezca el valor mximo. (Predeterminado: 100). --step=VALOR: Establezca el tamao del paso. (Predeterminado: 1). --print-partial: Imprimir el valor a la salida estndar cuando se cambie el valor. --hide-value: Ocultar valor en un dilogo.

Dialogo de formularios. Se usa la opcin --forms para crear un dilogo de formularios.

Pgina 3

Shell scripting

El dilogo de formularios soporta las siguientes opciones:

--add-entry=nombre_del_campo: Aadir una entrada nueva en el dilogo de formularios. --add-password=nombre_del_campo: Aadir una contrasea nueva en el dilogo de formularios. (Ocultar el texto). --add-calendar=nombre_del_campo: Aadir un calendario nuevo en el dilogo de formularios. --text=TEXTO: Establezca el texto del dilogo. --separator=SEPARADOR: Establecer el carcter separador. (Predeterminado: |). --forms-date-format=PATRN: Establecer el formato de la fecha que se devuelve. El formato predeterminado depende de su configuracin regional. formato debe ser un formato que sea compatible con la funcin strftime, por ejemplo %A %d/%m/%y.

Dialogo de lista.

Use la opcin --list para crear un dilogo de lista. Zenity devuelve las entradas en la primera columna de texto de las filas seleccionadas a la salida estndar. Los datos para el dilogo deben especificarse columna por columna, fila por fila. Puede proporcionar datos al dilogo a travs de la entrada estndar. Cada entrada se debe separar por un carcter de lnea nueva. Se utiliza la opcin --checklist o --radiolist, cada fila debe comenzar con TRUE o FALSE.

El dilogo de lista soporta las siguientes opciones:

Pgina 4

Shell scripting

--column=columna: Especifica el encabezado de la columna mostrada en el dilogo de lista. Debe especificar una opcin --column por cada columna que quiera mostrar en el dilogo. --checklist: Especifica que la primera columna en el dilogo de lista contiene casillas de marcado. --radiolist: Especifica que la primera columna en el dilogo de lista contiene casillas de opcin. --editable: Permite editar los elementos mostrados. --separator=separador: Especfica qu cadena de caracteres se utilizar cuando el dilogo de lista devuelva las entradas seleccionadas. --print-column=columna: Especifica qu columna debera imprimirse hasta la seleccin. La columna predeterminada es '1', 'ALL' puede usarse para imprimir todas las columnas.

Dialogo de progreso. Se utiliza la opcin --progress para crear un dilogo de progreso. Zenity lee lnea por lnea los datos desde la entrada estndar. Si una lnea se antepone con #, el texto se actualiza con el texto en esa lnea. Si una lnea contiene solamente un nmero, el porcentaje se actualiza con ese nmero. El dilogo de progreso soporta las siguientes opciones: --text=texto: Especifica el texto que se muestra en el dilogo de progreso. --percentage=porcentaje: Especifica el porcentaje inicial que se establece en el dilogo de progreso. --auto-close: Cierra el dilogo de progreso cuando se ha alcanzado 100%. --pulsate: Especifica que la barra de progreso pulse hasta que se lea un carcter EOF desde la entrada estndar.

Dialogo de seleccin de archivos. Se utiliza la opcin --file-selection para crear un dilogo de seleccin de archivos. Zenity devuelve los archivos o carpetas seleccionadas a la salida estndar. El modo predefinido de un dilogo de seleccin de archivo es abrir.

Pgina 5

Shell scripting

El dilogo de seleccin de archivo soporta las siguientes opciones:

--filename=nombre_de_archivo: Especifica el archivo o carpeta que se selecciona en el dilogo de seleccin de archivo cuando el dilogo se muestra por primera vez. --multiple: Permite seleccionar archivos mltiples en el dilogo de seleccin. --directory: Permite solamente la seleccin de carpetas en el dilogo de seleccin de archivos. --save: Establece el dilogo de seleccin de archivo en el modo guardar. --separator=separador: Especifica la cadena que se usar para dividir la lista de nombres de archivo devuelta.

Dialogo de seleccin de color. Se usa la opcin --color-selection para crear un dilogo de seleccin de color. El dilogo de seleccin de color soporta las siguientes opciones: --color=VALOR: Establezca el color inicial ()ej: #FF0000).

Pgina 6

Shell scripting

--show-palette: Mostrar la paleta.

Dialogo para la entrada de texto. Se usa la opcin -entry para crear un dilogo de entrada de texto. Zenity devuelve a la salida estndar el contenido del texto introducido. El dilogo de entrada de texto soporta las siguientes opciones: --text=texto: Especifica el texto que se muestra en el dilogo de entrada de texto. --entry-text=texto: Especifica el texto que se muestra en el campo de entrada del dilogo de entrada. --hide-text: Oculta el texto en el campo de entrada del dilogo de entrada de texto

. Dialogo para el texto de informacin. Se utiliza la opcin --text-info para crear un dilogo de texto de informacin. El dilogo de texto de informacin soporta las siguientes opciones:

Pgina 7

Shell scripting

--filename=nombre_de_archivo: Especifica un archivo que se carga en el dilogo de texto de informacin. --editable: Permite que el texto mostrado sea editado. El texto editado se devuelve por la salida estndar cuando el dilogo se cierra. --font=TIPOGRAFA: Especifica la tipografa del texto. --checkbox=TEXTO: Activar una casilla para usarla como He ledo y acepto los trminos. --html: Activar el soporte de HTML. --url=URL: Establecer un URL en vez de un archivo. Slo funciona si usa la opcin --html.

Icono de notificacin. Use la opcin --notification para crear un icono de notificacin. --text=texto: Especifica el texto que se mostrara en el rea de la notificacin.

Dialogo de mensaje. Para cada tipo, se utiliza la opcin --text para especificar el texto que se muestra en el dilogo.

Pgina 8

Shell scripting

Use la opcin --warning para crear un dilogo de advertencia.

Use la opcin --error para crear un dilogo de error.

Use la opcin --info para crear un dilogo de informacin.

Use la opcin --question para crear un dilogo de pregunta.

Pgina 9

Shell scripting

Whiptail Es un programa que permitir presentar una serie de preguntas o mensajes en pantalla utilizando los cuadros de dilogo desde un script de shell. En la actualidad, se aplican estos tipos de cuadros de dilogo: yes/no text height width- (Texto yes/no) Aparecer un yes/no cuadro de dilogo si la altura de filas tamao por columnas de ancho. La cadena especificada por el texto se muestra en el cuadro de dilogo. Si esta cadena es demasiado larga para ser instalado en una lnea, se dividir automticamente en varias lneas en los lugares apropiados. La cadena de texto puede contener tambin la sub-cadena "\n" o caracteres de nueva lnea `\n' para controlar los saltos de lnea explcitamente. Este cuadro de dilogo sirve para hacer preguntas que requieren que el usuario responda s o no. El cuadro de dilogo tiene un botn Yes y un botn No, en la que el usuario puede cambiar entre presionando la tecla TAB. Ejemplo: whiptail - ttulo "Ejemplo de dilogo" - yesno "Este es un ejemplo de un s / no cuadro." 8 78 exitstatus = $? if [$ exitstatus = 0] y luego echo "El usuario selecciona S". ms echo "No. seleccionado Usuario" fi echo "(estado de salida fue de $ exitstatus)" Aparecer un cuadro de dilogo con dos botones etiquetados S y No. infobox text height width Un cuadro de informacin es bsicamente un cuadro de mensaje. Sin embargo, en este caso, whiptail terminar inmediatamente despus de visualizar el mensaje para el usuario. La pantalla no se borra cuando sale whiptail, de modo que el mensaje permanecer en la pantalla hasta que la llamada de script de shell lo libere ms tarde. Esto es til cuando se quiere informar al usuario de que algunas operaciones que se llevan a cabo pueden requerir de algn tiempo para terminar. Ejemplo: whiptail --title "Example Dialog" --infobox "This is an example of an info box." 8 78 En el ejemplo anterior, el valor de - ttulo se muestra en la parte superior del cuadro de dilogo. El primer argumento - infobox es el texto del cuadro de dilogo que se muestra debajo del ttulo. Los siguientes dos argumentos especifican la altura y el ancho del cuadro de dilogo. La anchura se establece en 78 como la mayora de los terminales sern de al menos 80 columnas o ms. msgbox text height width Un cuadro de mensaje es muy similar a un cuadro yes/no. La nica diferencia entre un cuadro de mensaje y un cuadro yes/no es que un cuadro de mensaje tiene un solo botn OK. Puede utilizar este cuadro de dilogo

Pgina 10

Shell scripting

para mostrar cualquier mensaje que usted desee. Despus de leer el mensaje, el usuario puede presionar la tecla ENTER para que whiptail salga y la llamada al script del shell puede continuar su operacin. Ejemplo: El uso es similar al cuadro de informacin: whiptail - ttulo "Ejemplo de dilogo" - msgbox ". Este es un ejemplo de un cuadro de mensaje que usted debe golpear en Aceptar para continuar." 8 78 inputbox text height width [init] Un cuadro de entrada es til cuando se desea hacer preguntas que requieren que el usuario introduzca una cadena como la respuesta. Si se suministra init se utiliza para inicializar la cadena de entrada. Cuando se ingresa de la cadena, la tecla RETROCESO se puede utilizar para corregir los errores de escritura. Si la cadena de entrada es ms larga de lo que que se puede insertar en el cuadro de dilogo, el campo de entrada se desplaza. A la salida, la cadena de entrada se imprimir en stderr. Ejemplo: INIT = Azul COLOR = $ (whiptail - caja de texto "Cul es tu color favorito?" 8 78 $ INIT - ttulo "Ejemplo Dialog" 3> & 1 1> & 2 2> y 3) exitstatus = $? if [$ exitstatus = 0] y luego echo "El usuario selecciona Aceptar y entr" $ COLOR ms echo "El usuario selecciona Cancelar." fi echo "(estado de salida fue de $ exitstatus)" passwordbox text height width [init] Un cuadro de contrasea es similar a un cuadro de entrada, excepto el texto que el usuario escribe no se muestra. Esto es til cuando se pida confirmacin contraseas u otra informacin delicada. Tenga en cuenta que si pasa algo en "init", ser visible en la tabla de procesos del sistema. Adems, es muy confuso para el usuario que le proporcione una contrasea por defecto que no pueden ver. Por estas razones, el uso de "init" es sumamente desalentador. textbox file height width Un cuadro de texto le permite visualizar el contenido de un archivo de texto en un cuadro de dilogo. Es como un sencillo visor de archivos de texto. El usuario puede desplazarse por el archivo utilizando las teclas ARRIBA/ABAJO, RePag/AvPag Y INICIO/FIN disponibles en la mayora de los teclados. Si las lneas son demasiado largas para que se muestre en el cuadro, las teclas de izquierda / derecha se puede utilizar para desplazarse por la regin de texto horizontalmente. Para mayor comodidad, tambin se proporcionan funciones de avance y retroceso de bsqueda. menu text height width menu-height [ tag item ] ...

Pgina 11

Shell scripting

Como su nombre lo indica, un cuadro de men es un cuadro de dilogo que se puede utilizar para presentar una lista de opciones en la forma de un men para que el usuario elija. Cada entrada del men se compone de una serie de etiquetas y una cadena de material. La etiqueta proporciona la entrada de un nombre para distinguirlo de las otras entradas en el men. El artculo es una breve descripcin de la opcin que representa la entrada. El usuario puede moverse entre las entradas del men pulsando las teclas ARRIBA/ABAJO, la primera letra de la etiqueta como una tecla de acceso rpido, o las teclas numricas 19. Hay entradas de men de altura se muestran en el men de una manera, pero el men se desplazar si hay ms entradas que eso. Cuando WHIPTAIL sale, la etiqueta de la entrada del men elegido se imprimir en stderr. Ejemplo: whiptail - ttulo "Ejemplo de Men" - el men "Seleccione una opcin" 20 78 16 \ "<- Back" "Volver al men principal". \ "Agregar usuario" "Aadir un usuario al sistema". \ "Modificar usuario" "Modificar un usuario existente". \ "Lista de usuarios" "lista de todos los usuarios en el sistema." \ "Agregar grupo" "Aadir un grupo de usuarios para el sistema." \ "Modificar grupo" "Modificar un grupo y su lista de miembros." \ "Grupos", "Lista de todos los grupos en el sistema".

Los valores dados a - men son: El texto que describe el men ("Seleccione una opcin") La altura del cuadro de dilogo (20) La anchura del cuadro de dilogo (78) La altura de la lista del men (16)

El resto de los valores es una lista de opciones de men en la opcin etiqueta de formato, donde la etiqueta es el nombre de la opcin que se imprime en stderr cuando se selecciona, y el tema es la descripcin de la opcin de men. checklist text height width list-height [ tag item status ] ... Un cuadro de lista de verificacin es similar a un cuadro de men en el que hay varias entradas que se presentan en la forma de un men. En lugar de elegir una entrada entre las entradas, cada entrada puede ser activada o desactivada por el usuario. El primer estado encendido / apagado de cada entrada se especifica por el estado. A la salida, se imprimir una lista de las cadenas de etiquetas de las entradas que se activan en stderr. Ejemplo:
whiptail - ttulo de "Lista de verificacin ejemplo" - lista de control \ "Elegir permisos del usuario" 20 78 16 \ "NET_OUTBOUND" "Permitir conexiones a otros hosts" ON \ "NET_INBOUND" "Permitir conexiones desde otros hosts" OFF \ "LOCAL_MOUNT" "permitir el montaje de los dispositivos locales" OFF \ "REMOTE_MOUNT" "permitir el montaje de los dispositivos remotos" OFF

Pgina 12

Shell scripting

Al confirmar su seleccin, una lista de las opciones que se imprime en stderr. radiolist text height width list-height [ tag item status ] ... Una caja radiolist es similar a un cuadro de men. La nica diferencia es que se puede indicar que la entrada est seleccionada, estableciendo su estado activado. gauge text height width percent Un cuadro de medidor muestra un medidor en la parte inferior de la caja. El medidor indica el porcentaje. Nuevos porcentajes se leen de la entrada estndar, un entero por lnea. El contador se actualiza para reflejar cada nuevo porcentaje. Si stdin es XXX, entonces las lneas subsiguientes hasta otro XXX son usados para un nuevo sistema. Las salidas de calibre cuando se alcanza EOF en stdin.

Ejemplo:
#!/bin/bash { for ((i = 0 ; i <= 100 ; i+=30)); do sleep 1 echo $i done } | whiptail --gauge "Please wait" 5 50 0

Pgina 13

Shell scripting

MantenimientoTXT. Esta prctica la realismos en clase y todo fue realizado desde la terminal de Linux, la diferencia ahora es que se le dio una interfaz grfica utilizando zenity. En esta prctica realizamos una pequea base de datos llamada UPQ con mysql, en la cual ingresbamos la clave, nombre y direccin de un alumno, podiendo modificarla desde un men de opciones. Cdigo sin zenity.
#!/bin/bash function altas() { clear echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@ echo @@@ ALTAS DE ESTUDIANTES @@@ echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@ echo echo CAPTURA LA CLAVE: read clave echo DA EL NOMBRE read NOMBRE echo DA LA DIRECCION read DIRECCION mysql -u root -p <<EOF 2> /dev/null use UPQ; INSERT INTO TEstudiante VALUES($clave, "$NOMBRE","$DIRECCION"); EOF [ $? -eq 0 ] && echo Alta realizada || echo ya exist-a el estudiante sleep 2 } function bajas() { clear echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@ echo @@@ BAJAS DE ESTUDIANTES @@ echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@ echo echo CAPTURA LA CLAVE: read clave para_borrar=`mysql -u root -p UPQ <<EOF SELECT nombre FROM TEstudiante where clave= $clave; EOF` if [ "${para_borrar}" != "" ] then echo $para_borrar echo "Se da de baja (S/N)?" read op if [ "${op}" = S ] then mysql -u root -p UPQ <<EOF DELETE FROM TEstudiante where clave= $clave; EOF echo Se dio de baja fi else echo No existe el estudiante fi sleep 2 } function modificaciones() { clear echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@ echo @@@ MODIFICACIONES DE ESTUDIANTES @@ echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@ echo echo CAPTURA LA CLAVE: read clave nombre=`mysql -u root -p UPQ <<EOF | tail -n +2 SELECT nombre FROM TEstudiante where clave= $clave; EOF` direccion=`mysql -u root -p UPQ <<EOF | tail -n +2 SELECT direccion FROM TEstudiante where clave= $clave; EOF` if [ "${nombre}" != "" ] then

Pgina 14

Shell scripting

echo echo CAPTURA LA CLAVE: read clave nombre=`mysql -u root -p UPQ <<EOF | tail -n +2 SELECT nombre FROM TEstudiante where clave= $clave; EOF` direccion=`mysql -u root -p UPQ <<EOF | tail -n +2 SELECT direccion FROM TEstudiante where clave= $clave; EOF` if [ "${nombre}" != "" ] then echo NOMBRE: $nombre echo DIRECCION: $direccion echo "Se modifica (S/N)?" read op if [ "${op}" = S ] then echo CAPTURA EL NOMBRE: read name echo CAPTURA LA DIRECCION read direction mysql -u root -p UPQ <<EOF UPDATE TEstudiante SET nombre="$name", direccion="$direction" where clave= $clave; EOF echo Se Modifico sleep 1 fi else echo No existe el estudiante sleep 1 fi } function consultas() { clear echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ echo @@@ CONSULTAS DE ESTUDIANTES @@ echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ echo echo CAPTURA LA CLAVE: read clave nombre=`mysql -u root -p UPQ <<EOF | tail -n +2 SELECT nombre FROM TEstudiante where clave= $clave; EOF` direccion=`mysql -u root -p UPQ <<EOF | tail -n +2 SELECT direccion FROM TEstudiante where clave= $clave; EOF` if [ "${nombre}" != "" ] then echo NOMBRE: $nombre echo DIRECCION: $direccion echo Enter para continuar ... read op else echo No existe el estudiante sleep 1 fi } # PROGRAMA PRINCIPAL while true ; do clear clave=0 nb_completo="" direccion="" echo "**************************************************" echo "**** MANTENIMIENTO DE ARCHIVO DE ESTUDIANTES ****" echo "**** MENU DE OPCIONES ****" echo "**************************************************"

Pgina 15

Shell scripting

# PROGRAMA PRINCIPAL while true ; do clear clave=0 nb_completo="" direccion="" echo "**************************************************" echo "**** MANTENIMIENTO DE ARCHIVO DE ESTUDIANTES ****" echo "**** MENU DE OPCIONES ****" echo "**************************************************" echo echo "1) Altas" echo "2) Bajas" echo "3) Modificaciones" echo "4) Consultas" echo "5) Salir" read accion case $accion in 1) altas ;; 2) bajas ;; 3) modificaciones ;; 4) consultas ;; *) exit 1 ;; esac done

Como se puede apreciar en el cdigo, es un programa que se ejecuta desde la terminal de Linux. Ahora se mostrara el cdigo del proyecto con zenity.

Pgina 16

#======================================================= #Universidad Politcnica de Quertaro #Ingeniera en Telemtica T-601 #Sistemas Operativos # # #Mora Ruiz Alejandro #Tamayo de la Torre Eduardo #Solis Granados Sal #Pantoja Sanchez Emmanuel #======================================================= #!/bin/bash # Funcin para insertar un nuevo registro a SQL function altas() { clave=$(zenity --entry --title "ALTAS" --text "Capture la clave") NOMBRE=$(zenity --entry --text "Capture el nombre") DIRECCION=$(zenity --entry --text "Capture la direccion") mysql -u root -p <<EOF 2> /dev/null use UPQ; INSERT INTO TEstudiante VALUES($clave, "$NOMBRE","$DIRECCION"); EOF [ $? -eq 0 ] && zenity --title "Mensaje" --info --text "Alta Realizada!!!!!!" || zenity --title "Error" --info --text "Ya existia el estudiante" } #Funcin para eliminar algun registro de SQL function bajas() { text="Introduce el ID" clave=$(zenity --entry --hide-text --text "$text") para_borrar=`mysql -u root -p UPQ <<EOF SELECT nombre FROM TEstudiante where clave= $clave; EOF` if [ "${para_borrar}" != "" ] then echo $para_borrar

Shell scripting

#Funcin para eliminar algun registro de SQL function bajas() { text="Introduce el ID" clave=$(zenity --entry --hide-text --text "$text") para_borrar=`mysql -u root -p UPQ <<EOF SELECT nombre FROM TEstudiante where clave= $clave; EOF` if [ "${para_borrar}" != "" ] then echo $para_borrar accion=`zenity --question` if [ $? == 0 ];then mysql -u root -p UPQ <<EOF DELETE FROM TEstudiante where clave= $clave; EOF zenity --info --text="Se dio de baja" else zenity --info --text="No existe el estudiante" fi fi } #Funcin para modificar algun registro de SQL function modificaciones() { text="Introduce el ID" clave=$(zenity --entry --hide-text --text "$text") nombre=`mysql -u root -p UPQ <<EOF | tail -n +2 SELECT nombre FROM TEstudiante where clave= $clave; EOF` direccion=`mysql -u root -p UPQ <<EOF | tail -n +2 SELECT direccion FROM TEstudiante where clave= $clave; EOF` if [ "${nombre}" != "" ] then echo NOMBRE: $nombre echo DIRECCION: $direccion echo "Se modifica (S/N)?" read op if [ "${op}" = S ] then echo CAPTURA EL NOMBRE: read name echo CAPTURA LA DIRECCION read direction mysql -u root -p UPQ <<EOF UPDATE TEstudiante SET nombre="$name", direccion="$direction" where clave= $clave; EOF echo Se Modifico sleep 1 fi else echo No existe el estudiante sleep 1 fi } #Funcin para mostrar algn registro de SQL function consultas() { text="Introduce el ID" clave=$(zenity --entry --hide-text --text "$text") nombre=`mysql -u root -p UPQ <<EOF | tail -n +2 SELECT nombre FROM TEstudiante where clave= $clave; EOF` direccion=`mysql -u root -p UPQ <<EOF | tail -n +2 SELECT direccion FROM TEstudiante where clave= $clave; EOF` if [ "${nombre}" != "" ] then zenity --list --column="nombre" "$nombre" -column="direccion" "$direccion" --width=700 --height=700 else zenity --error --text="no existe el alumno" fi } function crear(){ accion=`zenity --question` if [ $? == 0 ];then mysql -u root -p <<EOF CREATE DATABASE UPQ ; USE UPQ

Pgina 17

Shell scripting
zenity --error --text="no existe el alumno" fi } function crear(){ accion=`zenity --question` if [ $? == 0 ];then mysql -u root -p <<EOF CREATE DATABASE UPQ ; USE UPQ CREATE TABLE TEstudiante (clave int auto_increment primary key, nombre varchar(100), direccion varchar(100)); EOF fi } # PROGRAMA PRINCIPAL clave=0 nb_completo="" direccion="" title="Mantenimiento de Archivos de Estudiantes" prompt="Menu de Opciones:" options=("Alta" "Baja" "Modificaciones" "Consultas" "Crear la base de datos" ) while opt=$(zenity --title="$title" --text="$prompt" --list \--column="Options" "${options[@]}" --width=700 --height=700 ) ;do case "$opt" in "${options[0]}" ) altas;; "${options[1]}" ) bajas;; "${options[2]}" ) modificaciones;; "${options[3]}" ) consultas;; "${options[4]}" ) crear;; *) exit 1;; esac done

Adems de que reduce en varias lneas el cdigo, cuando se ejecuta tiene un aspecto ms agradable.

Men Principal. Aqu se puede observar las principales opciones del programa.

Pgina 18

Shell scripting

Para dar de alta un alumno escogemos Alta del men principal, despus se nos aparecer otras ventanas, donde tenemos que ingresar los datos del alumno, Clave, Nombre y direccin. Al hacer la alta aparece un mensaje de xito.

Para realizar una baja, seleccionamos Baja, y nos pedir que ingresemos la clave del alumno, despus nos preguntara si estamos seguros.

Para hacer una consulta, seleccionamos Consulta, nos pedir la clave y despus de ingresarla nos aparecer el resultado.

VideoBase. Al igual que la practica anterior, esta fue realizada primeramente en terminal de Linux tambin utilizamos zenity para darle una interfaz grfica. Este programa guarda todo en un archivo de texto.

Men principal Es un men sencillo que contiene 3 opciones, agregar pelcula, consultar y salir.

Pgina 19

Shell scripting

Para dar de alta una pelcula, seleccionamos Alta y nos pedir el nombre del director, nombre de pelcula, ao y productora.

Para hacer una consulta, seleccionamos Consulta y nos da varias opciones para realizarla, por director, ao, nombre de pelcula, o productora.

Cdigo
#======================================================= #Universidad Politcnica de Quertaro #Ingeniera en Telemtica T-601 #Sistemas Operativos # # #Mora Ruiz Alejandro #Tamayo de la Torre Eduardo #Solis Granados Sal #Pantoja Sanchez Emanuel #======================================================= #/bin/bash function altas() { director=$(zenity --entry --title "ALTAS" --text "Escriba el Director de la pelicula") pelicula=$(zenity --entry --text "Escriba el titulo de la pelicula") ano=$(zenity --entry --text "Escriba el ao de produccin") productora=$(zenity --entry --text "Escriba la productora") echo "$director $pelicula $ano $productora" >> base2.txt } function consultas(){ title="ARCHIVO DE TEXTO DE PELICULAS " prompt="Menu de Opciones:" options=("Busqueda por director" "Busqueda por productora" "Busqueda por titulo" "Busqueda por ao" ) op=$(zenity --title="$title" --text="$prompt" --list \--column="Options" "${options[@]}" --width=700 --height=700 ) case "$op" in "${options[0]}" ) director=$(zenity --entry --hide-text --text "Nombre del director") grep "$director" base2.txt | zenity --text-info --width=700 --height=700 ;; "${options[1]}" ) productora=$(zenity --entry --hide-text --text "Cul es la productora?") grep "$productora" base2.txt | zenity --text-info --

Pgina 20

Shell scripting
director=$(zenity --entry --hide-text --text "Nombre del director") grep "$director" base2.txt | zenity --text-info --width=700 --height=700 ;; "${options[1]}" ) productora=$(zenity --entry --hide-text --text "Cul es la productora?") grep "$productora" base2.txt | zenity --text-info -width=700 --height=700 ;; "${options[2]}" ) titulo=$(zenity --entry --hide-text --text "Cul es el titulo de la pelicula?") grep "$pelicula" base2.txt | zenity --text-info --width=700 --height=700 ;; "${options[3]}" ) anio=$(zenity --entry --hide-text --text "En qu ao se produjo la pelicula?") grep "$ano" base2.txt | zenity --text-info --width=700 -height=700 ;; #./peliculas.sh esac } #PROGRAMA PRINCIPAL clave=0 nb_completo="" title="ARCHIVO DE TEXTO DE PELICULAS " prompt="Menu de Opciones:" options=("Alta" "Consulta" "Salir") while opt=$(zenity --title="$title" --text="$prompt" --list \--column="Options" "${options[@]}" --width=700 --height=700 ) ;do case "$opt" in "${options[0]}" ) altas;; "${options[1]}" ) consultas;; "${options[2]}" ) exit 1;; esac done

Pgina 21

Shell scripting

Bibliografas. http://www.freetux.com.ar/que-es-zenity/ https://help.gnome.org/users/zenity/stable/index.html.es http://linuxzone.es/2012/06/22/tutorial-dale-vida-a-tus-scripts-con-zenity/ https://help.gnome.org/users/zenity/stable/calendar.html.es https://help.gnome.org/users/zenity/stable/calendar.html.es https://help.gnome.org/users/zenity/stable/password.html.es https://help.gnome.org/users/zenity/stable/scale.html.es https://help.gnome.org/users/zenity/stable/forms.html.es https://help.gnome.org/users/zenity/stable/list.html.es https://help.gnome.org/users/zenity/stable/progress.html.es https://help.gnome.org/users/zenity/stable/color-selection.html.es https://help.gnome.org/users/zenity/stable/text.html.es https://help.gnome.org/users/zenity/stable/notification.html.es http://lab46.corning-cc.edu/man/ http://linux.math.tifr.res.in/manuals/ http://linux.die.net/man/ http://en.wikibooks.org/

Pgina 22

Vous aimerez peut-être aussi