PowerShell 可以看做是弱类型语言。所谓弱类型语言可以是指不用区分数据类型,不用对数据类型进行转型,数据类型根据赋予它的值确定。
1.变量的命名规范: $ + 其他字符
2.常量的命名规范:Set-Variable 来申明常量,-name 参数用于申明常量名,-value 参数用于申明常量值,-option constant 变示申明当前量为一个常量,常量的申明中常量名不需要加“$”,但使用时需要加上“$”符号
例如:
Set-Variable -name jay -value 2 -option constant
3.PowerShell 可以利用$env:环境变量名来检查这些变量
例如: $env:JAVA_HOME ,也可以通过这个来检查变量是否存在 ---- [String::IsnNullOrEmpty($env:JAVA_HOME)]
PS: 在环境变量不存时,可以创建新的环境变量$env:环境变量名=值的格式用于生成新的环境变量,当这种方式生成的环境变量是临时的,仅在当前的 PowerShell 中有效,重新打开 PowerShell 就没有了
如果需要写入环境变量时,还可以使用
[System.Environment]::SetEnvironmentVariable("testPath","d:/test","machine") 的方法写入到系统环境变量中或者使用
[environment]::SetEnvironmentvariable("Path", ";c:\powershellscript", "User")的方法写入到用户环境变量中
4.运算符
+ 加运算 -减运算 *乘运算 /除运算 %求模运算 +=相加并赋值 -=相减并赋值 ++自增运算 --自减运算
5. 数组
所谓数组,是有序的元素序列。
在数组的使用过程中需要提前定义数组,也就是申明数组
$array_name=value0,value1,value2 #定义数组,用逗号分开
$array_name=value0..valuen #连续数字用..
$array_name=@() #定义空数组
6.强类型
PowerShell 的数据类型包括:byte(无符号整数),int(有符号整数),short(有符号短整数),long(有符号长整数),char(字符类型),double(双精度浮点数),float(单精度浮点数),string(字符串)
7.关于字符串的一些方法
* 代表一个字符串
+ 合并两个字符串
-replace,-ireplace 替换字符串,大小写不敏感
-creplace 替换字符串,大小写敏感
-eq, -ieq 验证是否相等,大小写不敏感
-ceq 验证是否相等,大小写敏感
-like,-ilike 验证字符串包含关系,允许模式匹配,大小写不敏感
-clike 验证字符串包含关系,允许模式匹配,大小写敏感
-notlike,-inotlike 验证字符串不包含关系,允许模式匹配,大小写不敏感
-cnotlike 验证字符串不包含关系,允许模式匹配,大小写敏感
.Contains() 验证是否包含关系,大小写敏感
.Split() 字符串拆分,以空格分隔
.Split(str) 字符串拆分,以指定子串分隔
.CompareTo(str) 字符串比较
.Length 获取字符串长度
.Insert(int,str) 在指定位置插入子串,下标从 1 开始
.Remove(start,length) 删除从指定位置开始到指定长度的子串,下标从 1开始
.Trim() 去掉字符串前后白空格
.Substring(start,end) 截取字符串子串
.IndexOf(str) 查找指定字符串在此字符串中第一次出现的位置
.LastIndexOf(str) 查找指定字符串在此字符串中最后一次出现的位置
.StartWith(str) 判断此字符串是以指定字符串开始
.EneWith(str) 判断此字符串是以指定字符串结束
.Equals() 判断两个字符串是否相等
字符串格式化是在字符串后加上-f 参数,并引入占位符和变量的方法。
例如: "hello-world {0}" -f $data
8.逻辑控制语句
if-else : 当分支只有两种时,我们可以使用此结构
if-elif-else : 当分支超过两个,仅仅使用 if-else 结构明显不能满足要求了,这个时候可以在中间加上一个或多个 elif 的条件来满足需求
if-if : 多个 if 放在一起,这种结构有个特点,它不会像前面的结构那样,只要满足其中一个条件,执行相应的代码后就跳出整个分支结构,而此结构不但会执行首个满足条件的分支,它甚至会到每一个 if 分支里都去验证一下条件是否为 True,如果条件依然满足,程序将继续运行该条件中的语句。
嵌套 if 语句,可以把 if...elif...else 结构放在另外一个 if...elif...else 结构中
if(表达式 1){
语句
if(表达式 2){
语句
}elseif(表达式 3){
语句
}else{
语句
9.逻辑运算符
-not 非运算,表达式为 true 则返回 false,否则返回 true
-or 或运算,有一个表达式为 true 则返回 true
-and 与运算,两个表达式都为 true 才返回 true
-xor 逆或运算
10.关系运算符
-eq 检测两个数是否相等,相等返回 true。$a -eq $b
-ne 检测两个数是否不相等,不相等返回 true。$a -ne $b
-gt 检测左边的数是否大于右边的,如果是,则返回 true。$a -gt $b
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。$a -ge $b
-lt 检测左边的数是否小于右边的,如果是,则返回 true。$a -lt $b
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。$a -le $b
[String]::IsNullOrEmpty(str) 判断字符串是否为空
-match 判断字符串是否匹配给定的正则表达式
11.正则表达式
^ 在字符串的开始匹配
\B 不在单词的边界匹配
. 匹配除了换行符意外的任意字符
\Z 在字符串的结尾匹配(包含多行文本)
[^abc] 匹配除了包含在中括号的任意字符
\uFFFF 匹配 Unicode 字符的十六进制代码 FFFF。例如,欧元符号的代码 20AC
[abc] 匹配括号中指定的任意一个字符
\v 匹配纵向制表符(ASCII 11)
[a-z] 匹配括号中指定的任意区间中任意一个字符 \w 匹配字符,数字和下划线
[^a-z] 匹配除了包含在中括号指定区间字符的字符 \W 匹配匹配字符,数字和下划线意外的字符
\a 响铃字符(ASCII 7)
\xnn 匹配特殊字符,nn 代表十六进制的 ASCII 码
\c or \C 匹配 ASCII 中的控制字符,例如 Ctrl+C
.* 匹配任意数量的字符(包括 0 个字符)
\d 匹配数字字符,等同于[0-9]
* 匹配一个元素 0 次或者多次(最大限度地匹配)
\D 匹配数字以外的字符,等同于[^0-9]
*? 匹配前面的元素零次或者多次(最小限度地匹配)
\e Esc (ASCII 9)
.* 匹配任意个数的任意字符(包括 0 个字符)
\f 换页符(ASCII 15)
? 匹配上一个元素 0 次或者 1 次(最大限度地匹配)
\n 换行符
?? 匹配上一个元素 0 次或者 1 次(最小限度地匹配)
\r 回车符
{n,} 匹配上一个元素至少 n 次
\s
白空格(空格,制表符,新行)
{n,m} 匹配上一个元素 n 至 m 次
\S 匹配(空格,制表符,新行)意外的字符
{n} 匹配上一个元素 n 次
\t 制表符
+ 匹配上一个元素一次或者多次
\A 在字符串的开始匹配(包含多行文本)
$ 在字符串的结尾匹配
\b 在单词的边界匹配
一般校验的格式为: $userinfo -match 正则
12.循环结构
while :
在 PowerShell 中如果需要做不定次数的循环,建议使用 while True 这种结构,while循环对条件控制非常有利
While(判断条件){}
Do-while:
While 循环会先进行条件判断在才开始循环,如果期望优先执行一次则 while 循环就比较吃力了,至少代码量会增加。例如:希望输入一个命令,如果这个命令不是 exit 则执行,如果这个命令不是 exit 则继续执行
for:在明确循环次数的时候建议使用 for 循环
for(变量;控制条件;变量自增){
循环执行
}
foreach 循环在 PowerShell 中是用于循环遍历同组多元素的循环方法,也可以理为循环遍历数组的方法
foreach(变量 in 组){
变量操作
}
循环跳出有两个关键字,continue 和 break,continue 用于表示退出本次循环继续下一次,break 表示退出整个循环。