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:
Como você pode ver, essa janela é dividida em três painéis:
- painel de scripts – onde você cria seus arquivos de script;
- painel de comando (no meio) – onde você pode digitar comandos powershell isoladamente, da mesma forma que faria no console;
- 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:
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.
Posted on março 4, 2011 by elemarjr
0