Creación de Scripts ¿Qué es un script? Un guión o script es un fichero de texto que contiene una serie de instrucciones que se pueden ejecutar en la línea de órdenes, y que se ejecutarán seguidas. En ese sentido son iguales que los ficheros con extensión BAT de MS-DOS, aunque, por supuesto, como en los sistemas UNIX no existe el concepto de extensión, pueden tener cualquier nombre. El único requisito es que ese fichero de texto tenga permiso de ejecución para la persona que intenta ejecutarlo. Alternativamente, puedes llamar al intérprete y darle como parámetro el nombre del guión, pero es más cómodo dar permiso de ejecución al guión para ahorrarnos escribir el nombre del intérprete. Shell es un programa de usuario, o su entorno provisto para la interacción del usuario. Shell es un intérprete de lenguaje de comando que ejecuta comandos de lectura de entrada por medio del dispositivo estándar (teclado) o desde un archivo. 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. Los scripts pueden tener las siguientes características: Encabezado que debe de tenerlo #! /bin/bash Es bueno ponerle un comentario para saber para qué sirve el script estos se agregan con # y el comentario. Las variables que son una de las piezas más importante porque le dan la oportunidad al usuario de agregar variables que él quiere que procesé puede ser echo –n, expr este es para operaciones con número. Entre otras. Como funciona un shell 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: 1. 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). 2. 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 ant erior: > 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). 3. 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 dos formas de ejecutarlos: Ejecutar el comando source fichero. En este 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. Aparte de que estas dos formas de ejecutarlos se diferencias por los comandos y la complejidad que se utiliza en cada unas de ellas, estas se diferencias debido a que cuando ejecutamos el comando source, este se ejecuta dentro del proceso del Shell, mientras que si lo ejecutamos como un fichero ejecutable se ejecuta en un subshell. Esto implica que solo las variables de entorno exportadas son conocidas por el nuevo subshell. Lo primero que vamos hacer es crear nuestra carpeta en donde vamos a guardar nuestros script esto lo hacemos con el comando mkdir “el nombre de la carpeta” luego entramos que darle los permisos por la carpeta no aparecerá así. Crear un script para crear una calculadora Después de haber observado lo básico de un Shell script podemos proceder a comenzar a verlos en función; en este caso se va a crear un script para que calcule suma, resta, multiplicación y división. Existen 2 formas de hacer los scripts, una es mediante cualquier editor del Shell ósea nano, cat, vi, etc, como quien dice automáticamente desde la terminal; y la otra forma es haciéndolo en un editor de palabras como KWrite, gedit Text Editor, etc. Nosotros comenzaremos haciéndolo por el primer método. Lo primero en hacer es abrir la terminal de comando. Con la consola abierta lo primero que haremos es entrar a modo de super administrador digitando el comando “su” y luego la contraseña, luego de estar adentro introduciremos el comando “which bash”, para ver cuál es la bash que estamos utilizando (como se dijo anteriormente existen varios tipos de bash entre los más conocidos están: #!/bin/bash ;#!/bin/ksh ; #!/bin/csh), como vemos en nuestro caso estamos utilizando el bash “bin/bash” esto indica que cada vez que se vaya a realizar un script debemos comenzar con el comando “#!/bin/bash”, (este encabezamiento es conocido como shebang) de tener otro bash se escogería, y se comenzara con él. Sabiendo cual es nuestro bash podemos entrar a nuestro editor nuestro script, pero antes de esto vamos a crear un directorio llamado Scripts donde almacenaremos todos estos scripts, este directorio será en root, home, esto lo haremos con el comando “cd /home/root /”, “mkdir Scripts”, utilizamos el comando ls –l para ver si ya está creado y como nos damos cuenta ya lo está. Ahora entramos al directorio de Scripts y es aquí donde crearemos dichos scripts. Recordar si queremos que el directorio pase a manos del usuario root solo tenemos que digitar el comando (claro esto es después de salir del directorio Scripts ósea, en el directorio de root) “chown root Scripts” y si queremos que el directorio pase a manos del grupo de root, solo digitamos el comando “chgrp root Scripts” y listo ya está en manos del usuario root. Variables autodefinidas por shell-script $, indica la posición del argumento cuando el script es llamado. $# —- Esta variable contiene el numero de argumentos que hemos pasado al script. $0 —- Esta variable contiene el nombre de el 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 de el script. Ya dentro del directorio Scripts procedemos a crear el fichero o script, como dijimos antes esto se pude lograr con cualquier editor de fichero disponible, en este caso estaremos utilizando el “nano”, entonces procedemos a crear el script y usamos el comando “nano calculadora.sh” para introducirnos el script y comenzar a digitar. El nombre de calculadora es por el fichero que será, es decir es como se quisiera salvar un archivo para ser utilizado. Al ejecutar nuestra nueva calculadora con la mitad de líneas gracias a case, tenemos que case nos permite dar múltiples valores a una variable y actuar de la forma que sea, según el valor que introduzcamos. Crear un script para crear usuarios Bueno para la creación del script de un usuario vamos a utilizar el editor de texto que utilizamos anteriormente, que es el nano. Para comenzar entraremos como root y nos dirigiremos hacia la carpeta que creamos llamada scripts. Luego accedemos al editor de texto escribiendo lo siguiente: Nano {nombre} Ahora en el editor de texto lo primero que debemos poner es “#!” seguido del Shell que vamos a utilizar en este caso “/etc/bash/” y luego en las líneas de abajo ponemos “echo” seguido de un mensaje para que en secuencia que se va ejecutando el script nos muestre los mensajes, luego en otra línea de abajo ponemos solo los comandos que queremos ejecutar, en este caso como es para crear usuarios debemos poner “useradd” y el nombre del usuario que queremos crear” también podemos poner “passwd” y el nombre del usuario para cuando se cree el usuario automáticamente se nos pida la contraseña que le vamos a asignar a el usuario, esto lo podemos ver detenidamente en la siguiente imagen que nos muestra el editor de texto con todo esto. Echo: En Unix (y otros sistemas derivados), el comando echo permite utilizar variables y otros elementos del intérprete de comandos. En las implementaciones más comunes y usadas como Bash, echo se trata de una función built-in, es decir, una función interna del intérprete de comandos y no un programa externo, así como cat o grep. Ahora vamos a proceder a guardar el script para esto damos Ctrl + x. Ahora con sh procederemos a ejecutar nuestro script Crear un script para crear grupos Para hacer un script que cree grupos lo hacemos de forma similar que con los usuarios, la diferencia radica que aquí en el editor de texto cuando estamos haciendo el script ponemos “groupadd”, hacemos el script con el editor de nuestra preferencia, en mi caso usare el nano Salimos y guardamos el archivo y por último le damos permisos de ejecución: chmod u+x calculadora Ahora con sh procederemos a ejecutar nuestro script Crear un script para crear backup de datos Para hacer un script de backup lo hacemos siguiendo algunos de los pasos que con los anteriores, a diferencia que aquí entran variables más complejas y que debemos conocer, como es de que parte se creara el backup, donde se guardara, entre otras cosas, estas variables se dan en detalle más adelante. Backup_file: es una variable que crea y le asigne una ruta o valor. (En este haremos un backup del directorio /home/). Dest: esta variable es la ruta donde se guardara el backup. (En este lo guardaremos en la ruta /home/compartir). Day: es una variable en la que se asigna el día que quiero que se haga el backup, (los caracteres que introduciremos indican que el script se ejecutara a la hora que ejecutemos el script, estos caracteres son “date +A%”). Archive_file: esta variable es para asignarle un nombre al backup seguido del .tgz que es la extensión que tendrá el archivo comprimido. Tar czf: comprimirá todos los valores que representan dichas variables. Vamos a crear el backup con un editor de texto, guiándonos de las variables que se explican anteriormente. Crear un script para transferir datos entre pc Ya hemos visto como transferir datos usando el NFS pero ahora lo vamos a ver de una forma más interesante usando script y otros elementos que nos pueden ser funcionales para una eficaz transferencia de archivo, debemos ir al archivo /etc/exports y asegurarnos que este especificada la ruta del recurso que se va a compartir, en este caso será una carpeta que está en el directorio /home por lo tanto debe quedar como se muestra a continuación. Ahora si no lo tenemos creado, procedemos a crear el directorio llamado Folder 1 que es ahí donde se estarán compartiendo los archivos que queremos compartir, como hemos visto creamos un directorio con el comando mkdir mas el nombre Y esto lo hacemos en el directorio Desktop como habíamos especificado en el /etc/exports. Nota: Veremos que no podemos crear un directorio porque ya se encuentra hecho mas hacia abajo. Ahora en la pc cliente debemos asegurarnos de que las maquinas estén en conectividad para probar esto usamos el ping más la dirección ip de la otra pc. Luego de esto crearemos una carpeta en el directorio media que será nuestro punto de montaje. Ahora para hacer un script que nos permita montar el directorio en la ruta deseada y que nos permita hacer transferencia de archivos lo que hacemos creando un archivo con el editor de nuestra preferencia y poniéndolo de la siguiente forma. Recordemos que podemos usar cualquier editor de texto, en mi caso he usado nano y ya le he puesto un nombre para cuando lo guarde. Mount - Es el comando para montar un directorio. 192.168.1.2 – Es la dirección de nuestro servidor. /home/grande/Desktop/Folder1 – Ruta de nuestro server /media/comparte – Punto de montaje Ahora al ejecutar el script transfer con sh delante vemos que se acepta como si hubiésemos ingresado un simple comando, para comprobar que funciono vamos al punto de montaje que en este caso es /media/cliente y vemos que se ha montado la carpeta compartir con todos los datos que tenía. Utilizar cron para programar la ejecución automática de un script Iniciamos una sesion en la terminal como root y escribimos lo siguiente para abrir un editor VI: Crontab –u root -e \ En la ventana de VI, pulsamos ‘i’ o Insert para insertar texto. En este archivo se ubican las tareas guardadas en cron. Cada una de estas tareas requiere cinco entradas indicando: la fecha, hora, el nombre y ruta del programa para ejecutar, usando Tab o la barra espaciadora entre cada entrada. Por ejemplo: Minuto (0-59) hora (0-23) dia_del_mes(1-31) mes(1-12) Dia_de_la_semana (0-7) /ruta/script.sh Se puede utilizar el asterisco “*” como carácter comodir, asi : “0 10 * * * /ruta/script.sh “equivales a”0 10 1-31 1-12 0-7 /ruta/script.sh “. En este caso, el script se ejecutara a la diez de la mañana todos los dias. Al final, guardamos como en todo archivo abierto con VI, usando “:w” en el modo de comandos