Estructuras condicionales en Shell Script: if y case
Las sentencias condicionales son estructuras de control que nos permiten ejecutar lineas de código solamente si se cumplen las condiciones que hemos especificado
Recuerda: Para construir condiciones es necesario conocer los comandos que nos permiten realizar operaciones lógicas.
La sentencia IF
Su forma más sencilla es:
if CONDICION; then comandos fi
Si la CONDICION es verdadera, ejecuta los comandos especificados, si es falsa, no hace nada.
A esto le podemos añadir que ejecute otras instrucción únicamente si la condición es falsa:
if CONDICION; then comandos else otros comandos fi
Y por último podemos encadenar distintas condiciones:
if CONDICION; then comandos elif CONDICION; then otros comandos else otros comandos distintos fi
Ejemplo:
if [ $1 -lt 5 ]; then echo “el primer parámetro es menor que cinco” elif [ $1 -gt 5 ]; then echo “el primer parámetro es mayor que cinco” else echo “el primer parámetro es igual que cinco” fi
El comando test es muy utilizado con if, pero esto no quiere decir que se imprescindible. Se puede usar cualquier comando o expresión bien formulada siempre que el resultado sea un valor que signifique verdadero o falso. Recuerdo que hay comandos que devuelven un valor indicando si su función ha tenido éxito o no. Esto es suficiente obtener un valor lógico. Un claro ejemplo es el comando grep que nos indica si ha encontrado alguna línea con el patrón que le pasamos o si no ha encontrado nada.
Ejemplo:
if $(grep -q ^juan: /etc/passd); then echo “El usuario Juan existe” else echo “El usuario Juan NO existe” fi
Nota: la opción -q de
grep
se usa para que no produzca ninguna salida. Es más cómodo que redirigirla con> /dev/null
. La pega es que sí mostraría los errores (por ejemplo si el fichero no existe)
Estructura CASE
La sentencia case ejecutará unas instrucciones u otras en función del valor que encuentre en una variable o expresión. Es útil cuando la cantidad de valores a considerar es elevada ya que es una estructura muy legible y fácil de interpretar. En esta ocasión valor
NO es un únicamente verdadero o falso, sino que contiene un dato y en función de él ejecutaremos una líneas u otras.
case valor in exp1) ... ultimaorden1;; exp2) ... ultimaorden2;; expN) ... ultimaordenN;; esac
En las expresiones podemos usar los mismos comodines que en los nombres de los ficheros: ?, * , [..]
La ultima orden de cada bloque termina con doble punto y coma para indicar que termina el “CASE”
Ejemplo:
case $1 in "rm") echo "has elegido el comando borrar";; "cp") echo "has elegido el comando copiar";; "ls") echo "has elegido el comando listar";; esac
Si queremos poner un valor de “default”, es decir, que se ejecute siempre que no se cumpla ninguno de los valores anteriores podemos usar el *
*) echo "has elegido otro comando";;
Etiqueta:portada