about_Switch
Kısa açıklama
Birden çok if
deyimi işlemek için anahtarın nasıl kullanılacağını açıklar.
Uzun açıklama
Betik veya işlevdeki bir koşulu denetlemek için deyimini if
kullanın. deyimi if
, değişkenlerin değeri ve nesnelerin özellikleri dahil olmak üzere birçok koşul türünü denetleyebilir.
Birden çok koşulu denetlemek için deyimini switch
kullanın. deyimi switch
bir dizi if
deyimle eşdeğerdir, ancak daha basittir. deyimi her switch
koşulu ve isteğe bağlı eylemi listeler. Bir koşul elde edilirse, eylem gerçekleştirilir.
deyimi switch
ve $switch
otomatik değişkenlerini kullanabilir$_
. Daha fazla bilgi için bkz . about_Automatic_Variables.
Sözdizimi
Temel switch
deyim aşağıdaki biçime sahiptir:
Switch (<test-expression>)
{
<result1-to-be-matched> {<action>}
<result2-to-be-matched> {<action>}
}
if
Eşdeğer deyimler şunlardır:
if (<result1-to-be-matched> -eq (<test-expression>)) {<action>}
if (<result2-to-be-matched> -eq (<test-expression>)) {<action>}
<test-expression>
, bir değer döndürmek için ifade modunda değerlendirilen tek bir ifadedir.
<result-to-be-matched>
değeri giriş değeriyle karşılaştırılan bir ifadedir. İfadeler değişmez değerler (dizeler veya sayılar), değişkenler ve boole değeri döndüren betik blokları içerir.
Sayı olarak tanınmayan tüm sıralanmamış değerler dize olarak kabul edilir.
Karışıklığı veya istenmeyen dize dönüştürmeyi önlemek için her zaman dize değerlerini tırnak içine almalısınız. İfadenin doğru değerlendirildiğinden emin olmak için tüm ifadeleri ()
parantez içine alın ve alt ifadeler oluşturur.
Değerin karşılaştırma ifadesinin <result-to-be-matched>
sol tarafında olduğunu anlamak önemlidir. Bu, sonucunun <test-expression>
sağ tarafta olduğu ve karşılaştırma için sol taraftaki değerin türüne dönüştürülebileceği anlamına gelir. Daha fazla bilgi için bkz. about_Comparison_Operators
Değer default
, başka eşleşme olmadığında kullanılan eylem için ayrılmıştır.
Otomatik $_
değişken, deyimine switch
geçirilen ifadenin değerini içerir ve deyimleri kapsamında <result-to-be-matched>
değerlendirme ve kullanım için kullanılabilir.
Deyimin tam switch
söz dizimi aşağıdaki gibidir:
switch [-regex | -wildcard | -exact] [-casesensitive] (<test-expression>)
{
"string" | number | variable | { <value-scriptblock> } { <action-scriptblock> }
default { <action-scriptblock> } # optional
}
veya
switch [-regex | -wildcard | -exact] [-casesensitive] -file filename
{
"string" | number | variable | { <value-scriptblock> } { <action-scriptblock> }
default { <action-scriptblock> } # optional
}
Parametre kullanılmazsa, switch
Exact parametresini kullanmakla aynı şekilde davranır. Değer için büyük/küçük harfe duyarlı olmayan bir eşleşme gerçekleştirir. Değer bir koleksiyonsa, her öğe göründüğü sırayla değerlendirilir.
Deyimi en switch
az bir koşul deyimi içermelidir.
Yan default
tümcesi, değer koşullardan herhangi biriyle eşleşmediğinde tetikleniyor. Deyimindeki if
bir else
yan tümceye eşdeğerdir. Her switch
deyimde yalnızca bir default
yan tümceye izin verilir.
switch
aşağıdaki parametrelere sahiptir:
- Joker karakter - Koşulun bir joker karakter dizesi olduğunu gösterir. Match yan tümcesi bir dize değilse, parametre yoksayılır. Karşılaştırma büyük/küçük harfe duyarlı değildir.
- Tam - Bir dizeyse match yan tümcesinin tam olarak eşleşmesi gerektiğini gösterir. Match yan tümcesi bir dize değilse, bu parametre yoksayılır. Karşılaştırma büyük/küçük harfe duyarlı değildir.
- CaseSensitive - Büyük/küçük harfe duyarlı bir eşleşme gerçekleştirir. Match yan tümcesi bir dize değilse, bu parametre yoksayılır.
- File- Bir yerine bir dosyadan
<test-expression>
girdi alır. Birden çok Dosya parametresi dahil edilirse, yalnızca sonuncusu kullanılır. Dosyanın her satırı deyimi tarafındanswitch
okunur ve değerlendirilir. Karşılaştırma büyük/küçük harfe duyarlı değildir. - Regex - Değerin koşulla normal ifade eşleştirmesini gerçekleştirir. Match yan tümcesi bir dize değilse, bu parametre yoksayılır.
Karşılaştırma büyük/küçük harfe duyarlı değildir. Otomatik
$matches
değişken, eşleşen deyim bloğu içinde kullanılabilir.
Not
Regex ve Joker Karakter gibi çakışan değerler belirtilirken, belirtilen son parametre önceliklidir ve çakışan tüm parametreler yoksayılır. Birden çok parametre örneğine de izin verilir. Ancak, yalnızca listelenen son parametre kullanılır.
Örnekler
Aşağıdaki örnekte deyimi, switch
3 test değerini koşulların her biri ile karşılaştırır. Test değeri koşulla eşleştiğinde eylem gerçekleştirilir.
switch (3)
{
1 {"It is one."}
2 {"It is two."}
3 {"It is three."}
4 {"It is four."}
}
It is three.
Bu basit örnekte değer, 3 değeri için bir eşleşme olsa bile listedeki her koşulla karşılaştırılır. Aşağıdaki switch
deyim, 3 değeri için iki koşula sahiptir. Varsayılan olarak tüm koşulların test edilmiş olduğunu gösterir.
switch (3)
{
1 {"It is one."}
2 {"It is two."}
3 {"It is three."}
4 {"It is four."}
3 {"Three again."}
}
It is three.
Three again.
bir eşleşmeden switch
sonra karşılaştırmayı durdurmak için öğesini yönlendirmek için deyimini break
kullanın. deyimi break
deyimini switch
sonlandırır.
switch (3)
{
1 {"It is one."}
2 {"It is two."}
3 {"It is three."; Break}
4 {"It is four."}
3 {"Three again."}
}
It is three.
Test değeri dizi gibi bir koleksiyonsa, koleksiyondaki her öğe göründüğü sırayla değerlendirilir. Aşağıdaki örneklerde 4 ve sonra 2 değerlendirilir.
switch (4, 2)
{
1 {"It is one." }
2 {"It is two." }
3 {"It is three." }
4 {"It is four." }
3 {"Three again."}
}
It is four.
It is two.
Tüm break
deyimler, aşağıdaki örnekte gösterildiği gibi her değere değil koleksiyona uygulanır. deyimi switch
, 4 değerinin break
koşulundaki deyimi tarafından sonlandırılır.
switch (4, 2)
{
1 {"It is one."; Break}
2 {"It is two." ; Break }
3 {"It is three." ; Break }
4 {"It is four." ; Break }
3 {"Three again."}
}
It is four.
Bu örnekte deyimi, switch
karma tablodaki değerin türünü test etme işlemidir. Yürütülecek betik engellemesini seçmek için boole değeri döndüren ve ifadesini kullanmanız gerekir.
$var = @{A = 10; B = 'abc'}
foreach ($key in $var.Keys) {
switch ($var[$key].GetType()) {
{ $_ -eq [int32] } { "$key + 10 = $($var[$key] + 10)" }
{ $_ -eq [string] } { "$key = $($var[$key])" }
}
}
A + 10 = 20
B = abc
Bu örnekte, dize veya sayısal veri olmayan bir nesne öğesine switch
geçirilir. nesnesi switch
üzerinde bir dize zorlaması gerçekleştirir ve sonucu değerlendirir.
$test = @{
Test = 'test'
Test2 = 'test2'
}
$test.ToString()
switch -Exact ($test)
{
'System.Collections.Hashtable'
{
'Hashtable string coercion'
}
'test'
{
'Hashtable value'
}
}
System.Collections.Hashtable
Hashtable string coercion
Bu örnekte eşleşen bir büyük/küçük harf olmadığından çıkış yoktur.
switch ("fourteen")
{
1 {"It is one."; Break}
2 {"It is two."; Break}
3 {"It is three."; Break}
4 {"It is four."; Break}
"fo*" {"That's too many."}
}
yan tümcesini default
ekleyerek, başka bir koşul başarılı olmadığında bir eylem gerçekleştirebilirsiniz.
switch ("fourteen")
{
1 {"It is one."; Break}
2 {"It is two."; Break}
3 {"It is three."; Break}
4 {"It is four."; Break}
"fo*" {"That's too many."}
Default {
"No matches"
}
}
No matches
"On dört" sözcüğünün bir servis talebiyle eşleşmesi için veya -Regex
parametresini -Wildcard
kullanmanız gerekir.
PS> switch -Wildcard ("fourteen")
{
1 {"It is one."; Break}
2 {"It is two."; Break}
3 {"It is three."; Break}
4 {"It is four."; Break}
"fo*" {"That's too many."}
}
That's too many.
Aşağıdaki örnekte parametresi kullanılır -Regex
.
$target = 'https://bing.com'
switch -Regex ($target)
{
'^ftp\://.*$' { "$_ is an ftp address"; Break }
'^\w+@\w+\.com|edu|org$' { "$_ is an email address"; Break }
'^(http[s]?)\://.*$' { "$_ is a web address that uses $($matches[1])"; Break }
}
https://bing.com is a web address that uses https
Aşağıdaki örnekte betik bloklarının deyim koşulları olarak switch
kullanımı gösterilmektedir.
switch ("Test")
{
{$_ -is [String]} {
"Found a string"
}
"Test" {
"This $_ executes as well"
}
}
Found a string
This Test executes as well
Aşağıdaki örnek, iki tarih değeri içeren bir diziyi işler. her <value-scriptblock>
tarihin Year özelliğini karşılaştırır. , <action-scriptblock>
bir karşılama iletisi veya 2022 yılının başına kadar olan gün sayısını görüntüler.
switch ((Get-Date 1-Jan-2022), (Get-Date 25-Dec-2021)) {
{ $_.Year -eq 2021 } {
$days = ((Get-Date 1/1/2022) - $_).days
"There are $days days until 2022."
}
{ $_.Year -eq 2022 } { 'Welcome to 2022!' }
}
Değer birden çok koşulla eşleşiyorsa, her koşul için eylem yürütülür. Bu davranışı değiştirmek için veya continue
anahtar sözcüklerini kullanınbreak
.
anahtar break
sözcüğü işlemeyi durdurur ve deyiminden switch
çıkar.
anahtar continue
sözcüğü geçerli değeri işlemeyi durdurur, ancak sonraki değerleri işlemeye devam eder.
Aşağıdaki örnek bir sayı dizisini işler ve tek veya çift olup olmadığını görüntüler. Negatif sayılar anahtar sözcüğüyle continue
atlanır. Sayı olmayan bir değerle karşılaşılırsa yürütme anahtar sözcüğüyle break
sonlandırılır.
switch (1,4,-1,3,"Hello",2,1)
{
{$_ -lt 0} { continue }
{$_ -isnot [Int32]} { break }
{$_ % 2} {
"$_ is Odd"
}
{-not ($_ % 2)} {
"$_ is Even"
}
}
1 is Odd
4 is Even
3 is Odd
Ayrıca bkz.
PowerShell