Windows Powershell Switch 语句

 更新时间:2014年10月02日 12:03:43   投稿:hebedich  
如果语句中有多路分支,使用IF-ELSEIF-ELSE不友好,可以使用Switch,看起来比较清爽一点。

下面的例子将If-ElseIF-Else转换成Switch语句

复制代码 代码如下:

# 使用 IF-ElseIF-Else
If( $value -eq 1 )
{
    "Beijing"
}
Elseif( $value -eq 2)
{
    "Shanghai"
}
Elseif( $value -eq 3 )
{
    "Tianjin"
}
Else
{
    "Chongqing"
}
 
# 使用 Switch
switch($value)
{
    1 {"Beijing"}
    2 {"Shanghai"}
    3 {"Tianjin"}
    4 {"Chongqing"}
}

1

测试取值范围

使用 Switch 时缺省的比较运算符为 -eq 等于,你也可以自己定制比较条件,将条件放在花括号中,必须保证条件表达式的返回值为布尔类型”$True”或”$False”

复制代码 代码如下:

$value=18
# 使用 Switch 测试取值范围
switch($value)
{
    {$_ -lt 10} {"小于10"}
    10  {"等于10"}
    {$_  -gt 10} {"大于10"}
}
#输出
#大于10

没有匹配条件

在IF-Else语句中如果没有合适的条件匹配,可以在Else中进行处理,同样在Switch语句中如果case中没有条件匹配,可以使用关键字Default进行处理。
同样是上面的例子,稍加修改:

复制代码 代码如下:

$value=-7
# 使用 Switch 测试取值范围
switch($value)
{
    {($_ -lt 10) -and ( $_ -gt 0) }  {"小于10"}
    10  {"等于10"}
    {$_  -gt 10} {"大于10"}
    Default {"没有匹配条件"}
}
#Output:
#没有匹配条件

多个条件匹配

如果case中有多个条件匹配,那么每个匹配的条件都会进行处理,例如:

复制代码 代码如下:

$value=2
# 使用 Switch 测试取值范围
switch($value)
{
    {$_ -lt 5 }  { "小于5" }
    {$_ -gt 0 }   { "大于0" }
    {$_ -lt 100}{ "小于100"}
    Default {"没有匹配条件"}
}
 
#小于5
#大于0
#小于100

如果碰到匹配条件时只处理一次,可以使用Break关键字

复制代码 代码如下:

$value=99
# 使用 Switch 测试取值范围
switch($value)
{
    {$_ -lt 5 }   { "小于5"; break}
    {$_ -gt 0 }   { "大于0"; break}
    {$_ -lt 100}  { "小于100"; break}
    Default {"没有匹配条件"}
}
 
#大于0

比较字符串

之前的条件比较的都是数字,接下来比较字符串,默认的条件判断为-eq ,我们知道在Powershell中字符串的使用-eq比较大小写不敏感,所以才有下面的例子:

复制代码 代码如下:

$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

大小写敏感

怎样在比较字符串时能够恢复为大小写敏感模式,Switch有一个-case 选项,一旦指定了这个选项,比较运算符就会从-eq 切换到 -ceq,即大小写敏感比较字符串:

复制代码 代码如下:

$domain="www.jb51.net"
#大小写敏感
switch -case ($domain)
{
    "Www.jB51.net" {"Ok 1"}
    "www.JB51.net" {"Ok 2" }
    "www.jb51.net" {"Ok 3"}
}
#Ok 3

使用通配符

字符串非常特殊,可是使用通配符,幸运的是Powershell也支持,果然Power啊。但是在Switch语句后要指定 -wildcard 选项

复制代码 代码如下:

$domain="www.jb51.net"
#使用通配符
switch -wildcard($domain)
{
    "*"     {"匹配'*'"}
    "*.net" {"匹配*.net" }
    "*.*.*" {"匹配*.*.*"}
}
匹配'*'
匹配*.net
匹配*.*.*

在字符串匹配中,比通配符功能更强大是正则表达式,Powershell的Switch语句也支持,真是太棒了。当然需要给Switch关键字指定选项-regex

复制代码 代码如下:

$mail="www@jb51.net"
#使用通配符
switch -regex ($mail)
{
    "^www"     {"www打头"}
    "net$"     {"net结尾" }
    "d{1,3}.d{1,3}.d{1,3}.d{1,3}" {"IP地址"}
}
 
#www打头
#net结尾

同时处理多个值

Switch支持对集合所有元素进行匹配,下面的例子使用Powershell Switch语句演示打印水仙花数:

复制代码 代码如下:

$value=100..999
switch($value)
{
{[Math]::Pow($_%10,3)+[Math]::Pow( [Math]::Truncate($_%100/10) ,3)+[Math]::Pow( [Math]::Truncate($_/100) , 3) -eq $_} {$_}
}
 
#153
#370
#371
#407

相关文章

  • PowerShell小技巧之发送TCP请求

    PowerShell小技巧之发送TCP请求

    这篇文章主要介绍了使用PowerShell发送TCP请求的小技巧,并把代码分享给大家,有需要的朋友可以参考下,其实可以扩展出很多方面的应用,大家自由发挥吧
    2014-10-10
  • Powershell实现编写和运行脚本

    Powershell实现编写和运行脚本

    本文为那些对学习 Windows PowerShell 命令行和脚本编写环境感兴趣的系统管理员提供了资源。也请告诉我们本网站如何才能对您更有用处。
    2015-09-09
  • 探索PowerShell (四) PowerShell的对象、格式与参数

    探索PowerShell (四) PowerShell的对象、格式与参数

    本节将要给大家介绍一下PowerShell下的对象,基本格式以及参数。依然属于PowerShell的基础
    2012-12-12
  • PowerShell显示隐藏文件和系统文件的方法

    PowerShell显示隐藏文件和系统文件的方法

    这篇文章主要介绍了PowerShell显示隐藏文件和系统文件的方法,重点在于对文件、文件夹属性的介绍,需要的朋友可以参考下
    2014-08-08
  • PowerShell 数组的多种录入方法

    PowerShell 数组的多种录入方法

    这篇文章主要介绍了PowerShell 数组的多种录入方法,需要的朋友可以参考下
    2015-07-07
  • PowerShell脚本开发之对指定IP进行端口扫描

    PowerShell脚本开发之对指定IP进行端口扫描

    在本文通过一段小脚本的方式引入了通过PowerShell实现简单安全渗透功能的想法,首先介绍了该小脚本是如何实现功能的,接下来对创建脚本工具集并导入的方法,随后又在该工具集中创建了Test-TCPPort函数,并介绍了调用方法.
    2014-10-10
  • PowerShell中的变量基础知识介绍

    PowerShell中的变量基础知识介绍

    这篇文章主要介绍了PowerShell中的变量基础知识介绍,本文的知识点是需要牢记的,需要的朋友可以参考下
    2014-08-08
  • Windows Powershell 环境变量

    Windows Powershell 环境变量

    Windows PowerShell提供了一个名为euv的盘符,通过它可以访问传统的环境变量。因此,举个例子来说,Cmd.exe传统命令行中的%TEMP%变量,在PowerShell中对应的表达式就是env:\temp。今天我们就来详细的探讨下Powershell的环境变量
    2014-09-09
  • PowerShell与Python的异同介绍

    PowerShell与Python的异同介绍

    今天给大家聊聊PowerShell和Python之间有哪些共同之处,各自有哪些优势,希望对运维的朋友了解两种语言能提供一些有用的信息,需要的朋友可以参考下
    2023-05-05
  • PowerShell调用Web测试工具Selenium实例

    PowerShell调用Web测试工具Selenium实例

    这篇文章主要介绍了PowerShell调用Web测试工具Selenium实例,又一篇PowerShell操作网页的例子,需要的朋友可以参考下
    2014-07-07

最新评论