Tutorial Shell Scripts I |
SOFTWARE - Programación | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Mardi, 25 Mars 2008 10:19 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There are no translations available. El objetivo de este tutorial es acercarnos a la programación de scripts de una manera sencilla.. Tutorial Shell Scripts
El día a día de un administrador de Sistemas, ya sea de una importantísima red o de un modesto servidor, esta lleno de tareas repetitivas y generalmente tediosas. Para facilitar nuestra tarea existen los scripts. Pequeños programas cuya finalidad es precisamente automatizar y encadenar tareas relacionadas con los sistemas.
El objetivo de este tutorial es acercarnos a la programación de scripts en LINUX (UNIX) de una manera sencilla,.. Primero con nociones de teoría y segundo con algunos ejemplos. Los ejemplos pretenden ser útiles no solo por que ayuden al lector a entender lo expuesto en la teoría sino porque son scripts sacados de un entorno de producción real que pueden ser usados por cualquier administrador de sistemas que tenga escenarios y necesidades parecidas.También se incluye al principio una pequeña explicación sobre los scripts en un entorno Windows.
El tutorial se divide en los siguientes puntos:
En esta primera entrega veremos los tres primeros.
1. IntroducciónAntes de empezar a meternos de lleno en el mundo de la programación de Shell-Script, haremos una pequeña introducción, explicando los conceptos mas sencillos y realizando un breve resumen acerca de la historia de las shells, los diferentes tipos... También explicaremos el Crontab para la automatización de tareas, ¿estas preparado?...pues comenzamos..
1.1 ¿Qué es una shell?Shell es el intérprete de comandos, es decir, como los ordenadores no entienden nuestro lenguaje (sólo saben de ceros y unos), necesitaremos un programa intermedio, capaz de hacer que cuando nosotros tecleemos alguna orden, nuestro ordenador sea capaz de entenderlo. Es decir proporciona comunicación directa entre el usuario y el sistema operativo.
1.2 ¿Qué es un Shell Script?Normalmente, usamos el término Shell Script para referirnos a programas escritos para la shell de UNIX/LINUX, mientras que cuando usamos la línea de comandos de MS-DOS ( COMMAND.COM) o el cmd.exe de Windows, nos referimos como Batch files (archivos por lotes) y los guardaremos con extensión .bat.
La programación en shell-script es muy útil para resolver tareas repetitivas, típicas de los Administradores. Son ficheros de texto que contienen comandos y son directamente ejecutables por el sistema.
2. Shell en Windows
La shell de comandos de los sistemas operativos Windows utiliza el intérprete de comandos Cmd.exe, que carga aplicaciones y dirige el flujo de información entre ellas. Entra en Inicio/ejecutar y escribe cmd para iniciar una nueva instancia del intérprete de comandos.
Puedes utilizar el shell para automatizar tareas rutinarias, tales como las copias de seguridad o la administración de los perfiles de usuarios.
Siempre se ha he tenido la idea de que la shell de Windows es bastante limitada en comparación con UNIX ( la ausencia de comandos como grep o awk...) Nosotros veremos un sencillo ejemplo para Windows, pero nos centraremos a lo largo del tutorial en la programación de Shell Scripts en UNIX/LINUX.
Para comenzar, podemos probar a escribir el comando, color 57, para cambiar el color del símbolo del sistema al color blanco y el fondo a púrpura. Una vez que hemos probado que la shell, "nos hace caso", podemos probar el resto de comandos ejecutables en la shell de Windows.
A continuación muestro en una tabla los principales comandos:
2.1 ArgumentosSi preparamos un script para windows o unix podemos hacerlo de tal manera que sea capaz de ejecutarse recibiendo argumentos en el momento de su llamada. Por ejemplo podemos crear un script de copia de seguridad que reciba como parámetros la carpeta origen y la carpeta destino. Los argumentos que recibe un batch, son recibidos de la siguiente forma:
nombre_script argumento1 argumento2 argumento3
siendo:
Podemos borrar el contenido de un parámetro con el comando SHIFT.
2.2 Variables de entornoPara ver todas las variables de entorno registradas en tu sistema teclea set en tu consola.
El resultado puede ser parecido al siguiente:
Por ejemplo, la variable COMSPEC nos indica la ubicación del interprete de comandos DOS, que suele ser command.com (C:WINDOWSsystem32cmd.exe).
2.3 EjemploPara empezar haremos un script muy muy sencillo. Pongámonos en la situación de que somos administradores y queremos que se haga una copia de seguridad de ciertas carpeta. Pues esta tarea es tan sencilla como crear un archivo ejemplo.bat con el siguiente contenido.
Notas- Si lo que quisieramos copiar fuera un archivo, en vez de usar XCOPY usaríamos COPY.
2.4 Tareas programadasAhora si queremos que este proceso se repita cada cierto tiempo, tenemos que entender el funcionamiento del comando at, que utiliza la siguiente sintaxis:
Tendríamos que seguir los siguientes pasos para crear nuestra tarea programada:
Por ejemplo, si quisiesemos que se ejecutase en nuestro equipo a una hora:
Si queremos ver las tareas pendientes:
Si quisieramos eliminar esa tarea:
En nuestro caso, si tenemos nuestra tarea con el identificador 1.
Para mas información sobre el comando at, visitar http://support.microsoft.com/kb/313565/es
También podemos visitar esta extensa colección de ejemplos.
3. Shell de LINUX. Historia y Conceptos básicosLa Shell permite al usuario interactuar con el Kernel a través de la interpretación de los comandos que el usuario ingresa en la línea de comandos ( ó a través de los "scripts", archivos que ejecutan un conjunto de comandos).
Si quieres saber qué Shells tienes instalados en tu distribución GNU/Linux sólo tienes que teclear el comando:
En mi caso, la salida de este comando es la siguiente:
Para saber que tipo de Shell estamos usando, tecleamos el siguiente comando en una consola de Linux:
Para cambiar el tipo de Shell que se esta usando usaremo el comando:
Es importante también saber que un script puede ejecutarse en primer o en segundo plano: Cronológicamente, la siguiente shell fue la c-shell o csh, desarrollada por el unix BSD de Berkeley. Y cómo su nombre indica, usa comandos muy parecidos al lenguaje de programación C. También existe una shell llamada tcsh, que es una especie de c-shell mejorada, siendo capaz de chequear ficheros, completar nombres de variables, aliases. No suele venir incluida en las instalaciones estándar. En 1986, David Korn en los laboratorios AT&T programó la korn- shell (ksh) que nació de juntar lo mejor de la bourne shell y la c-shell. En la mayoría de los sistemas Linux, viene por defecto la shell bash (Bourne-Again-shell, en referencia al inventor de la primera Shell). Esta Shell posee toda la funcionalidad del sh con características avanzadas de C Shell, por eso cualquier script escrito para una shell sh correrá perfectamente. La shell bash fué programada por desarrolladores del proyecto GNU. La ventaja principal es su potencia y que es gratuita. Por este motivo nosotros usaremos esta shell . Para comenzar a introducirnos en el mundo de los scripts, recomendamos antes la lectura de estos artículos: Antes de comenzar con ejemplos de Scripts, vamos a explicar una serie de conceptos, necesarios a la hora de implementar nuestros shell-scripts: Para asignar un valor a una variable:
Para visualizar el contenido de la variable
Para borrar el contenido
A continuación se muestra una tabla con una serie de variables especiales que nos serán de utilidad a la hora de escribir nuestros scripts:
Existen dos áreas de memoria en las shells para almacenar variables, el Área local de datos y el Entorno. Podemos visualizar su contenido de ambas áreas, al igual que Windows, con el comando set. Por defecto, cuando asignamos un valor a una variable, es local, es decir, es conocida por esa shell, pero si se abre otra shell a partir de la que estamos, estas nuevas 'subshells' desconocen el valor de las variables que hemos asignado anteriormente. En cambio, las variables del entorno están disponibles para las subshells. Es decir los valores de estas variables son conocidos por los procesos hijos de la shell. Para hacer que una variable se almacene en el área de Entorno, se utiliza el siguiente comando:
Para ver la lista de variables del entorno usaremos el comando env. Debemos saber que una variable exportada NO es lo mismo que una variable global, sino una copia, ya que podrá ser modificada pero volverá a tener su anterior valor cuando salga de la subshell. Cómo ya sabemos, existe un conjunto de variables de entorno predefinidas, que a continuación listamos en esta tabla:
Debido a que la shell bash puede usar nombres simbólicos que representan valores, como el path del directorio personal, necesitaremos conocer la diferencia entre los distintos tipos de entrecomillado, el simple, el doble y el uso de las sencuencias de escape (). Entrecomillado simple Para entenderlo mejor, imaginemos que deseamos crear una carpeta de nombre * (asterisco). Permiten la sustitución de parámetros, la sustitución de comandos y la evaluación de expresiones aritméticas, pero ignoran los caracteres tubería, sustituciones de tilde, expansión de caracteres comodines, aliases y la división de palabras vía delimitadores. Sencuencias de escape () Para entenderlo mejor, veamos un ejemplo:
Si utilizamos la encuencias de escape:
A continuación se muestra una tabla para que fácilmente veamos la diferencia entre un tipo de entrecomillado y otro:
Existe dos formas de ejecutar los scripts:
3.2.5 ParámetrosUn shell-script soporta argumentos o parámetros de entrada. Desde el interior del script se referencian mediante las variables especiales $i con i=1, 2, ..., NumeroArgumentos. Es decir, si lanzamos el siguiente script:
Tendremos que el primer parámetro es uno, el segundo dos y el tercero gato, referenciándolos en el script como $1, $2 y $3 respectivamente. Recordemos como ya vimos anteriormente que la variable $0 hace referencia al nombre del script.
También podemos escribirlos en la shell con el comando "set":
Con el comando "shift", podemos desplazar, es decir borrar varias posiciones:
Con "shift 2" hacemos que desaparezca el valor de $1 y $2, y que ahora $1 valga lo que estaba en $3.
3.2.6 Automatización de tareas con CrontabCrontab es una herramienta cuya función es la automatización de tareas. Por ejemplo podemos apagar un equipo a una hora determinada o realizar backups de manera automática.
Para ver qué tareas tenemos en el crontab, deberemos ejecutar:
30 23 * * 2 /usr/bin/who >> /home/fichero.txt
Teniendo en cuenta que:
Para especificar todos los valores posibles de una variable se utiliza el asterisco (*). Para agregar, quitar o modificar tareas en el crontab usaremos:
que abrirá el editor (el que hayamos definido en la variable de entorno $EDITOR) y cargará el archivo crontab correspondiente al usuario que está logueado.
Ahora veamos un ejemplo de cómo ejecutar nuestro script cada 20 minutos y que la salida se guarde en un log:
20 * * * * /home/script.sh >> mylog.log Para continuar viendo este tutorial, vaya al siguiente enlace: Tutorial Shell Scripts II. |