Olá pessoal! Tudo bem? Espero que sim!
Agora que aprendemos sobre os Operadores de Comparação e os Operadores Lógicos, vamos potencializar os testes lógicos em scripts Powershell conhecendo os Operadores Condicionais: If, ElseIf e Else.
If, ElseIf e Else, o que é isso?
Estes três termos representam condições lógicas que podem ser impostas em um script a qualquer momento. Originalmente estes termos vêm da estrutura de decisão de lógica de programação SE-ENTÃO-SENÃO, que representam respectivamente o If, Then e Else. A lógica da utilização destas condições no Powershell não é diferente das outras linguagens de programação, contudo, a sua sintaxe é um pouco diferente.
Sintaxe:
If (<condição 1>) { <comandos para serem executados se a condição 1 for verdadeira> }
ElseIf (<condição 2>) { <se a condição 1 for falsa, executar os seguintes comandos se a condição 2 for verdadeira> }
ElseIf (<condição 3>) { <se a condição 2 for falsa, executar os seguintes comandos se a condição 3 for verdadeira> }
(…)
Else { <comandos para serem executados se nenhuma das condições anteriores forem atendidas> }
Exemplo:
1 2 3 4 5 6 7 8 9 10 |
PS C:\Users\RobotChicken> # Teste condicional simples $valor = "Hello World" If($valor -like "Hello World"){ Write-Output "Olá Mundo!" } Else { Write-Output "Adeus Mundo!"} Olá Mundo! |
Se traduzirmos o script na linguagem literal, basicamente fizemos a seguinte pergunta: “Se o conteúdo da variável $valor é igual a “Hello World”, Então escreva na saída da console “Olá Mundo!”, Senão, escreva na saída da console “Adeus Mundo!”. Como declaramos o valor “Hello World” na variável valor, o retorno foi Olá Mundo. Agora veja o mesmo exemplo só que definindo outro valor para a variável:
1 2 3 4 5 6 7 8 9 10 |
PS C:\Users\RobotChicken> # Teste condicional simples $valor = "Bye World" If($valor -like "Hello World"){ Write-Output "Olá Mundo!" } Else { Write-Output "Adeus Mundo!"} Adeus Mundo! |
Desta vez, como a condição do If não foi atendida, o valor retornado foi o indicado pela operação definida no Else.
If (Se)
O If é um operador condicional que permite fazer uma simples pergunta: “E se?“. Entendendo esta pequena pergunta, você praticamente já sabe como funciona a dinâmica deste operador. Se um valor atender à condição imposta na pergunta E se?, então, podemos realizar uma ação. Conforme a sintaxe, representamos os comandos desta ação entre {} logo após a condição imposta.
Exemplo:
1 2 3 4 5 6 7 8 9 10 |
PS C:\Users\RobotChicken> # Teste condicional simples para retorno de arquivos com determinada extensão $diretorio = "C:\Users\RobotChicken" $arquivos = Get-ChildItem $diretorio If($arquivos -match ".txt"){Write-Output "O diretório $diretorio possui arquivos TXT!"} O diretório C:\Users\RobotChicken possui arquivos TXT! |
No exemplo acima, realizamos um teste lógico simples onde buscamos arquivos com determinada extensão. Como existem arquivos no diretório declarado com a extensão buscada, foi retornado o comando declarado entre {} após a condição do If. Como não declaramos o Else, se a condição imposta não for atendida, o script não retornará um resultado.
ElseIf (Senão, Se)
Após uma negativa da pergunta “E se?”, você tem a possibilidade de fazer uma nova pergunta: “Senão, e se?“. O ElseIf é utilizado para adicionar novas condições se a condição inicial definida no If não for atendida. O ElseIf vai entrar em ação toda vez que um If ou ElseIf anterior retornar Falso. Você pode criar quantos ElseIf’s achar necessários, pois, não existe uma limitação. Quando um teste condicional possui diversos ElseIf’s, o script realizará os testes condicionais recursivamente até uma das condições impostas ser atendida, do contrário, o teste irá executar os comandos atribuídos ao Else, se este for devidamente declarado. Do contrário, o script não retornará nada.
Exemplo (retirando arquivos .txt do diretório):
1 2 3 4 5 6 7 8 9 10 11 12 |
PS C:\Users\RobotChicken> # Teste condicional simples para retorno de arquivos com determinada extensão, com mais de uma condição usando ElseIf $diretorio = "C:\Users\RobotChicken" $arquivos = Get-ChildItem $diretorio If($arquivos -match ".txt"){Write-Output "O diretório $diretorio possui arquivos TXT!"} ElseIf($arquivos -match ".csv"){Write-Output "O diretório $diretorio NÂO possui arquivos TXT!, mas possui CSV!"} O diretório C:\Users\RobotChicken NÂO possui arquivos TXT!, mas possui CSV! |
No exemplo acima realizamos um teste lógico um pouco mais avançado, onde se os arquivos com determinada extensão for encontrado, ele retornará a mensagem definida pelo bloco de comandos definido entre {}. Se esta condição não for atendida, será realizado um novo teste com uma nova extensão. Se esta nova condição for atendida, retornará a mensagem definida pelo bloco de comandos após esta condição. Novamente, como não declaramos o Else, se nenhuma das condições impostas não forem atendidas, o script não retornará um resultado.
Também podemos adicionar múltiplos ElseIf’s seguidos, para caso a condição atual não seja atendida, seja realizado um novo teste lógico (retirando arquivos .txt e .csv do diretório):
1 2 3 4 5 6 7 8 9 10 11 12 |
PS C:\Users\RobotChicken> # Teste condicional simples para retorno de arquivos com determinada extensão, com mais de uma condição usando ElseIf $diretorio = "C:\Users\RobotChicken" $arquivos = Get-ChildItem $diretorio If($arquivos -match ".txt"){Write-Output "O diretório $diretorio possui arquivos TXT!"} ElseIf($arquivos -match ".csv"){Write-Output "O diretório $diretorio NÂO possui arquivos TXT!, mas possui CSV!"} ElseIf($arquivos -match ".ps1"){Write-Output "O diretório $diretorio NÂO possui arquivos TXT!, mas possui PS1!"} O diretório C:\Users\RobotChicken NÂO possui arquivos TXT!, mas possui PS1! |
No exemplo acima, adicionamos dois ElseIf’s para realizar testes caso o If não seja atendido. Como podemos observar, na consulta por arquivos “.txt ou “.csv”, as condições impostas pelo If e o primeiro ElseIf não foram atendidas. Agora quando a condição foi imposta para arquivos “.ps1”, a condição se tornou verdadeira, retornando a mensagem definida pelo bloco de comandos para esta condição. Mais uma vez para esta informação ficar bem fixada, como não declaramos o Else, se nenhuma das condições impostas não forem atendidas, o script não retornará um resultado.
Obs: Também podemos utilizar múltiplos If’s seguidos, para a realização de múltiplos testes condicionais, contudo, diferente do ElseIf, o script obrigatoriamente realizará todos os testes impostos, não dependendo da falha do teste no If inicial para realizar os seguidos. Exemplo (adicionando arquivos .txt, .csv e .ps1 do diretório):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
PS C:\Users\RobotChicken> # Teste condicional simples com múltiplas condições para retorno de arquivos com determinada extensão $diretorio = "C:\Users\RobotChicken" $arquivos = Get-ChildItem $diretorio If($arquivos -match ".txt"){Write-Output "O diretório $diretorio possui arquivos TXT!"} If($arquivos -match ".csv"){Write-Output "O diretório $diretorio possui arquivos CSV!"} If($arquivos -match ".ps1"){Write-Output "O diretório $diretorio possui arquivos PS1!"} O diretório C:\Users\RobotChicken possui arquivos TXT! O diretório C:\Users\RobotChicken possui arquivos CSV! O diretório C:\Users\RobotChicken possui arquivos PS1! |
O que aconteceu com o Then (Então)?
Observando bem a sintaxe do If e ElseIf, percebemos que após a condição imposta, o comando a ser executado é colocado entre chaves ({}). Estas chaves representam o Then (Então).
Else (Senão)
Após negativas de todas as outras condições, ainda é possível fazer uma última pergunta: “Senão?“. O Else é utilizado para determinar comandos a serem executados se a condição imposta no If, ou ElseIf’s não forem atendidas.
Exemplo (retirando arquivos .txt, .csv e .ps1 do diretório):
1 2 3 4 5 6 7 8 9 10 11 12 13 |
PS C:\Users\RobotChicken> # Teste condicional simples para retorno de arquivos com determinada extensão, com mais de uma condição usando ElseIf e Else $diretorio = "C:\Users\RobotChicken" $arquivos = Get-ChildItem $diretorio If($arquivos -match ".txt"){Write-Output "O diretório $diretorio possui arquivos TXT!"} ElseIf($arquivos -match ".csv"){Write-Output "O diretório $diretorio NÂO possui arquivos TXT!, mas possui CSV!"} ElseIf($arquivos -match ".ps1"){Write-Output "O diretório $diretorio NÂO possui arquivos TXT!, mas possui PS1!"} Else{Write-Output "NÃO foram encontrados arquivos com nenhuma das condições impostas!"} NÃO foram encontrados arquivos com nenhuma das condições impostas! |
Desta vez, como nenhuma das condições impostas não foram atendidas, o script retornou a mensagem definida pelo bloco de comandos para o Else.
Conclusão
Com a combinação dos Operadores de Comparação, Lógicos e Condicionais, você estará munido para criar lógicas diferenciadas na hora de pesquisar, obter um valor ou executar uma operação. Por exemplo, com os três operadores, é possível criar um script onde você buscará determinados arquivos com uma nomenclatura e extensão específica e movê-los para outra pasta se atenderem a uma condição que diz que para movê-los, o tamanho dos arquivos não podem ser maiores que 10MB. O mais importante de tudo: quem cria a lógica é você! Eu costumo dizer para alguns colegas e clientes que podemos codificar praticamente tudo no Sistema Operacional Windows, pois, enquanto houver métodos, basta usarmos um pouco da nossa imaginação para pensar fora da caixa e construir soluções inteligentes e funcionais. Então não se acanhe na hora de desenvolver uma lógica desde que ela seja válida e sustentável.
É isso aí galera, por hoje é só. Até o próximo post!
Dúvidas, sugestões, críticas? Entre em contato aqui!
Gostou? Deixe seu comentário e não se esqueçam de curtir a página do Facebook na barra lateral!