Instituto Tecnológico de Las Américas (ITLA) Sistema Operativos 3 Luis Enmanuel Carpio Domínguez Matrícula: 2012-1206 How to #6: Creación de Script Shell es el intérprete de comandos del sistema. Es una interfaz de texto de altas prestaciones, que sirve fundamentalmente para tres cosas: administrar el sistema operativo, lanzar aplicaciones (e interactuar con ellas) y como entorno de programación. Gnu/Linux se administra editando ficheros configuración. Como norma general, se encuentran en: /etc, dentro de direcciones específicos para cada aplicación. Por ejemplo, Lilo (Linux Loader) se configura editando el fichero: /etc/lilo/lilo.conf. Los programas, se ejecutan escribiendo el nombre del ejecutable, si este se encuentra en el path (ruta por defecto para los mismos, normalmente: /usr/bin) o escribiendo el nombre del ejecutable precedido por: ./, desde el directorio donde se encuentren. Todo esto, es bien conocido por cualquier usuario de Shell. No tan conocidas son sus capacidades como entorno de programación. Los programas de Shell no necesitan compilarse. La Shell los interpreta linea a linea. Se les suele conocer como Shells Scripts y pueden ser desde sencillas órdenes hasta complejas series de instrucciones para el arranque del propio sistema operativo. Shell no es parte del núcleo del sistema, pero utiliza el núcleo del sistema para ejecutar programas, crear archivos, etc. Varios shell disponibles con Linux, son: BASH (Bourne-Again Shell), CSH (C Shell), KSH (Korn Shell) y TCSH. Qué es un Shell Script Un Script es un archivo de texto, que contiene una serie de comandos para shell, que el sistema ejecuta ordenadamente, de arriba abajo. Para editarlos, tan solo hace falta un editor de textos, como Emacs, o Vi. Se guardan con extensión: .sh y se ejecutan desde la Shell mediante el comando: source nombre de script.sh. Los scripts, se comportan de igual manera que los comandos de la shell. ¿Cómo Funciona un Script en Linux? La Shell lee la entrada estándar de la terminal, y manda la salida estándar y los errores estándar a la terminal al menos que se le haya dicho que lo mande a otro lugar. La shell es de línea orientada, no procesa los comandos hasta que pulse <Enter> para indicar el final de una línea. Usted puede corregir lo que ha escrito mientras digita. Diferentes shell proporcionan diferentes instalaciones para la edición de sus comandos, pero por lo general reconocen <BKSP> o <Supr> como la pulsación de tecla para borrar los caracteres anteriores. Cuando se presiona < Enter >, el shell interpreta la línea que ha introducido, antes de ejecutar los comandos en esa línea. Los pasos que se ejecuta a través son los siguientes: La shell se divide la línea en fichas. Una ficha es un comando, variable, u otro símbolo reconocido por la shell. Se continúa la construcción de una secuencia de ficha, hasta que llega a una palabra reservada (un comando de shell interno que regula el flujo de control de un script de shell), nombre de la función, o el operador (un símbolo que denota una pipa, una condición lógica, un separador de comandos, o alguna otra operación que no puede llevarse a cabo hasta que se evaluó el comando anterior). La Shell organiza las fichas en tres categorías: I / O redirección; comandos que determinan la entrada o salida de un programa y a donde se dirigen. Por ejemplo, en la siguiente línea de comandos, el texto ``> listfile''se interpreta como una redirección de la salida, que luego se aplica el comando anterior: > Ls-al listfile Asignación de variables, la shell puede reconocer los comandos que asignan un valor a una variable. Varios comandos, otras fichas son revisados para ver si son alias. La primera palabra está revisada. Si se trata de un alias, se sustituye por el significado original del alias, si no es un alias, o si es seguido por un espacio en blanco antes de la siguiente palabra, el proceso de comprobación de alias se repite hasta que ya no quedan más palabras (o hasta que un alias se ha detectado que no es seguido por un espacio). Pude ser que lo comando hayan sido ejecutados, ya sea como comandos de la shell interno (que hacen que el propio shell tome alguna acción) o, si no son comandos internos, como los programas externos (si la shell puede localizar un archivo ejecutable de ese nombre). ¿Cómo los identifica el sistema? Los archivos script suelen ser identificados por el sistema a través de uno de los siguientes encabezamientos en el contenido del archivo, conocido como shebang: #!/bin/bash ; #!/bin/ksh ; #!/bin/csh Aunque en entornos UNIX la mayoría de los scripts son identificados por dicho encabezamiento, también pueden ser identificados a través de la extensión ".sh", siendo ésta quizá menos importante que el encabezamiento, ya que casi todos los sistemas no necesitan dicha extensión para ejecutar el script, por lo tanto, esta suele ser añadida por tradición, o más bien, es útil para que el usuario pueda identificar estos archivos a través de una interfaz de línea de comandos sin necesidad de abrirlo. Difieren de los programas de aplicación, debido a que los últimos son más complejos; además, los scripts son más bien un programa que le da instrucciones a otros más avanzados. ¿Cómo ejecutar un script? Una vez guardado el archivo con el nombre deseado, tenemos varias formas de ejecutarlos: Ejecutar el comando source fichero. En esta forma de ejecutarlo no tenemos que darle permiso de ejecutar. El cual carga el fichero en la memoria del Bash y lo ejecuta. La segunda forma, a diferencia del anterior no implica darle permiso de ejecución al fichero, esto podemos hacerlo con el comando chmod+X +nombre de fichero. Poniéndole este permiso, podremos ejecutarlo siempre y cuando este en algunos de los directorios indicados en la variables de entorno PATH. Luego escribimos sh y el nombre del fichero. Donde sh es la orden encargada de ejecutar el script. Otra forma es con el comando bash seguido del Script. Para que este comando tenga efecto debemos estar en el directorio donde se encuentra el script. Crear un Script para hacer una Calculador Existen muchas formas para hacer un Script como calculadora. En este How To vamos a aprender dos de ellas. Primero abrimos el intérprete de comandos en nuestra barra de aplicaciones, herramientas del sistema, terminal o clic derecho en nuestro escritorio y abrir terminal. Luego logueamos con el usuario root y nos ubicamos en donde queremos guardar el script. En mi caso yo hice unas carpetas en el usuario que actualmente inicio sesión. Como vemos estoy ubicado en /home/ecarpio/Test/Scripts. Para crear el scripts abrimos cualquier editor de texto para hacer un nuevo archivo, ente ellos están vim, nano, gedit, el que ustedes prefieran y nombraremos el archivo como calculadora.sh pues .sh es que nos va a ayudar a identificar que es una serie de instrucciones para la Shell. Es bueno tener en cuenta saber algunas variables. $ --- indica la posición del argumento cuando el script es llamado. $# --- Esta variable contiene el número de argumentos que hemos pasado al script. $0 --- Esta variable contiene el nombre del shell-script que se ejecuta. $* --- Esta variable muestra una cadena con los parámetros que hemos pasado al script. $? --- Esta variable contiene la salida del comando anterior donde se encuentre dentro del script. En nuestro archivo en blanco utilizaremos los siguientes comandos: #! bin/bash echo read case expr En la primera línea indicamos a nuestra terminal con que Shell queremos ejecutar el script, en la segunda echo “texto” lo utilizamos para mostrar texto sin que haga ningún efecto (siempre que esté dentro de las comillas), read nos habilitar el teclado para introducir texto. case es una condicional a la que añadimos la variables que creamos al introducir los valores en read y con esto tenemos la posibilidad de definir alguna acción en esta condicional y para cerrar la condicional usamos esac. Ahora guardamos nuestro archivo y si es de nuestra preferencia le cambiamos los permisos para que puedan ejecutarse desde cualquier usuario y la probamos. Otra forma de hacer este tipo de cálculo es haciendo otro script, pero esta vez es mas fácil de hacer y da mejores resultado. Las funciones “scale=4” son la cantidad de cifras decimales que permitirá, el comando bc se encargara de hacer los calculo y este no necesita tener espacios entre los valores y la operación. Tenemos otra manera de hacer uso de la calculadora sin tener que el script nos muestre algún mensaje, o sea, usarlo de esta forma # bash Calc 5*4 y nos muestre el resultado en la siguiente línea. Para esto solo debemos modificar nuestro archivo y guardarlo con las siguientes configuraciones. Esto es todo lo que debe haber en el archivo, lo demás que tiene # al principio, no va. A excepción de #!bin/bash Este sería el Resultado. Como hacer un Script para crear un Usuario Al igual que en script anterior abrimos nuestra terminal, logueamos como root y nos ubicamos en el directorio donde queremos guardar el script. Luego abrimos un archivo nuevo con el editor de texto de nuestra preferencia e introducimos las siguientes líneas. Como notamos, usamos el comando useradd y passwd. En la siguiente imagen se muestra el cambio de permisos del archivo y la prueba de este script creando un nuevo usuario. Debemos tener en cuenta que en la contraseña nos pedirá que sea más difícil, pero si queremos continuar con la que tenemos solo debemos repetir la contraseña y se agregara esa. Podemos verificar el nuevo usuario en el archivo /etc/passwd. En este caso utilizamos el comando cat /etc/passwd para que nos muestre el contenido sin tener que abrirlo con un editor de texto. Como hacer un Script para Crear un Grupo Los pasos para crear un grupo a través de un script son similares a la práctica anterior. En primer lugar nos ubicamos en el directorio que queremos crear el script y editamos el archivo del script, en nuestro caso utilizaremos nano, y el script se llamara newgroup.sh. Para ellos introducimos las siguientes líneas en nuestro editor de texto. Para verificar nuestro grupo podemos verficar el archivo /etc/group. Podemos hacerlo con el comando cat /etc/group para que nos muestre el contenido del archivo sin tener que abrirlo desde un editor. Como hacer un Script para Backup Los pasos son un poco repetitivos en relación a los objetos anteriores, pero muy necesarios. Lo primero que hacemos es abrir la terminal y loguearnos como root. Ahora nos ubicamos en el directorio donde queremos tener nuestro documento de script para futuros usos. En mi caso yo hice un directorio en la raíz, con el nombre de /Backup en el cual guardaremos los backups y nuestros scripts. En este script utilizamos el comando date y filtramos lo que queremos ver para luego agregar esa variable al nombre que se creará con el empaquetado. También creamos las variables que contienen la ruta que queremos hacer backup y el destino donde se guardará. Para ello hemos usado el empaquetado y compresión tar –cvzf. Bien, ahora le cambiamos los permisos de ejecución. Como hacer un Script para Transferir Datos entre PCs Para hacer un script que nos permita transferir un directorio a otra PC lo primero que tenemos que hacer es crear un directorio que será el compartido entre las dos PCs dándole en primer lugar los permisos necesarios al directorio que se va a transferir. En nuestro caso, yo ya tengo creado un directorio que voy a compartir, y está en /ToShare. Pero el Script lo tendremos guardado en /Utils. Veamos: Utilizaremos los siguientes parámetros al momento de crear el script: clear: Para limpar la consola al abrir el Script SRCDIR: Para establecer el origen de nuestro directorio a transferir DESDIR: Para establecer el destino de nuestro directorio de nuestra otra pc. rsync: Para sincronizar las carpetas. progress: Para enseñar el progreso de la transferencia avze: Opciones del comando rsync. sudo: Hacer el comando con privilegios de root sin necesidad de logearse. Luego de guardar y cerrar, le asignamos los permisos. En la siguiente imagen podemos ver la ejecución del script y lo que nos muestra. Verificamos los datos en la maquina cliente… <SERVER CLIENTE> Programar Backup usando crontab El nombre cron viene del griego chronos que significa “tiempo”. En el sistema operativo Unix, cron es un administrador regular de procesos en segundo plano (demonio) que ejecuta procesos o guiones a intervalos regulares (por ejemplo, cada minuto, día, semana o mes). Los procesos que deben ejecutarse y la hora en la que deben hacerlo se especifican en el fichero crontab. El demonio cron inicia de /etc/rc.d/ o /etc/init.d dependiendo de la distribucion. Cron se ejecuta en el background, revisa cada minuto la tabla de tareas crontab /etc/crontab o en /var/spool/cron en búsqueda de tareas que se deban cumplir. Como usuario podemos agregar comandos o scripts con tareas a cron para automatizar algunos procesos. Esto es útil por ejemplo para automatizar la actualización de un sistema o un buen sistema de respaldos. Crontab es la manera más sencilla de administrar tareas de cron en sistemas multiusuario, ya sea como simple usuario de sistema o usuario root. Ejecutamos la edición del crontab con crontab -e, en algunas distros (como ubuntu) nos da la opcion de elegir el editor de textos que deseemos, los demás nos quedamos con vi. El archivo crontab lucirá algo asi. # m h dom mon dow user command Donde: m corresponde al minuto en que se va a ejecutar el script, el valor va de 0 a 59 h la hora exacta, se maneja el formato de 24 horas, los valores van de 0 a 23, siendo 0 las 12:00 de la medianoche. dom hace referencia al día del mes, por ejemplo se puede especificar 15 si se quiere ejecutar cada dia 15 mon significa el mes del año, 12 (diciembre), 9 (septiembre). dow significa el día de la semana, puede ser numérico (0 a 7, donde 0 y 7 son domingo) o las 3 primeras letras del día en inglés: mon, tue, wed, thu, fri, sat, sun. user define el usuario que va a ejecutar el comando, puede ser root, u otro usuario diferente siempre y cuando tenga permisos de ejecución del script. command refiere al comando o a la ruta absoluta del script a ejecutar, ejemplo:/home/usuario/scripts/actualizar.sh, si acaso llama a un script este debe ser ejecutable Si en algún momento olvidamos estos parámetros, podemos revisarlos en el archivo /etc/crontab Bien para programar nuestro backup editamos el crontab que se muestra arriba insertándole los valores indicados o bien ejecutando en comando crontab –e. Para que el script se ejecute de lunes a viernes a las 5:00 pm por el usuario root lo hacemos de la siguiente forma. Guardamos y verificamos que se este ejecutando. Algunos ejemplos de tareas de cron explicados: 15 22 * * * usuario /home/usuario/scripts/actualizar.sh Ejecutará el script actualizar.sh a las 10:15 p.m. todos los días 00 10 * * 0 root apt-get -y update Usuario root Ejecutará una actualización todos los domingos a las 10:00 a.m 45 10 * * sun root apt-get -y update Usuario root ejecutará una actualización todos los domingos (sun) a las 10:45 a.m 30 7 20 11 * usuario /home/usuario/scripts/actualizar.sh El día 20 de noviembre a las 7:30 el usuario correra el script Y de este forma ponemos en práctica los scripts que ya hemos creado!! Nota: Esta práctica fue realizada por Luis Enmanuel Carpio Domínguez en el sistema operativo CentOS 6.5 64-bits como práctica de la asignatura Sistemas Operativos 3 en el Instituto Tecnológico de las Américas (ITLA), Rep. Dom. Todos los derechos de edición y creación están reservados para el autor original. Copyright © 2014