9.5.4.- Usando expresiones condicionales

Permiten a un script realizar una de varias acciones supeditadas a una condición que suele ser el valor de una variable. if permite al sistema elegir una de dos acciones dependiendo de que una determinada condición sea verdadera. La expresión condicional aparece entre corchetes ([]) tras la palabra clave if y puede adoptar muchas formas. Por ejemplo, -f fichero es verdadera si existe el fichero y se trata de un fichero normal, -s fichero es verdadera si existe el fichero y tiene un tamaño mayor que cero y cadena1==cadena2 es cierto si las dos cadenas tienen el mismo valor.

Las condicionales se pueden combinar entre sí con los operadores lógicos and (&&) y or (||). Cuando utilizamos los operadores, && deben ser verdaderas ambas partes de la condición para que sea verdadera, si utilizamos ||, basta con que una parte del operador sea verdadera para que toda la condición se considere verdadera. Consideremos el siguiente fragmento de código:

script_ejemplo_7Este script finaliza si existe el fichero /tmp/tempstuff y su tamaño es mayor que 0 bytes. then marca el comienzo de una serie de líneas que se ejecutan sólo si se cumple la condición y fi marca el final del bloque if . Una forma alternativa de expresión condicional utiliza la palabra clave test en lugar de los corchetes que rodean a la condición:

script_ejemplo_8

También podemos comprobar el valor devuelto por un comando utilizando el comando como condición:

script_ejemplo_9

Los comandos-adicionales sólo se ejecutan si comando se completa satisfactoriamente; en caso contrario, no se ejecutarán. Las expresiones condicionales se pueden ampliar empleando la cláusula else:

script_ejemplo_10

Dependiendo de la evaluación de expresión-condicional, se ejecutarán comandos o otros-comandos. Esto se utiliza en caso de que deba ocurrir algo en una parte del programa, pero cuando la acción en sí esté supeditada a alguna condición concreta. Si existieran más de dos salidas posibles, podríamos probar a añadir cláusulas if/then/else, pero sería incómodo; resulta mucho más claro si utilizamos case:

script_ejemplo_11

La palabra suele ser una variable, cada patrón es un posible valor de dicha variable. Los patrones permiten utilizar los mismos comodines y reglas de expansión que los nombres de fichero. De este modo, podemos hacer coincidir un número arbitrario de patrones. Cada conjunto de comandos debe terminar con un doble punto y coma (;;) y la sentencia case se cierra con la cadena esac.

Durante la ejecución, bash ejecuta los comandos asociados con el primer patrón que coincida con la palabra. La ejecución saltará después a la línea que sigue a la sentencia esac,  los comandos intermedios no se ejecutarán. Si no coincide ningún patrón con la palabra, no se ejecutará ningún código contenido en la sentencia case. Debemos incluir una condición por defecto que utilice asterisco (*) como patrón para que coincida con cualquier palabra y realizar las ejecuciones pertinentes en caso de que ninguna sentencia case coincida con la palabra.