Windows Powershell Switch 语句_PowerShell

下面的例子将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

时间: 2024-10-26 12:41:14

Windows Powershell Switch 语句_PowerShell的相关文章

Windows Powershell Switch 循环_PowerShell

Switch 本是多路分支的关键字,但是在Powershell中由于Switch支持集合,所以也可以使用它进行循环处理.下面举两个例子. 第一个将Foreach循环转换成Switch循环: 复制代码 代码如下: #使用Foreach循环 $nums=10..7 foreach($n in $nums) {     "n=$n" } n=10 n=9 n=8 n=7   #使用Switch循环 $nums = 10..7 Switch ($nums) { Default { "

Windows Powershell IF-ELSEIF-ELSE 语句_PowerShell

Where-Object 进行条件判断很方便,如果在判断后执行很多代码可以使用IF-ELSEIF-ELSE语句.语句模板: 复制代码 代码如下: If(条件满足){ 如果条件满足就执行代码 } Else { 如果条件不满足 } 条件判断必须放在圆括号中,执行的代码必须紧跟在后面的花括号中. 复制代码 代码如下: PS C:Powershell> $n=8 PS C:Powershell> if($n -gt 15) {"$n  大于 15 " } PS C:Powershe

Windows Powershell 自动化变量_PowerShell

Powershell 自动化变量 是那些一旦打开Powershell就会自动加载的变量. 这些变量一般存放的内容包括 用户信息:例如用户的根目录$home 配置信息:例如powershell控制台的大小,颜色,背景等. 运行时信息:例如一个函数由谁调用,一个脚本运行的目录等. PS> $HOME C:\Users\test PS> $currentProcessID=$pid PS> $currentProcessID 5356 PS> Get-Process -Id $pid H

Windows Powershell使用管道_PowerShell

管道并不是什么新事物,以前的Cmd控制台也有重定向的命令,例如Dir | More可以将结果分屏显示. 传统的Cmd管道是基于文本的,但是Powershell是基于对象. PS> ls | Sort-Object -Descending Name | Select-Object Name,Length,LastWriteTime | ConvertTo-Html | Out-File ls.html PS> Get-Content .ls.html Name Length LastWriteT

Windows Powershell ForEach-Object 循环_PowerShell

对管道对象逐个处理 如果使用Get-WmiObject 获取系统中的服务,为了排版可能会也会使用Format-Table对结果进行表格排版. 复制代码 代码如下: PS C:Powershell> Get-WmiObject Win32_Service | Format-Table status,DisplayName -AutoSize status DisplayName ------ ----------- OK     Adobe Acrobat Update Service OK   

Windows Powershell 定义函数_PowerShell

函数是自定义的Powershell代码,有三个原则: 简短:函数名简短,并且显而易见. 聚合:函数可以完成多个操作. 封装和扩展:将一批Powershell语句进行封装,实现全新的功能需求. 函数的结构由三部分组成:函数名,参数,函数体 复制代码 代码如下: Function FuncName (args[]) {       code; } 使用函数作为别名 假如Powershell不支持"cd.." 命令,你可以通过定义函数实现这个功能: 复制代码 代码如下: PS C:Power

Windows Powershell 定义变量_PowerShell

变量可以临时保存数据,因此可以把数据保存在变量中,以便进一步操作. #定义变量 $a=10 $b=4 #计算变量 $result=$a*$b $msg="保存文本" #输出变量 $result $msg 40 保存文本 powershell 不需要显示地去声明,可以自动创建变量,只须记住变量的前缀为$. 创建好了变量后,可以通过变量名输出变量,也可以把变量名存在字符串中.但是有个例外单引号中的字符串不会识别和处理变量名. 选择变量名 在powershell中变量名均是以美元符"

Windows Powershell 环境变量_PowerShell

传统的控制台一般没有象Powershell这么高级的变量系统.它们都是依赖于机器本身的环境变量,进行操作 .环境变量对于powershell显得很重要,因为它涵盖了许多操作系统的细节信息.此外,powershell中的变量只存在于powershell内部的会话中,一旦powershell关闭,这些变量就会自生自灭.但是如果环境变量被更新了,它会继续保存在操作系统中,即使其它程序也可以调用它. 读取特殊的环境变量 通过环境变量读取Windows操作系统的安装路径,和默认应用程序的安装路径. PS>

Windows Powershell 创建数组_PowerShell

在Powershell中创建数组可以使用逗号. PS C:Powershell> $nums=2,0,1,2 PS C:Powershell> $nums 2 0 1 2 对于连续的数字数组可以使用一个更快捷的方法 PS C:Powershell> $nums=1..5 PS C:Powershell> $nums 1 2 3 4 5 数组的多态 象变量一样如果数组中元素的类型为弱类型,默认可以存储不同类型的值. PS C:Powershell> $array=1,"