Operadores no PowerShell
LidoNesta aula, você aprenderá sobre os operadores no PowerShell, incluindo aritméticos, de comparação e lógicos, além de suas particularidades. Veremos como utilizá-los em expressões, com exemplos práticos e exercícios para fixação.
Os operadores são fundamentais em qualquer linguagem de programação, e no PowerShell não é diferente. Eles permitem realizar cálculos, comparar valores, combinar condições e manipular dados de forma eficiente. Nesta aula, vamos explorar os principais operadores do PowerShell, suas sintaxes, comportamentos específicos e boas práticas de uso.
Dominar os operadores é essencial para escrever scripts claros e funcionais, seja para automação de tarefas administrativas, manipulação de arquivos ou processamento de dados. Vamos começar com os operadores aritméticos, depois os de comparação, lógicos e, por fim, algumas particularidades que tornam o PowerShell único.
Aritméticos
Os operadores aritméticos no PowerShell são usados para realizar operações matemáticas básicas. Eles funcionam com números, mas também podem ser aplicados a outros tipos de dados, como strings e arrays, o que pode gerar resultados interessantes.
A tabela a seguir resume os operadores aritméticos mais comuns:
| Operador | Descrição | Exemplo | Resultado |
|---|---|---|---|
| + | Soma | 5 + 3 | 8 |
| - | Subtração | 5 - 3 | 2 |
| * | Multiplicação | 5 * 3 | 15 |
| / | Divisão | 10 / 3 | 3.333... |
| % | Módulo (resto da divisão) | 10 % 3 | 1 |
| ** | Potência | 2 ** 3 | 8 |
Um aspecto interessante é que o operador + também concatena strings. Por exemplo:
$nome = "João"
$sobrenome = "Silva"
$nomeCompleto = $nome + " " + $sobrenome
Write-Host $nomeCompleto # Saída: João SilvaAlém disso, você pode usar operadores aritméticos com arrays para concatená-los ou realizar operações elemento a elemento (embora isso seja menos comum). Por exemplo:
$array1 = 1,2,3
$array2 = 4,5,6
$soma = $array1 + $array2 # Concatena os arrays: 1,2,3,4,5,6
$somaÉ importante lembrar que a divisão por zero gera um erro no PowerShell, então sempre verifique os valores antes de dividir.
Comparação (-eq, -lt, -like)
Os operadores de comparação no PowerShell são utilizados para testar relações entre valores. Eles retornam $true ou $false e são amplamente usados em estruturas condicionais como if e switch.
Ao contrário de muitas linguagens que usam símbolos como ==, o PowerShell adota nomes de operadores que começam com hífen. Os principais são:
-eq: igualdade (equal)-ne: diferente (not equal)-gt: maior que (greater than)-ge: maior ou igual (greater or equal)-lt: menor que (less than)-le: menor ou igual (less or equal)-like: correspondência com curinga (wildcard)-notlike: negação do like-match: correspondência com expressão regular-notmatch: negação do match-contains: verifica se uma coleção contém um valor-notcontains: negação do contains
Vejamos exemplos práticos:
$idade = 25
if ($idade -ge 18) {
Write-Host "Maior de idade"
} else {
Write-Host "Menor de idade"
}
$fruta = "banana"
if ($fruta -eq "maçã") {
Write-Host "É uma maçã"
} else {
Write-Host "Não é uma maçã"
}
# -like com curinga
if ($fruta -like "ba*") {
Write-Host "Começa com 'ba'"
}Os operadores de comparação no PowerShell são, por padrão, case-insensitive (não diferenciam maiúsculas de minúsculas). Para diferenciar, você deve usar as versões com c no início: -ceq, -clike, etc. Por exemplo:
"ABC" -eq "abc" # $true
"ABC" -ceq "abc" # $falseOutro ponto importante: ao comparar arrays, -eq retorna os elementos que correspondem, não um booleano. Por exemplo:
$numeros = 1,2,3,4,5
$resultado = $numeros -gt 3
$resultado # Retorna 4 e 5 (como uma coleção)Já -contains verifica se um valor está presente no array e retorna $true ou $false:
$numeros = 1,2,3,4,5
if ($numeros -contains 3) {
Write-Host "O array contém o número 3"
}Lógicos (-and, -or)
Os operadores lógicos no PowerShell permitem combinar múltiplas condições em uma única expressão. Eles são essenciais para criar testes mais complexos. Os principais são:
-and: verdadeiro se ambas as condições forem verdadeiras.-or: verdadeiro se pelo menos uma condição for verdadeira.-xor: verdadeiro se exatamente uma condição for verdadeira (ou exclusivo).-notou!: negação lógica.
Exemplo com -and e -or:
$idade = 25
$temCarteira = $true
if ($idade -ge 18 -and $temCarteira) {
Write-Host "Pode dirigir"
} else {
Write-Host "Não pode dirigir"
}
$dia = "sábado"
if ($dia -eq "sábado" -or $dia -eq "domingo") {
Write-Host "É fim de semana"
}Você pode combinar operadores lógicos para formar condições mais complexas, usando parênteses para agrupar e controlar a precedência:
$usuario = "admin"
$senha = "123"
$ip = "192.168.0.1"
if (($usuario -eq "admin" -and $senha -eq "123") -or $ip -eq "localhost") {
Write-Host "Acesso permitido"
}O operador -not é útil para inverter uma condição:
$arquivoExiste = Test-Path "C:\temp\arquivo.txt"
if (-not $arquivoExiste) {
Write-Host "O arquivo não existe"
}Lembre-se de que o PowerShell avalia as condições em curto-circuito, ou seja, se a primeira condição já determina o resultado, a segunda não é avaliada. Por exemplo, em $false -and (1/0), a divisão não ocorre, evitando erro.
Particularidades
O PowerShell possui algumas particularidades em relação aos operadores que merecem destaque:
- Comparação de strings é case-insensitive por padrão, mas você pode usar as variantes com
cpara tornar sensível a maiúsculas/minúsculas. - Operador
-likeusa curingas como*(qualquer sequência) e?(um caractere). Já-matchusa expressões regulares completas. - Em expressões booleanas, o PowerShell aceita qualquer valor como booleano:
$null,0, string vazia e$falsesão considerados falsos; qualquer outro valor é verdadeiro. - O operador
-eqcom arrays retorna os elementos correspondentes, não um booleano. Para obter um booleano, use-containsou.Contains(). - Atribuição com
=é diferente de comparação; emif ($x = 5)o valor 5 é atribuído a$xe a condição é sempre verdadeira (pois 5 é considerado verdadeiro). Use-eqpara comparar.
Além disso, o PowerShell permite usar operadores de atribuição compostos, como +=, -=, *=, /=, %=, que combinam uma operação aritmética com a atribuição:
$total = 100
$total += 50 # $total = $total + 50 = 150
$total -= 20 # $total = 130
$total *= 2 # $total = 260
Write-Host $totalOutra particularidade é que o PowerShell suporta operadores unários, como ++ e -- para incremento e decremento:
$contador = 0
$contador++ # $contador = 1
$contador-- # $contador = 0Por fim, vale mencionar que os operadores -is e -isnot são usados para testar o tipo de um objeto:
$numero = 42
if ($numero -is [int]) {
Write-Host "É um inteiro"
}Esses são alguns dos operadores e comportamentos que tornam o PowerShell expressivo e poderoso para automação.
Boas Práticas e Observações
Ao usar operadores no PowerShell, siga estas boas práticas:
- Use parênteses para agrupar condições compostas e evitar ambiguidades.
- Preferir
-eqem vez de=em condições para não confundir atribuição. - Esteja ciente da diferença entre
-likee-match: use-likepara padrões simples com curingas e-matchpara expressões regulares. - Evite comparar
$nullcom-eqem arrays, pois o resultado pode ser inesperado; use-contains $nullou.Contains(). - Quando testar se uma variável é
$null, use$null -eq $variavelem vez de$variavel -eq $nullpara evitar problemas quando a variável for um array.
Essas práticas tornarão seus scripts mais legíveis e menos propensos a erros.
Exercícios
- Escreva um script que calcule a área de um retângulo. Solicite ao usuário a largura e a altura, armazene em variáveis e exiba o resultado usando o operador de multiplicação.
- Dada uma variável
$idade, use operadores de comparação para verificar se a pessoa é maior de idade (18 anos ou mais) e exiba uma mensagem adequada. - Crie uma lista de nomes e use o operador
-likepara encontrar todos os nomes que começam com a letra "A". - Use operadores lógicos para verificar se um número é divisível por 3 e por 5 ao mesmo tempo (ou seja, divisível por 15).
- Escreva um script que verifique se uma string fornecida pelo usuário é vazia ou nula, e exiba uma mensagem apropriada.
$largura = Read-Host "Digite a largura"
$altura = Read-Host "Digite a altura"
$area = $largura * $altura
Write-Host "A área do retângulo é: $area"$idade = 20
if ($idade -ge 18) {
Write-Host "Você é maior de idade."
} else {
Write-Host "Você é menor de idade."
}$nomes = "Ana", "Bruno", "Carlos", "Alice", "André"
$nomesComA = $nomes -like "A*"
$nomesComA$numero = 30
if (($numero % 3 -eq 0) -and ($numero % 5 -eq 0)) {
Write-Host "O número é divisível por 3 e por 5."
} else {
Write-Host "O número não é divisível por 3 e por 5."
}$entrada = Read-Host "Digite algo"
if ([string]::IsNullOrEmpty($entrada)) {
Write-Host "A entrada é vazia ou nula."
} else {
Write-Host "Você digitou: $entrada"
}Referências
- about_Operators - PowerShell | Microsoft Learn
- about_Arithmetic_Operators - PowerShell | Microsoft Learn
- about_Comparison_Operators - PowerShell | Microsoft Learn
- about_Logical_Operators - PowerShell | Microsoft Learn
- Capítulo 4 - Operadores (Especificação da linguagem PowerShell)
- PowerShell Operators - SS64.com