Scripts

De Ubuntu Tijuana

Pronto un Tutorial sobre Scripts pero por ahora con la definicion iniciamos :)

Tabla de contenidos

[editar] Que Es un Script

Tras una conversación acerca de como podría definir shell script (para una pequeña cabecera de introducción a las funciones) y no estar de acuerdo con ninguna página en la web, pregunté a mi amigo no0ne, él me soltó esta (joya) ingeniosa frase (…que conste que él nunca ha programado con shell script) que merece estar en este blog:

    Shell script, considerado por algunos como lenguaje de programación, se puede definir como un conjunto de
comandos ordenados que son interpretados por el sistema. Carece de un flujo de instrucciones estructurado pero
 notablemente dotado para la modularización de código. Imperativo y de propósito general, permite la 
manipulación de ciertas características del sistema operativo haciendo uso del intérprete de comandos como 
mediador entre el usuario y el sistema operativo.

P.D: Él no se hace responsable de esta ingeniosa frase, que por mi parte debería estar en un libro, dice que no os cebéis con él, pero ¿no creéis que esta muy bien definido?


[editar] Como hacer un Scripts

Pretendo poneros como hacer un script desde lo más básico hasta lo más complicado que podáis imaginaros. Entremos en faena …

Un script es un fichero (casi siempre son archivos de texto) que incluye un conjunto de comandos. Son ejecutados desde la primera línea hasta la última (de forma secuencial). Para crearse un script solo tienes que crearte un fichero nuevo y en el nombre poner .sh Ejemplo: HolaMundo.sh

[editar] Con que se hacen los scripts

Un vez creado, empezamos a editarlo. Os recomiendo que uséis kate, gedit, o SciTE aunque también sirve con cualquier editor de textos pero con la desventaja de que no os marcará con diferentes colores los comandos, llaves, etc. Aunque yo prefiero el kate, porque posee una consola propia, con lo cual es más cómodo.

[editar] El cuerpo del Script

En la primera línea del script se debe indicar que shell que vas a usar ( /bin/bash/ , /usr/bin/perl , etc ) Aunque da igual la que uses lo importante es el contenido:

#! /bin/bash
#! Se conoce con el nombre de Sha Bang.

Se denomina “sha-bang” a la secuencia #! con la que se inician los scripts. Su función es indicarle al sistema que se trata de un conjunto de comandos para que sean interpretados. En realidad, es un número mágico de dos bytes. El número mágico es un marcador especial para indicar el tipo de archivo, en este caso, indica que se trata de un script de shell ejecutable.

[editar] Los comentarios

Para introducir comentarios se debe poner #. Por cada linea que deseéis poner un comentario, lo primero que debe tener es #.

[editar] Los Permisos

Siempre hay un problema que casi nunca me acuerdo de ponerlo, cuando creas un fichero se crea con los permisos 644 (con ese fichero si eres el root puedes leerlo y escribirlo, pero no puedes ejecutarlo, además cualquier usuario o grupo solo puede leerlo, no puede ni modificarlo ni ejecutarlo), lo mejor es hacer uso del comando chmod y darnos permisos de ejecución, y si queréis, a todos los usuarios y grupos. chmod 777 /ruta_del_script

[editar] Ejecutar un Script

¿Cómo ejecutar un script?

Una vez hecho todo lo anterior, usaremos:

./NombreDelScript

Pero también podemos usar si es un shell script:

sh NombreDelScript.sh

Ya tenemos el script creado, le hemos puesto la cabecera y le hemos cambiado los permisos, ya solo falta meter el código. Pero primero vamos a lo esencial, cómo dar valor a una variable. Es tan sencillo como poner: nombre_variable=valor

Si deseas guardar la salida de un programa solo tienes que poner las comillas invertidas: nombre_variable=`comando` Por ultimo, hay un comando que lee por teclado las variables ( read ). Para ponerlo es:

read [opciones] nombre_variable1 nombre_variable2 nombre_variableN
read -p “Introduce el nombre y los apellidos” nombre apellidos

Tiene un montón de opciones pero os destaco las más importantes y usadas:

    -n num_car : Número máximo de caracteres que puedes introducir por teclado
    -p “frase” : Te muestra por pantalla una frase para tu saber que debes introducir
    -d “delimitador” : Especificas cual va a ser el delimitador, es decir si dices que el delimitador sera “;” 
pues todo lo que venga antes de un “;” lo cogerá una variable y todo lo que venga después de ese delimitador 
hasta el próximo “;” lo cogerá otra variable

Por ultimo para coger el valor de un variable se pone:

$nombre_variable
<pre>


== Scripts de Ejemplo ==
<pre>
HolaMundo.sh
#! /bin/bash
clear
echo “Hola mundo ,este es mi primer script!!!!”
ScriptUno.sh
#! /bin/bash
clear
nombre=”Manolo el del”
apellidos=”Bombo”
echo “Te llamas $nombre $apellidos”
Fecha.sh
#! /bin/bash
clear
fecha=`date | cut -d ” ” -f 1,2,3`
hora=`date | cut -d ” ” -f 4`
echo “Hoy es $fecha y son las $hora”
OtroScript.sh
#! /bin/bash
clear
# IFS es una variable de entorno que determina el delimitador de campos
# (que por defecto vale ” “),en este script queremos
# cambiarlo a “,” para escribir por teclado nombre,apellidos
IFS=”,”
read -p “Introduce el nombre,apellidos : ” nombre apellidos
echo “El nombre es $nombre y los apellidos son $apellidos”

[editar] Instrucciones condicionales

Iniciaremos por las condicionales.

La estructura básica de una condición sería:

if condición
    then
        comando1
        ...
        ...
else
        comando1
        ...
        ...
fi

Como veis la condición si (if) se cierra con su correspondiente fi que al parecer un juego de palabras es fácil de recordar. Entonces si la condición se cumple entraría por el then, en caso de que no, por el else. Pero este es un método simple, luego tenemos uno más complejo con if anidados, sería:

if condición
    then
        comando1
elif condición
    then
comando
elif condición
then
        ...
fi

Ahora lo que hace es evaluar la condición, si es verdadera entra por el then, pero si no y se da el caso de otra condición entraría por el elif, los elif no se cierran, solamente el fi final corresponde a la apertura del if.

La condición es cualquier cosa que de un return (que devuelva) algo que sea 0 o verdadero.

CompruebaDirectorio.sh

#! /bin/bash
clear
if `cd /tmp/prueba/ >/dev/null`
then
echo “Pues si, es un directorio y contiene…”
ls -l
else
echo “Pues va a ser que no es un directorio”
fi

Vemos como podemos hacer un script para comprobar que realmente la ruta es un directorio.

ExisteGrupoUsuario.sh

#! /bin/bash
clear
read -p “Introduce usuario… ” user
read -p “Introduce grupo… ” group
if `grep -e “^$user:.*” /etc/passwd >/dev/null`
then
if `grep -e “^$group:.*” /etc/group >/dev/null`
then
echo “Usuario y grupo ya existen en el sistema”
fi
elif `grep -e “^$group:.*” /etc/group >/dev/null`
then
echo “usuario no existe, grupo si!!”
else
echo “Ni grupo ni usuario existen”
fi

Este script es un claro ejemplo de como comprobar si un usuario y un grupo existen en el sistema, vemos también el uso que se le da al elif. Especialmente cuando se escribe se tiene en cuenta la presentación del script, pero como sabéis wordpress me los modifica y no me deja tabularlos bien

[editar] Referencias

Diaria de un Linuxero: http://albertjh.cymaho.com/?p=361

Herramientas personales