Aracılığıyla paylaş


about_If

Kısa açıklama

Bir veya daha fazla koşullu testin sonuçlarına göre deyim listelerini çalıştırmak için kullanabileceğiniz bir dil komutunu açıklar.

Uzun açıklama

Belirtilen bir koşullu test true olarak değerlendirilirse kod bloklarını çalıştırmak için if deyimini kullanabilirsiniz. Ayrıca, önceki tüm testler false olarak değerlendirilirse çalıştırılacak bir veya daha fazla ek koşullu test de belirtebilirsiniz. Son olarak, başka bir koşullu test true olarak değerlendirilmezse çalıştırılacak ek bir kod bloğu belirtebilirsiniz.

Sözdizimi

Aşağıdaki örnekte if deyimi söz dizimi gösterilmektedir:

if (<test1>)
    {<statement list 1>}
[elseif (<test2>)
    {<statement list 2>}]
[else
    {<statement list 3>}]

bir if deyimi çalıştırdığınızda PowerShell, <test1> koşullu ifadesini true veya false olarak değerlendirir. <test1> doğruysa, <statement list 1> komutu çalışır ve PowerShell if deyiminden çıkar. <test1> false ise PowerShell, <test2> koşullu deyimi tarafından belirtilen koşulu değerlendirir.

Boole değerlendirmesi hakkında daha fazla bilgi için bkz. about_Booleans.

<test2> doğruysa, <statement list 2> komutu çalışır ve PowerShell if deyiminden çıkar. Hem <test1> hem de <test2> false olarak değerlendirilirse, <statement list 3> kod bloğu çalıştırılır ve PowerShell if deyiminden çıkar.

Bir dizi koşullu testi zincirleme için birden çok elseif deyimi kullanabilirsiniz. Her test yalnızca önceki tüm testlerin yanlış olması durumunda çalıştırılır. Birçok if deyimi içeren bir elseif deyimi oluşturmanız gerekiyorsa, bunun yerine bir switch deyimi kullanmayı göz önünde bulundurun.

Örnekler:

En basit if deyimi tek bir komut içerir ve herhangi bir elseif deyimi veya else deyimi içermez. Aşağıdaki örnek, if deyiminin en basit biçimini gösterir:

if ($a -gt 2) {
    Write-Host "The value $a is greater than 2."
}

Bu örnekte, $a değişkeni 2'den büyükse koşul true olarak değerlendirilir ve deyim listesi çalıştırılır. Ancak, $a2 küçük veya buna eşitse veya var olan bir değişken değilse, if deyimi bir ileti görüntülemez.

else deyimi eklendiğinde, $a 2'den küçük veya buna eşit olduğunda bir ileti görüntülenir. Sonraki örnekte gösterildiği gibi:

if ($a -gt 2) {
    Write-Host "The value $a is greater than 2."
}
else {
    Write-Host ("The value $a is less than or equal to 2," +
        " is not created or is not initialized.")
}

Bu örneği daha da geliştirmek için, elseif değeri $aeşit olduğunda ileti görüntülemek için 2 deyimini kullanabilirsiniz. Sonraki örnekte gösterildiği gibi:

if ($a -gt 2) {
    Write-Host "The value $a is greater than 2."
}
elseif ($a -eq 2) {
    Write-Host "The value $a is equal to 2."
}
else {
    Write-Host ("The value $a is less than 2 or" +
        " was not created or initialized.")
}

Üçlü operatör söz dizimini kullanma

PowerShell 7.0, üçüncül işlecini kullanarak yeni bir söz dizimi kullanıma sunulmuştur. C# üçüncül işleç söz dizimini izler:

<condition> ? <if-true> : <if-false>

Üçüncül işleç, basitleştirilmiş if-else deyimi gibi davranır. <condition> ifadesi değerlendirilir ve sonuç, hangi dalın daha sonra değerlendirileceğini belirlemek için boole değerine dönüştürülür:

  • <if-true> ifadesi doğruysa <condition> ifadesi yürütülür
  • <if-false> ifadesi false ise <condition> ifadesi yürütülür

Mesela:

$message = (Test-Path $path) ? "Path exists" : "Path not found"

Bu örnekte, $message değeri, Path existsTest-Pathdöndürdüğünde $true'dir. Test-Path $falsedöndüğünde, $message'nin değeri Path not found'tür.

$service = Get-Service BITS
$service.Status -eq 'Running' ? (Stop-Service $service) : (Start-Service $service)

Bu örnekte, hizmet çalışıyorsa durdurulur ve durumu Çalışıyordeğilse başlatılır.

bir <condition>, <if-true>veya <if-false> ifadesi bir komut çağırırsa, bunu parantez içinde sarmalamanız gerekir. Aksi takdirde, PowerShell <condition> ifadesindeki komut için bir bağımsız değişken hatası ve <if-true> ile <if-false> ifadeleri için ayrıştırma hataları oluşturur.

Örneğin, PowerShell bu üçlü dosyalar için özel durumlar oluşturur:

Test-Path .vscode   ? Write-Host 'exists'   : Write-Host 'not found'
(Test-Path .vscode) ? Write-Host 'exists'   : Write-Host 'not found'
(Test-Path .vscode) ? (Write-Host 'exists') : Write-Host 'not found'
Test-Path: A positional parameter cannot be found that accepts argument '?'.
ParserError:
Line |
   1 |  (Test-Path .vscode) ? Write-Host 'exists'   : Write-Host 'not found'
     |                       ~
     | You must provide a value expression following the '?' operator.
ParserError:
Line |
   1 |  (Test-Path .vscode) ? (Write-Host 'exists') : Write-Host 'not found'
     |                                               ~
     | You must provide a value expression following the ':' operator.

** Bu örnek ayrıştırır.

(Test-Path .vscode) ? (Write-Host 'exists') : (Write-Host 'not found')
exists

Ayrıca bakınız