Powershell para desenvolvedores – Parte 3 – Desvios condicionais e Loops

Publicado em 04/03/2011

1


Olá pessoal, tudo certo?!

Passado algum tempo, voltamos ao Powershell. No primeiro post, apresentei os “primeiros passoas” para utilização dessa ferramenta. Na segundo post, falei sobre operadores e funções. Hoje, vou tratar de desvios condicionais e laços de petição.

Sem mais delongas…

Escrevendo scripts para Powershell

Até aqui, todos os exemplos que foram apresentados eram comandos digitados “um-por-um” no console. Na maioria dos casos é suficiente, em outros tantos não é.

Scripts powershell são salvos em arquivos comuns com extensão .ps1. Você pode criar scripts utilizando o Notepad, se preferir. Eu crio meus scripts usando o PowerShell ISE (que acompanha o Powershell 2). Veja o programa na figura:

image

Como você pode ver, essa janela é dividida em três painéis:

  1. painel de scripts – onde você cria seus arquivos de script;
  2. painel de comando (no meio) – onde você pode digitar comandos powershell isoladamente, da mesma forma que faria no console;
  3. painel de saída (o primeiro, de baixo para cima) – onde são exibidos os resultados de execução dos comandos ou scripts.

Bacana!

Repare que o painel para scripts do powershell suporta “code-completing” e “color-coding”. Além disso, na toolbar você pode perceber algumas ferramentas para apoiar a execução e depuração de scripts. Observe:

image

 

Desvios condicionais simples – if .. elseif .. else

Em powershell, podemos usar desvios condicionais elaborados, semelhantes aos disponíveis em nossas linguagens de programação. Observe:

if ($v -lt 5)
{
    "Menor que 5."
}
elseif ($v -lt 15)
{
    "Menor que 15."
}
elseif ($v -lt 40)
{
    "Menor que 40."
}
else
{
    "Whatever!"
}

O conceito aqui é simples. Não vou explicar como funciona um if, já que essa série é direcionada para desenvolvedores. A única diferença percebida (mesmo) são os operadores de comparação.

Considere esse exemplo um pouco mais elaborado:

if(Get-Process | Where-Object { $_.Name -eq "calc" }) 
{ 
    "Windows calc is Running" 
} 
else 
{ 
    "Windows calc is Not Running" 
}

Esse pequeno script verifica se a calculadora está em execução. Perceba que todo esse script poderia ser digitado em uma única linha dispensando a criação de um arquivo de script.

Só para lembrar: Para executar um arquivo de script (no meu exemplo, if.ps1) é necessário fazer referência ao diretório em que esse arquivo está salvo, mesmo que seja corrente (ex: “./if.ps1”).

Desvios condicionais com múltipla escolha – Switch

Powershell também fornece suporte a desvios condicionais usando switch. Observe:

switch ($v)
{
    {$v -lt 5} { "Menor que 5."; break }
    {$v -lt 15} { "Menor que 15."; break }
    {$v -lt 40} { "Menor que 40."; break }
    40 { "40!"; break }
    default { "Whatever" }
}

Como você pode observar, cada “opção de escolha” consiste de dois blocos.

Repetindo blocos de execução – for

O que você acha de usar o bom e velho for do C# no Powershell? Você pode! Observe:

for ($counter = 1; $counter -le 10; $counter ++)
{
    "Loop number $counter"
}

Veja como é simples. A sintaxe é bem parecida com a que estamos acostumados no C#. Não acha?

Pecorrendo listas – foreach e ForEach-Obejct

Se há for, deve haver foreach. Certo? Certo! Observe:

foreach ($file in dir)
{
    "File length: " + $file.Length
}

Como você já deve saber, dir é o alias para Get-ChildItem. Há um cmdlet com a mesma função de for, trata-se do ForEach-Object. Observe:

dir | ForEach-Object { "File length: " + $_.Length }

Repetindo … Repetindo .. – while / do..while / do..until

Outra semelhanca: Powershell suporta while. Observe:

$response = ""
while ($response -ne "q")
{
    $response = Read-Host "Type something (q to quit)"
}

Também tem do..while. Observe:

$response = ""
while ($response -ne "q")
{
    $response = Read-Host "Type something (q to quit)"
}

E vai além: temos o do..until. Observe:

do
{
    $response = Read-Host "Type something (q to quit)"
} until ($response -eq "q")

 

Por hoje, era isso.

Smiley piscando

Etiquetado:
Publicado em: Sem categoria