Comando if en Linux

Regla mnemotécnica

if: Conjunción si en ingles.

Estructura del condicional

El condicional if es un comando que nos permite ejecutar una secuencia de comandos dependiendo de la condición especificada. Con la misma podemos controlar la ejecución de un código en base a las necesidades establecidas por los condicionantes.

El modo mas simple de una sentencia condicional es:

if [ condición ]
then
    comandos 
fi

o en una única línea

if [ condición ] ; then comandos ; fi

En los siguientes ejemplos usaremos la primera sintaxis por ser más clara. En el ejemplo previo, si la condición se cumple se ejecutarán los comandos que introduzcamos hasta el cierre del condicional con fi.  Hay que tener en cuenta que la condición ha de ir entre corchetes [ ] respetando los espacios en blanco entre los corchetes y la condición. Una versión algo más compleja puede incluir más posibles condiciones:

if [ condición-1 ]
then
    comandos1
elif [ condición-2 ]
then
    comandos-2
fi

donde elfi es una contracción de else if. Primero se evalua la condición-1 y si se cumple se ejecutan los comandos-1 y se sale del condicional, no se evalúan los siguientes. Si no se cumple la condición-1 se evalúa la condición-2 y si se cumple se ejecutan los comandos-2 y si no se sale del condicional. Se pueden escribir tantos elif como se desee. La última versión y más compleja estructura de condicional incluye la condición final else:

if [ condición-1 ]
then
    comandos-1
elif [ condición-2 ]
then
    comandos-2
else
    comandos-3
fi

Aquí si no se cumple la condición-1 ni la condición-2 se entra en el else y se ejecutan los comandos-3. Veamos un ejemplo.

a=hola
if [ $a == 1  ]
then
    echo "a es igual a 1"
elif [ $a == "adios" ]
then
    echo "a es igual a adios"
else
    echo "a nos es ni 1 ni adios"
fi

En este caso evidentemente veremos en pantalla el último mensaje “a no es ni 1 ni adios”.  Observemos  como la condición de igual se construye con dos signos [ a == 1] dado que con [ a = 1 ] lo que estamos haciendo es asignar a la variable a el valor 1. Algunos de los condicionantes más comunes son:

 == Igual que, tanto para números enteros como palabras
!= Diferente que, tanto para números enteros como palabras
-eq Igual que (equal), sólo para números enteros
-ne Diferente que (non equal), sólo para números enteros
-gt Mayor que (greater than)
-ge Mayor o igual que (greater or equal than)
-lt Menor que (less than)
-le Menor o igual que (less or equal than)
! Negación, invierte el condicional
-f nombre El fichero regular nombre existe
-d nombre El directorio nombre existe

Ejemplos

Tres breves ejemplos. En el primero verificamos si el fichero regular datos.txt existe y en ese caso lo mostramos:

if [ -f datos.txt ]
then
    echo "datos.txt existe"
    cat datos.txt
fi

En el segundo ejemplo verificamos si el fichero regular datos.txt no existe y en ese caso lo creamos vacío:

if [ ! -f datos.txt ]
then
    echo "datos.txt existe"
    touch datos.txt
fi

En el tercer ejemplo usamos la salida de un comando dentro del condicional. Para ellos listaremos en un columna los ficheros y directorios del directorio actual terminados en txt con el comando ls, le pasaremos el resultado con una tubería (|) al comando wc y contaremos con este el número de ficheros Para tratar la salida de un comando como variable este ha de ir dentro de $( ).

#Primero simplemente mostramos el resultado para verificar
ls *txt |wc 
#Ahora ejecutamos el ejemplo de condicional
if [ $(ls *txt |wc) -gt 0 ]
then
    echo "Existen ficheros txt. Los borramos"
    rm *txt
fi

En este script hemos borrado los ficheros *txt y hemos evitado que el script de error en caso de no existir ninguno.

Condicionales complejas

Se pueden construir condicionales complegas donde se conjugan varias de ellas a través de los operadores los booleanos “y” &&, “o” (||) y negación (!), este último que ya hemos visto. Ilustrémolos con un par de ejemplos en los que usaremos comando date para obtener información sobre el día de hoy. Con “o” basta que se cumpla una de las dos condiciones :

#Asignamos a la variable today el día de la semana.
today=$(date +%A)
#Evaluamos el condicional.
if [ $today == "lunes" ] || [ $today == "martes" ]; then
    echo "Hoy es lunes o martes."
fi

Con “y” han de cumplirse ambas condiciones:

#Asignamos a la variable today el día de la semana.
dia=$(date +%e)
mes=$(date +%B)
#Evaluamos el condicional.
if [ $mes == "marzo" ] && [ $dia == "13" ]; then
    echo "Hoy es mi cumpleaños."
fi

El operador && siempre se evalua antes que ||, pero se puede alterar esto agrupando los comando con paréntesis. Por ejemplo:

( [  cond-1 ] || [ cond-2 ] ) && ( [  cond-3 ] || [ cond-4 ] )

 

 

 

17 comments to Comando if en Linux

Leave a Reply