Free Web Hosting Provider - Web Hosting - E-commerce - High Speed Internet - Free Web Page
Search the Web

escudo.jpg (17355 bytes)

MUSICA MIENTRAS NAVEGAS CON REAL AUDIO

sacanimado.GIF (139839 bytes)

152 PERSONAS QUE NOS VISITAN

iconobusca.gif (415 bytes)

TUTORIAL DE UNIX

Condiciones particulares

Hay dos condiciones que son relativamente comunes, que son ejecutar un código si algo inmediatamente anterior ha ido bien, o justo lo contrario, ejecutarlo sólo si lo anterior ha ido mal.

Por ello, hay dos "estructuras" que nos permiten manejar estas situaciones de una forma más cómoda y limpia. Estas estructuras son && y ||. Para las personas que hayan programado en C, les resultarán familiares. El && es el equivalente a la palabra reservada de Pascal and y || es el equivalente del or en Pascal.

La forma de acordarse de qué produce cada estructura, es pensar que el shell sólo va a ejecutar lo estrictamente necesario para saber cómo termina la condición. Sabemos que false && cualquiercosa da falso, y que true || cualquiercosa da verdadero, así que eso es lo que va a hacer el shell: si utilizamos la estructura &&, el shell ejecutará la primera instrucción, y sólo si va bien (si devuelve un cero) ejecutará la segunda, y análogamente con la estructura ||, el shell ejecutará la primera instrucción, y sólo ejecutará la segunda si la primera ha ido mal, es decir, si el valor de la condición total depende de lo que pase al ejecutar la segunda instrucción.

La estructura && puede utilizarse cuando ejecutemos una instrucción cuyo trabajo depende de que la primera haya ido bien, y la || puede ejecutarse para dar mensajes de error.

Estructura case

La estructura case del bourne shell y compatibles es una estructura parecida a la de Pascal:

cuando entra en la estructura, sale cuando empiece la siguiente etiqueta (no así en C, en el que las etiquetas del case actúan como etiquetas de un JMP en ensamblador: una vez que entran en una etiqueta, no salen del case hasta que éste acaba completamente).

Las etiquetas pueden ser cualquier expresión regular válida, con lo que se puede poner un * como última etiqueta del case para actuar como else. Para indicar que termina el código de una etiqueta determinada, hay que poner al final de la última orden dos signos de punto y coma seguidos.

La estructura general del case es:

case valor

in

expreg1)

...

ultimaorden1;;

expreg2)

...

ultimaorden2;;

...

expregn)

...

ultimaordenn;;

esac

Estructura while

La estructura básica para construir bucles. La sintaxis es:

while orden

do

...

done

En orden podemos poner una orden normal y corriente (el bucle se ejecutaría mientras la orden devolviera un cero), o podríamos también poner una condición, con la orden test (o mejor, con la sintaxis alternativa []), que por otra parte no deja de ser una orden como otra cualquiera.

Estructura for

Es otra de las estructuras importantes en los lenguajes de programación. Es más versátil que el equivalente de Pascal, pero menos que el equivalente de C (como era lógico, por otra parte).

Es una estructura que permite dos sintaxis: La primera, la del for más o menos tradicional, es decir, dar el nombre de una variable y los valores por los que tiene que "pasar", es la siguiente:

for variable in expreg1 expreg2 ...

do

...

done

Hay una pequeña diferencia respecto a los bucles normales for, y ésta es que los valores por los que pasa la variable variable tenemos que especificarlos uno a uno (mediante expresiones regulares). Las expresiones regulares se intentarán hacer coincidir con los nombres de los ficheros del directorio actual.

La segunda sintaxis que permite el bucle for es una sintaxis sin lista. Si utilizamos esta sintaxis, el shell lo interpretará como que la lista que queremos es la de todos los parámetros dados al script desde la línea de comandos (u otro script o programa). La sintaxis queda:

for variable

do

...

done

Estructura until

Esta estructura es parecida a la while, aunque la condición la damos "al revés", es decir, que el bucle se ejecuta mientras la condición a testear sea falsa, y termina cuando sea verdadera. Tiene una utilidad diferente que en los lenguajes de programación. Normalmente se utiliza en los lenguajes de alto nivel para forzar la ejecución del bucle al menos una vez, aunque la condición sea desde el principio verdadera. No se puede utilizar de esa manera en la programación en shell, porque la sintaxis tiene la condición al principio.

Pero sirve para otra cosa: recordemos que cuando queremos chequear el valor devuelto por un programa, ponemos el nombre del programa y los parámetros directamente en la condición de la estructura while o la que sea: si queremos ejecutar un bucle mientras un programa devuelva un valor distinto de cero, entonces debemos utilizar la estructura until, porque no podemos negar el valor devuelto por un programa (al menos que yo sepa).

La sintaxis es como sigue:

until orden

do

...

done

Rompiendo la ejecución normal de los bucles

Algunas veces necesitamos romper la ejecución normal de los bucles. Quizás queramos saltarnos lo que queda de iteración, o quizás necesitemos en un momento dado salir del bucle.

Las dos órdenes utilizadas en la programación en shell para hacer estas cosas son las dos mismas que se utilizan en lenguaje C, y se utilizan de la misma manera: break y continue.

La primera sirve para salir del bucle y seguir la ejecución del programa, y la segunda sirve para saltarnos lo que queda de iteración y empezar la siguiente. Antes de empezar con la siguiente iteración, se volverá a chequear la condición (supongo).

REGRESAR

CONTINUAR