Windows PowerShell 学习笔记(二)
程序员文章站
2024-03-15 19:59:54
...
powershell 逻辑控制语句
顺序结构
从上到下,从左到右运行
$xiaoming = "I am the most handsome man of the world."
$xiaoli = "Bullshit!"
write-output("小明说:"+ xiaoming , xiaoli+ "小李嫉妒地说道。")
分支结构
if-else
if-elseif-else
if-if(会执行所有的 if 分支)
分支结构嵌套
逻辑运算符
-not --- 非 运算,表达式为true则返回false,反之返回true
-or --- 或 运算,有一个表达式为true则返回true
-and --- 与 运算,两个表达式均为true才返回true
-xor --- 逆或 运算,
关系运算符
-eq --- 检测两个数是否 相等 ,相等返回true。 $a -eq $b
-ne --- 检测两个数是否 不相等。
-gt --- 检测左边的数是否 大于 右边的数
-ge --- 检测左边的数是否 大于等于 右边的数
-lt --- 检测左边的数是否 小于 右边的数
-le --- 检测左边的数是否 小于等于 右边的数
[String]::IsNullOrEmpty(str) --- 判断字符串是否为空
-match --- 判断字符串是否匹配给定的正则表达式
正则表达式
^ --- 在字符串的开始匹配
. --- 匹配出了换行符之外的任意字符
[^abc] --- 匹配除了包含在中括号的任意字符
[abc] --- 匹配括号中指定的任意一个字符
[a-z] --- 匹配括号中指定的任意区间之中的任意一个字符
[^a-z] --- 匹配除了包含在括号指定区间字符的字符
\B --- 不在单词的边界匹配
\Z --- 在字符串的结尾匹配(包含多行文本)
\uFFFF --- 匹配 Unicode 字符的十六进制代码 FFFF。eg:欧元符号的代码20AC
\v --- 匹配纵向制表符(ASCII 11)
\w --- 匹配字符、数字和下划线
\W --- 匹配字符、数字和下划线以外的字符
\a --- 响铃字符(ASCII 7)
\c or \C ---匹配 ASCII 中的控制字符, eg:Ctrl+C
\d --- 匹配数字字符,等同于[0-9]
\D --- 匹配数字以外的字符,等同于[^0-9]
\e --- Esc (ASCII 9)
\f --- 换页符(ASCII 15)
\n --- 换行符
\r --- 回车符
\s --- 白空格(空格、制表符、新行)
\S --- 匹配(空格、制表符、新行)以外的字符
\t --- 制表符
\A --- 在字符串的开始匹配(包含多行文本)
\b --- 在字符串的边界匹配
\xnn --- 匹配特色字符,nn 代表十六进制的ASCII 码
.* --- 匹配任意数量的字符(包括0个字符)
* --- 匹配一个元素 0 次或多次(最大限度地匹配)
*? --- 匹配前面的元素 0 次或多次(最小限度地匹配)
? --- 匹配上一个元素 0 次或 1 次(最大限度地匹配)
?? --- 匹配上一个元素 0 次或 1 次(最小限度地匹配)
{n,} --- 匹配上一个元素至少 n 次
{n,m} --- 匹配上一个元素 n~m 次
{n} --- 匹配上一个元素 n 次
+ --- 匹配上一个元素 1 次或多次
$ --- 在字符串的结尾匹配
循环结构
while
while(判断条件){
循环语句
}
for
for(定义变量;变量判断;变量自增自减){
循环语句
}
循环控制
Continue --- 退出本次循环
Break --- 退出整个循环
练习
- 从键盘输入一个字符,判断这个字符是数字,还是大写字母,还是小写字母,还是符号。
Write-Output("请输入一个字符:")
[char]$c=Read-Host
[int]$int_char = $c
if(($int_char -ge 48)-and ($int_char -le 57)){
Write-Output("这是一个数字")
}
elseif(($int_char -ge 65)-and ($int_char -le 90)){
Write-Output("这是一个大写字母")
}
elseif(($int_char -ge 97)-and ($int_char -le 122)){
Write-Output("这是一个小写字母")
}
else{
Write-Output("这是一个特殊符号")
}
- 统计字符:从键盘输入一个字符串,统计这个字符串当中包含几个大写字母,几个小写字母,几个数字,几个特殊符号。
Write-Output("请输入一个字符串:")
$a=Read-Host
[char[]]$char_array = $a.ToCharArray()
[int]$length = $char_array.Length
$sumUp=0
$sumLow=0
$sumNum=0
$sumSpe=0
for($i=0;$i -lt $length;$i++){
$int_array= [int]($char_array[$i])
if(($int_array -ge 65)-and ($int_array -le 90)){
$sumUp++
}
elseif(($int_array -ge 97)-and ($int_array -le 122)){
$sumLow++
}
elseif(($int_array -ge 48)-and ($int_array -le 57)){
$sumNum++
}else{
$sumSpe++
}
}
Write-Output("这个字符串中包含{0}个大写字母,{1}个小写字母,{2}个数字及{3}个特殊符号" -f $sumUp,$sumLow,$sumNum,$sumSpe)
3. 水仙花数:计算三位整数(100~999)的水仙花数。水仙花数是指每一位的立方相加等于该数自己,比如153 = 1^3 + 5^3 +3^3
for($i=100;$i -lt 1000;$i++){
[string]$s=$i
[int]$bai = $s.SubString(0,1)
[int]$shi = $s.SubString(1,1)
[int]$ge = $s.SubString(2)
if(($bai*$bai*$bai)+($shi*$shi*$shi)+($ge*$ge*$ge) -eq $i){
Write-Output("这是一个水仙花数:{0}" -f $i)
}
}
4. 字符串判断:从键盘输入一个字符串,判断该字符串是否可以被转换为一个有效的数字。
Write-Output("请输入一个字符串:")
$s = Read-Host
$else = "[^0-9]"
if($s.Length -eq 1){
Write-Output("能被转换为一个有效的数字")
}elseif($s.Length -ge 2){
if($s -match $else){
Write-Output("不能被转换为一个有效的数字")
}else{
Write-Output("能被转换为一个有效的数字")
}
}
- 打印99 乘法表。
for($i=1;$i -lt 10;$i++){
for($j=1;$j -le $i;$j++){
$sum = $i * $j
Write-Host("{0} * {1} = {2} " -f $i,$j,$sum) -nonewline
}
Write-Output("")
}
6. 一个10000 以内整数,它加上100 和加上268 后都是一个完全平方数,请问该数是多少?
for($i=1;$i -lt 10000;$i++ ){
for($j=1;$j -lt 100;$j++ ){
if(($j*$j) -eq ($i + 100) ){
for($k=1;$k -lt 100;$k++ ){
if(($k*$k) -eq ($i + 268)){
Write-Output($i)
}
}
}
}
}
- 拆分字符串:“网络空间安全”,拆分成网络、络空、空间、间安、安全
$s="网络空间安全"
Write-Output($s.Substring(0,2))
Write-Output($s.Substring(1,2))
Write-Output($s.Substring(2,2))
Write-Output($s.Substring(3,2))
Write-Output($s.Substring(4))
8. 对3、65、22、102、4 进行降序排序。
$array_data=3,65,22,102,4
for($i=0;$i -lt $array_data.Length;$i++){
for($j=$i+1;$j -lt $array_data.Length;$j++){
if($array_data[$i] -lt $array_data[$j]){
$temp=$array_data[$i]
$array_data[$i]=$array_data[$j]
$array_data[$j]=$temp
}
}
}
Write-Output($array_data)
9. 计算200 以内的所有质数(即只有1 和其自身能够被这个数整除的数),建议使用至少3 种算法实现,看看哪一种算法的运算次数最少。
10.设定的总行数line 可以随机修改,修改后仍然能打印出line 行的直角三角形。
打印如下两种三角形图形: