martes, 26 de octubre de 2010

Curso básico de Unix (XII)

El último capítulo de nuestro curso, va a tratar someramente el tema de la programación shell. No vamos ha hacer aquí gran hincapié en ello, pero si vamos a dar una visión básica que nos permita empezar a conocer la programación shell.

Como recordaras, Unix fue desarrollado por programadores, y es por ello lógico que tenga propiedades de lenguaje de programación, como crear variables, ejecutar bucles condicionales…

Empecemos.

Una variable, es un espacio de memoria al que le asignamos un nombre, para poder almacenar en el una información que luego usaremos. Crearla es tan fácil como poner el nombre de la variable (por convención, se usa en mayúsculas) el signo igual y el valor de la variable. El primer uso que podemos realizar, es ver la variable. Para ello usamos cualquier comando que permita visualizar y el nombre de la variable precedido de del signo $



Las variables definidas por un programa, se pierden al acabar el programa, son locales, aunque se pueden exportar si nos hace falta, con export VARIABLE

Cuando vamos a iniciar un programa, podemos pasarle parámetros. Si creamos el programa nosotros, debemos saber como manejar las variables de entrada donde han ido a parar nuestros parámetros. Estas variables sencillamente se nombran como $1, $2…$9  y cada una contiene un parámetro ($0 contiene el  propio nombre del programa). La novena variable seria la última a la que  se asigna directamente, si necesitamos mas, tenemos que reasignar con shift y un numero (si no ponemos nada, entiende que es un 1). Lo que hace es eliminar las variables que le indiquemos, y renumerarlas. Así shift 5 elimina las 5 primeras, y $6 pasaría a ser $1 y sucesivas.

Las variables son siempre de tipo carácter, y existen una serie de ellas “especiales” predefinidas:

  • $* Devuelve todos los argumentos como una sola cadena de texto
  • $@ Devuelve todos los argumentos como varias cadenas de texto
  • $# Devuelve el numero de argumentos que se han pasado
  • $? Devuelve el estatus de la ultima ejecución de la shell (0=ok)
  • $$ Devuelve el PID del proceso
  • $! Devuelve el identificador del último proceso en background

Y ahora que ya tenemos variables, podemos crear bucles, condicionales y ordenes complejas. Podemos crear nuestros propios programas.

Lo primero, para todo esto, es saber si se cumple alguna condición, que es la que determina que se haga una u otra opción, que continuemos dentro de un bucle, que finalicemos el programa… Para ello se utiliza test. Es tan sencillo como poner lo que queremos comprobar entre corchetes (separados por un espacio) y esa expresión se convierte en el valor true o false, según sea cierta o no. Lo que si tenemos que tomar en cuenta, es que siempre hace la comparación como si tratara con texto, y si queremos que compare números, tenemos que usar comparaciones especiales.

Un ejemplo
[ $1 > $2  ] Compara si la cadena de texto que hay en $1 es mayor que la de $2
[ $1 –gt $2  ] Hace la misma comparación, pero tomando el valor de $1 y $2 como números.

Podemos hacer todas las comparaciones especiales siguientes:


Y podemos agrupar o negar condiciones


 Con esto ya podemos hacer condicionales. Es decir que se ejecuten unas u otras instrucciones según se cumpla o no una condición que comprobamos con test. Para ello usamos la orden if, que es tan sencilla como:

if [ condición ]
then
    Órdenes a realizar si se cumple la condición
    ……………………………………………..
else
    Órdenes a realizar si no se cumple la condición
fi

Podemos ver un ejemplo. Supongamos que hemos creado un programita que comprueba si existe un fichero cuyo nombre le pasamos como primer argumento, con el siguiente código.

if [ -s $1 ]
then
    echo “El fichero existe”
else
    echo “El fichero no existe”
fi

Otra opción interesante es case, que nos comprueba si una determinada cadena esta dentro de un patrón, y en caso afirmativo hace una serie de instrucciones hasta que encuentra la orden “;;” y va al final del case

case “cadena” in
patron1)
    Órdenes si “cadena” esta dentro de “patron1”
    ;;
patron2)
    Órdenes si “cadena” esta dentro de “patron2”
    ;;
patron3)
    Órdenes si “cadena” esta dentro de “patron3”
    ;;
………
esac

Ahora vamos a pasarnos a los bucles, que son conjuntos de instrucciones que se repiten múltiples veces. Con while se ejecutan un conjunto de órdenes mientras que se cumpla una condición, con until se realizan las órdenes hasta que se cumpla la condición y con for se realizan las órdenes un número determinado de veces.

while [ condición ]
do
    Órdenes que se ejecutan mientras la condición sea cierta
done

until
do
    Órdenes que se ejecutan mientras la condición sea  falsa
done

for VARIABLE in [ lista de valores ]
do
    Órdenes que se ejecutan una vez con cada valor de la lista de valores
done

Y con esto ya tenemos visto los rudimentos de la programación shell. No vamos a entrar en más detalle, porque seria un tema demasiado complejo para un curso básico, pero creedme que la potencia que tiene como lenguaje de programación la shell hace que un buen administrador pueda hacer casi cualquier cosa.

Espero que el curso te haya gustado tanto como a mi… habrá que ir buscando otro que seguir.

No hay comentarios:

Publicar un comentario

prekes sodui