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 ] )
[…] variable. No incluye ninguna funcionalidad nueva que no pueda ser realizada con el uso del comando if, pero en ciertos casos la sintaxis es más sencilla, intuitiva y directa. Con el comando case se […]
[…] expresiones que podemos usar como condición ya las ilustramos con el comando condicional if y puedes consultarlas en ese enlace. Se puede usar el comando continue para saltar a la siguiente […]
[…] na aula algo sobre os condicionais tipo if nun script. Podedes obter exemplos e máis información aquí e […]
alumno
me podeis comer los cojones por debajo del culo cerdos
xD
@ALUMNO
comeme los mios guarro
@ALUMNO @Profe comedmelos a mi hijos de puta
Os pegan en casa chavales
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.
burrum burrum
@Alumno @Profe y porque no vienen y me los comen a mi
@ALUMNO
fuiste alumno de abel??????
El de abajo la chupa
Clang
Its like you read my mind! You seem to know a lot about this, like you wrote the book in it or something.
I think that you can do with some pics to drive the message home
a little bit, but other than that, this is excellent blog.
A fantastic read. I’ll certainly be back.