Home > Comandos Avanzados, Linux > Comando if en Linux

Comando if en Linux

October 24th, 2013

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 ] )

 

 

 

Comandos Avanzados, Linux

  1. November 10th, 2021 at 19:19 | #1

    alumno

  2. November 10th, 2021 at 19:19 | #2

    me podeis comer los cojones por debajo del culo cerdos

  3. November 10th, 2021 at 19:19 | #3

    xD

  4. June 24th, 2022 at 04:24 | #4

    @ALUMNO
    comeme los mios guarro

  5. UwU
    October 14th, 2022 at 07:34 | #5

    @ALUMNO @Profe comedmelos a mi hijos de puta

  6. OwO
    November 8th, 2022 at 12:10 | #6

    Os pegan en casa chavales

  7. Joder deshacer
    January 27th, 2023 at 01:51 | #7

    Buenas. Quisiera aportar que no me fucionó el == para comparar una variable con un entero (uso el ultimo ubuntu al dia de la fecha). No se si es porque no usé comillas o por que cojones podrá haber sido, pero el -eq si funcó con el resto del codigo exactamente igual. Gracias, ese operador no lo conocía.

  8. opel corsa
    January 27th, 2023 at 18:18 | #8

    burrum burrum

  9. Director
    February 9th, 2023 at 03:42 | #9

    @Alumno @Profe y porque no vienen y me los comen a mi

  10. Yoel
    May 26th, 2023 at 08:32 | #10

    @ALUMNO
    fuiste alumno de abel??????

  11. Paja
    September 19th, 2023 at 20:34 | #11

    El de abajo la chupa

  12. Paja
    September 19th, 2023 at 20:35 | #12

    Paja :
    El de arriba la chupa

  13. Metal Pipe
    February 20th, 2024 at 13:02 | #13

    Clang

  1. October 28th, 2013 at 12:12 | #1
  2. November 18th, 2013 at 15:57 | #2
  3. March 27th, 2017 at 09:44 | #3