The following example converts IF-ELSEIF-ELSE into a switch statement
Copy Code code as follows:
# Use If-elseif-else
If ($value-eq 1)
{
"Beijing"
}
Elseif ($value-eq 2)
{
"Shanghai"
}
Elseif ($value-eq 3)
{
"Tianjin"
}
Else
{
"Chongqing"
}
# Use Switch
Switch ($value)
{
1 {"Beijing"}
2 {"Shanghai"}
3 {"Tianjin"}
4 {"Chongqing"}
}
1
Test range of values
When using Switch, the default comparison operator is-eq equals, you can also customize the comparison conditions, put the conditions in curly braces, you must ensure that the return value of the conditional expression is a Boolean type "$True" or "$False"
Copy Code code as follows:
$value =18
# Use the Switch to test the range of values
Switch ($value)
{
{$_-lt 10} {"Less than 10"}
10 {"Equals 10"}
{$_-GT 10} {"Greater than 10"}
}
#输出
#大于10
No matching Criteria
In a if-else statement, if there is no appropriate matching of conditions, it can be handled in else, also in the switch statement if there is no conditional match in the case, you can use the keyword default for processing.
The same is the case above, slightly modified:
Copy Code code as follows:
$value =-7
# Use the Switch to test the range of values
Switch ($value)
{
{($_-lt)-and ($_-gt 0)} {"Less than 10"}
10 {"Equals 10"}
{$_-GT 10} {"Greater than 10"}
Default {"No Matching Criteria"}
}
#Output:
#没有匹配条件
Multiple Criteria Matching
If more than one condition in the case matches, then each matching condition is processed, for example:
Copy Code code as follows:
$value =2
# Use the Switch to test the range of values
Switch ($value)
{
{$_-lt 5} {"Less than 5"}
{$_-GT 0} {"Greater than 0"}
{$_-LT 100} {"Less than 100"}
Default {"No Matching Criteria"}
}
#小于5
#大于0
#小于100
If you encounter matching criteria only once, you can use the break keyword
Copy Code code as follows:
$value =99
# Use the Switch to test the range of values
Switch ($value)
{
{$_-lt 5} {"Less than 5"; break}
{$_-GT 0} {"Greater than 0"; break}
{$_-LT 100} {"Less than"; break}
Default {"No Matching Criteria"}
}
#大于0
Comparing strings
The previous condition compares the numbers, then compares the string, the default condition judgment is-eq, we know that the use of strings in PowerShell is not sensitive to the-eq of the case, so the following example is available:
Copy Code code as follows:
$domain = "Www.jb51.net"
Switch ($domain)
{
"Www.jB51.net" {"OK 1"}
"Www.JB51.net" {"OK 2"}
"WWW.jb51.NET" {"OK 3"}
}
Ok 1
Ok 2
Ok 3
Case sensitive
How to revert to case sensitive mode when comparing strings, switch has a-case option, and once this option is specified, the comparison operator switches from-eq to-CEQ, which is the case sensitive comparison string:
Copy Code code as follows:
$domain = "Www.jb51.net"
#大小写敏感
Switch-case ($domain)
{
"Www.jB51.net" {"OK 1"}
"Www.JB51.net" {"OK 2"}
"Www.jb51.net" {"OK 3"}
}
#Ok 3
Using wildcard characters
String is very special, but using wildcards, fortunately PowerShell also support, really power ah. However, to specify the-wildcard option after the switch statement
Copy Code code as follows:
$domain = "Www.jb51.net"
#使用通配符
Switch-wildcard ($domain)
{
"*" {"Match ' *"}
"*.net" {"Match *.net"}
"*.*.*" {"Match *.*.*"}
}
Match ' * '
Matching *.net
Matching *.*.*
In string matching, more powerful than wildcard features are regular expressions, and PowerShell switch statements are also supported, which is fantastic. Of course, you need to specify options for the Switch keyword-regex
Copy Code code as follows:
$mail = "Www@jb51.net"
#使用通配符
Switch-regex ($mail)
{
"^www" {"www start"}
"net$" {"Net End"}
' d{1,3}.d{1,3}.d{1,3}.d{1,3} ' {' IP address '}
}
#www打头
#net结尾
Processing multiple values at the same time
The switch supports matching all elements of the collection, and the following example uses the PowerShell switch statement to demonstrate the number of daffodils printed:
Copy Code code as follows:
$value =100..999
Switch ($value)
{
{[Math]::P ow ($_%10,3) +[math]::P ow ([Math]::truncate ($_%100/10), 3) +[math]::P ow ([Math]::truncate ($_/100), 3)-eq $_} {$_}
}
#153
#370
#371
#407