Capítulo 4: Operaciones básicas con variables

Publicado por P. Ruiz en

Operar con variables lógicas

Las variables de tipo lógico, [bool], únicamente pueden recibir dos tipos de valores: verdadero ($true) o falso ($false). Este valor podemos asignarlo de forma directa o como resultado de una expresión.

Para asignar el valor de forma directa, basta con escribir algo como esto:

PowerShell-UD04-019

Sin embargo, para crear una expresión lógica, necesitaremos una serie de operadores que no hemos visto hasta ahora: los operadores lógicos. Con ellos podemos averiguar, por ejemplo, si dos variables tienen el mismo valor:

PowerShell-UD04-020

En este caso, la variable $igual recibirá el valor $true si el contenido de la variable $a es igual que el contenido de la variable $b.

En caso contrario, recibirá el valor $false.

PowerShell-UD04-021

PowerShell-UD04-022

Además de los operadores básicos de la tabla anterior, disponemos de algunas opciones más avanzadas para trabajar con texto y colecciones de valores. Por ejemplo, podemos utilizar caracteres comodín para saber si un determinado texto se encuentra dentro de otro:

PowerShell-UD04-023

Como puedes suponer, la variable $encontrado recibe el valor $true sólo si el contenido de la variable nombre comienza por las letras Fer.

En la imagen comprobamos el resultado.

PowerShell-UD04-024

Los operadores de este tipo son:

PowerShell-UD04-025

Operadores lógicos

Los operadores lógicos nos permiten unir varias expresiones condicionales en una sola. Por ejemplo, si disponemos de tres variables numéricas y necesitamos saber si una de ellas contiene el valor mayor, podríamos escribir algo así:

PowerShell-UD04-026

En este caso, la variable $mayor recibirá el valor $true sólo cuando el valor de $a sea superior al de $b y $c.

Veamos un ejemplo:

PowerShell-UD04-027

En PowerShell tenemos los siguientes operadores lógicos:

PowerShell-UD04-028

Observa que los primeros tres operadores son binarios. Es decir, obtienen su resultado a partir de dos expresiones de comparación distintos.

Por el contrario, el último operador es unario, porque actúa sobre una sola expresión de comparación, en concreto para invertir su resultado. Además, es el único que puede escribirse de dos formas diferentes: siguiendo la misma estructura que el resto de operadores (-not) o sustituyendo el operador por un signo de admiración (!).

Esta última sintaxis tiene su origen en el lenguaje C y actualmente se utiliza en muchos lenguajes de programación.

Comprobemos los resultados de los ejemplos anteriores:

PowerShell-UD04-029

Operadores de tipo

Permiten comprobar si una variable (o cualquier otro valor) se corresponde con un tipo de dato en particular. Veamos un ejemplo:

PowerShell-UD04-030

En este caso, la variable $esFecha recibe el valor $false, porque el dato, aunque parece una fecha, en realidad ya sabemos que es un texto…

… Y que su tipo de dato es string.

PowerShell-UD04-031

PowerShell-UD04-032

En PowerShell también disponemos del operador -as, que trata de convertir el dato que se encuentre a su izquierda, al tipo que indiquemos a la derecha. Cuando la conversión no sea posible, se producirá un error de ejecución.

Por ejemplo:

PowerShell-UD04-033

El resultado sería este:

PowerShell-UD04-034

Igual que nos ocurría al especificar el tipo de un dato, puede ocurrirnos que la conversión no sea exacta. Como entonces, PowerShell tratará de buscar la solución más adecuada. Por ejemplo, cuando escribimos lo siguiente:

PowerShell-UD04-035

Obtendremos el siguiente resultado:

PowerShell-UD04-036

Sin embargo, cuando esto no sea posible, sencillamente no hará nada. Por ejemplo, si escribimos lo siguiente:

PowerShell-UD04-037

Lo que obtenemos es esto:

PowerShell-UD04-038

Actividades resueltas: Trata de resolver las siguientes cuestiones, antes de consultar la respuesta:

    1. El cmdlet Test-Path -Path $ruta devolverá $true si existe el archivo representado por el texto contenido en la variable $ruta (expresado como una ruta absoluta). Si el archivo no existe, devolverá $false.

      El objetivo de este ejemplo es crear un script que le pida al usuario el nombre de un archivo, sin extensión, y averigüe si existe un archivo de texto, con ese nombre, en la carpeta de documentos del usuario. Para este ejemplo, supondremos que la cuenta del usuario actual se llama, precisamente, usuario.

      PowerShell-UD04-050

    2. Ya conocemos, desde el capítulo 1, el cmdlet Get-ChildItem, que nos lista los archivos contenidos en una ruta. También conocemos el cmdlet Measure-Object, que nos permite contar elementos. Combinando ambas herramientas, podríamos saber, por ejemplo, el número de archivos que hay en una carpeta. Lo haríamos con una sintaxis como esta (dando por hecho que la variable $ruta contiene un texto con la ruta que nos interesa):

      (Get-ChildItem -Path $ruta | Measure-Object).Count

      Partiendo de este conocimiento, imagina que necesitas averiguar si dos de las carpetas de tu ordenador se encuentran vacías. Por ejemplo, la carpeta Descargas y la carpeta Documentos. ¿Sabrías escribir un pequeño script que te diga si se cumple esta condición?

      PowerShell-UD04-051