Capítulo 4: Operaciones básicas con variables
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:
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:
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.
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:
Como puedes suponer, la variable $encontrado recibe el valor $true sólo si el contenido de la variable nombre comienza por las letras Fer.
Los operadores de este tipo son:
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í:
En este caso, la variable $mayor recibirá el valor $true sólo cuando el valor de $a sea superior al de $b y $c.
En PowerShell tenemos los siguientes operadores lógicos:
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.
Operadores de tipo
Permiten comprobar si una variable (o cualquier otro valor) se corresponde con un tipo de dato en particular. Veamos un ejemplo:
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…
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:
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:
Sin embargo, cuando esto no sea posible, sencillamente no hará nada. Por ejemplo, si escribimos lo siguiente:
Actividades resueltas: Trata de resolver las siguientes cuestiones, antes de consultar la respuesta:
-
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.
-
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?