How to #6: Creación de Script Qué es un Shell Script

Anuncio
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
Descargar