pwd赋值给变量 shell_PowerShell 语法入门之变量

本文介绍了PowerShell变量的声明、赋值、类型以及不同作用域,包括局部变量、全局变量、脚本变量和私有变量。此外,还探讨了PowerShell的多元赋值和内置变量,以及如何进行类型转换。最后,讨论了数组和哈希表这两种常用的数据结构。
摘要由CSDN通过智能技术生成

PowerShell 语法在学习语法之前,我们首先必需务必要搞懂几个问题:PowerShell是什么类型的语言,是强类型还是弱类型,是静态的还是动态的?把语言的性质弄清楚,再开始学习语法;有助于我们更好地深入理解。无论学习什么编程语言,了解它是什么类型才是学习其语法的第一步;也是深入学习其精髓所在,更好地区别于其它编程语言。综合以上内容,可得出PowerShell实际上是一门动态的弱类型脚本解释语言。

$a = "PowerShell" # 声明变量a并赋值,用$美元符号标识

$a.GetType() # 获取变量a的数据类型 String:字符串

$local:b # 声明局部变量

$glocal:b = 12 # 定义全局变量

……

# 脚本变量和私有变量,如法炮制(同上)代码演示效果,所用PowerShell版本为5.1

变量修饰符$local ---- 局部变量局部变量,作用范围:变量将只在局部范围内创建。这是未指定范围的变量的默认值。Localvariables可以从源自currentscope的作用域读取,但是不能修改它们$script ---- 脚本变量脚本变量,作用范围:该变量仅在脚本中有效,但在脚本中的所有位置均有效。因此,脚本中的函数可以处理其他变量,而这些变量在脚本中定义时不在函数内。$global ---- 全局变量全局变量,作用范围:这个变量在任何地方都是有效的,即使是在函数和脚本之外。$private ---- 私有变量私有变量,作用范围:该变量将仅在当前作用域中创建,而不会传递到其他作用域。 因此,它只能在当前范围内读写代码演示效果,所用PowerShell版本为5.1,若有不同,请升级版本

PowerShell的变量也能像Python那样进行多元赋值,而且还不是简简单单

$x,$y,$z = 1,-1,1

$x

res: 1

$y

res: -1

$z

res: 1

$i,$j = 0,1,2

$i

res: 0

$j

res: 1,2 # 这里j变量显然变成是数组

$j -is [array]

res: True

# 那试试传入数组,看看行不行

$a,$b = 0,1..5

无法将“System.Object[]”类型的“System.Object[]”值转换为“System.Int32”类型。

# 这里需要转换,加个“()”

$a,$b = 0,(1..5),6,7,8,9,10

$a

res: 0

$b

res: 1

2

3

4

5

6

7

8

9

10

# 奥利给【笑容正逐渐……】

PowerShell 内置变量1.$$

此变量用于表示会话接收到的最后一行中的最后一个令牌。

2.$?

此变量用于表示最后一个操作的执行状态。如果没有错误,则返回True,否则返回False。

3.$^

此变量用于表示会话接收到的最后一行中的第一个令牌。

4.$_

此变量充当$PSItem,它在管道对象中包含当前对象。

5.$args

此变量包含未声明参数的值的数组,这些值传递给脚本,函数或脚本块。

6.$ConsoleFileName

此变量用于表示控制台文件的路径,该文件最近在会话中使用。

7.$Error

此变量用于包含代表最新错误的错误对象数组。

8.$Event

此变量用于包含PSEventArgs的对象。PSEventArgs是用于表示正在处理的事件的对象。

9.$EventSubscriber

此变量用于包含PSEventSubscriber的对象。该对象包含正在处理的事件的事件订阅者。

10.$EventArgs

此变量用于包含一个对象,该对象表示第一个事件的参数。

11.$false

此变量用于表示False。

12.$foreach

此变量用于包含ForEach循环的枚举数。该变量仅在执行ForEach循环时存在。并在循环完成后删除。

13.$Home

此变量用于表示用户主目录的完整路径

14.$input

此变量包含一个枚举器,该枚举器枚举传递给该函数的所有输入。它仅适用于脚本块和功能。

15.$Host

此变量包含一个对象,该对象显示Windows PowerShell的当前主机应用程序。

16.$IsLinux

如果当前会话在Linux操作系统上运行,则此变量值为$True,否则为$False。

17.$IsWindows

如果当前会话在Windows操作系统上运行,则此变量值为$True,否则为$False。

18.$IsMacOS

如果当前会话在MacOS操作系统上运行,则此变量值为$True,否则为$False。

19.$null

此变量用于表示null值或空值。可以使用它来表示脚本和命令中缺少或未定义的值。

20.$PID

此变量显示进程的PID,该进程正在托管当前PowerShell的会话。

21.$PSItem

此变量充当$_,它在管道对象中包含当前对象。

22.$PSHome

此变量表示Windows PowerShell安装目录的完整路径。

23.$PSVersionTable

此变量用于表示只读哈希表,该哈希表显示有关当前会话中运行的PowerShell版本的详细信息。

24.$PWD

此变量用于包含路径对象,该路径对象显示当前目录的完整路径。

25.$ShellId

此变量用于表示当前Shell的标识符。PowerShell 变量类型和"强类型"

PowerShell会根据数据自动分配最适合的数据类型,就不会担心数据超出原定数据类型的上限而导致数据溢出;可以通过GetType()方法中Name属性获取PowerShell为你的变量选择的数据类型,听起来好像很不错!

(1000000000).gettype().name

res :Int32

(10000000000).gettype().name

res :Int64

(3.14).gettype().name

res :Double

(3.14d).gettype().name

res :Decimal

("PowerShell").gettype.name

res :String这种类型自适应也称“弱类型”,但是机子不会像我们那么灵活、多变,就是不太聪明的亚子;如果它一开始就给我的变量赋了错误的类型,我们还没发现这个错误,引发的后果可想而知;感觉自己的命脉都掌握在不太聪明亚子机身上,作为专业【上流】的程序员或脚本开发者一定不允许;所以就有了“强类型”,哪怕赋值时类型不兼容导致报错,毕竟每个变量都清楚知道自己给了什么数据类型。

$i = "11" # 定义一个变量i,这变量是int类型;但赋值时给了字符串

$i.gettype().name # PowerShell自动分配数据类型为字符串,完了GG了【捂脸】【捂脸】;果然它真是不太聪明的亚子机。

[int]$i = "11" # 那就靠人工指定类型

$i.gettype().name # 这时,变量i的数据类型为int32;脸上正逐渐露出满意的【柴犬式微笑】,奥利给,哈哈哈哈哈

[int]$j = "10000000000" # 这里会报错:超出int32上限,数据溢出。

常用的存储数据类型(都有增、删、改、查的操作)数组 === [Array]

$arr1 = @() # 创建空数组

$arr1.count # 验证数组是否为空的,没有元素

res: 0

$arr2 = (1,2,3,4,5) # 定义固定长度的数组

res:1,2,3,4,5

$arr3 = 1..5 # 利用语法糖“..”(运算符)定义数组

res: 1,2,3,4,5

$arr1 -is [Array] # 用类型运算符进行验证是否为数组类型

res: True

1..5 -is [Array] # 可看出“..”,应该是数组运算符

res: True

$arr2.length # 获取数组长度

res: 5

$arr2.count # 获取数组个数

res: 5

$arr2[2] # 获取数组元素,下标从零开始

res: 3

$arr2[1,3,4] # 获取数组多个元素,下标用“,”隔开

res: 2,4,5

$arr4 = $arr2[-1,1,0] # 还可以做数组赋值给变量

$arr4

res: 5,2,1

$arr4 += 6

$arr4 += 7

$arr4

res: 5,2,1,6,7

$arr4[0] = -1

$arr4

res: -1,2,1,6,7

$arr4 = $arr4[1..($arr4.length-1)]

$arr4

res: 2,1,6,7

$arr4.length # 查看数组长度的变化

res: 4

$arr4 = $arr4[0..($arr4.length-2)]

$arr4

res: 2,1,6

$arr3 = $arr3[($arr3.length-1)..0]

$arr3

res: 5,4,3,2,1

$arr5 = $arr3.clone()

$arr5

res: 5,4,3,2,1

$arr3[0] = -1

$arr3

res: -1,4,3,2,1

$arr5

res: 5,4,3,2,1哈希表 === [Hash]

$dict = @{Author = "@莫名的墨迹";Write_Content = "PowerShell"}

$dict

res: Author --- @莫名的墨迹

res: Write_Content --- PowerShell

$key = "Author"

$dict.$key # 访问键来获取键值

res: @莫名的墨迹

$keys = "Author","Write_Content"

$dict[$keys] # 通过创建数组方式,来获取多个键值

res: Author --- @莫名的墨迹

res: Write_Content --- PowerShell

$dict.keys # 也可以通过属性来打印全部键

res: Author Write_Content

$dict1 = @{ Work_Content = 10;Work_Out = 5,2,1}

$dict1.Work_Out

res: 5

res: 2

res: 1

$dict1["Work_Attention"] = 5

$dict

res: Work_Content --- 10

res: Work_Out --- {5,2,1}

res: Work_Attention --- 5

$dict1.remove("Work_Attention")

$key = "Work_Content"

$dict[$key] = 3

$dict[$key]

res: 3

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值