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