LISTAS

En alguna ocasión querremos conectar comandos en serie. Por ejemplo, puede que desee que varias condiciones diferentes se encuentren antes de ejecutar una sentencia:

listas_1

O puede que desee que al menos una de las series de condiciones sea verdadera:

lista_2

Aunque se pueden implementar usando múltiples sentencias if, verá que los resultados son poco prácticos. La shell dispone de un par de construcciones que se ocupan de las listas de comandos: la lista AND y la lista OR. Se suelen usar juntas, pero vamos a estudiar su sintaxis por separado.

La lista AND

La construcción AND le permite ejecutar una serie de comandos, ejecutando el siguiente comando únicamente si todos los comandos anteriores han tenido éxito. La sintaxis es:

lista_and

Empezando por la izquierda se van ejecutando todas las sentencias, si el resultado es true ,se ejecuta la sentencia de la derecha. Así continuamente hasta que una sentencia envía false, tras lo cual no se ejecutarán más sentencias de la lista. && comprueba la condición del comando anterior.

Cada sentencia se ejecuta por separado, permitiendole unir diferentes comandos en una única lista, tal como mostramos en el siguiente script. La lista AND al completo tiene éxito si todos los comandos se ejecutan con éxito, sino fracasará.

Listas AND

En el siguiente script, emplea touch archivo_uno (para comprobar si existe y para crearlo si no existiese) y después elimina archivo_dos. Después la lista AND comprueba la existencia de cada uno de los archivos e introduce texto entre ellos.

lista_srcipt

Si comprobamos el script obtendrá el siguiente resultado:

lista_ejemplo

Cómo funciona

Los comandos touch y rm comprueban que los archivos del directorio actual tienen un estado conocido. Después, la lista && ejecuta la sentencia [ -f archivo_uno ], que tiene éxito porque habíamos comprobado que el archivo existía. Como la sentencia anterior tuvo éxito, se ejecuta el comando echo. Esta comprobación también es verdadera (echo siempre retorna true).

La tercera comprobación, [ -f archivo_dos ], también se ejecuta y falla porque el archivo no existe. Como el último comando falló, la última sentencia echo no se ejecuta. El resultado de la lista && es false porque uno de los comando de la lista falló, de manera que la sentencia if ejecuta su condición else.

La lista OR

La construcción OR nos permite ejecutar una serie de comandos hasta que uno de ellos tenga éxito, y después no ejecuta ninguno más. La sintaxis es:

lista_or

Comenzando por la izquierda, se van ejecutando todas las sentencias. Si devuelven false, se ejecuta la sentencia de la derecha. El proceso continúa hasta que una sentencia envía true, y en ese momento dejan de ejecutarse el resto de sentencias.

La lista || es muy similar a la lista &&, salvo porque  la regla para ejecutar la siguiente sentencia es que la anterior debe fallar.

Listas OR

Modificamos el ejemplo anterior tal como mostramos:

ejemplo_lista_or_script

El resultado sería:

resultado_lista_or

Como funciona

El primer comando , [ -f archivo_uno], falla porque el archivo no existe. Entonces se ejecuta la sentencia echo. Este envía true, y no se ejecutan más comandos de la lista || . if es verdadero porque uno de los comandos de la lista || (echo) fue true.

El resultado de ambas construcciones es el resultado de la última sentencia ejecutada. Estas construcciones a modo de lista se ejecutan de un modo muy similar a las construcciones de C cuando se comprueban varias condiciones. Para determinar el resultado se ejecuta solamente el número mínimo de sentencias. Las sentencias que no pueden modificar el resultado no se ejecutan. Lo cual se conoce como breve circuito de evaluación.

Combinar ambas construcciones es una bendición lógica, Pruebe el siguiente fragmento:

listas_ejemplo_2

Este fragmento ejecutará el primer comando si la comprobación tiene éxito y si no ejecutará el segundo comando. Casi siempre es una buena idea experimentar con estas listas poco comunes y, por lo general, debería usar corchetes para determinar el orden de evaluación.

Bloques de sentencias

Si desea usar varias sentencias y sólo puede usar una, tal como ocurre en una lista AND u OR, puede hacerlo introduciendo las sentencias entre corchetes { } para crear un bloque de sentencias. Por ejemplo, en la aplicación que veremos más adelante, verá el siguiente código:

sentencias_ejemploatras

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.