您的位置:首页 > 运维架构 > Shell

<Power Shell>01 四则运算和数组简单使用

2013-06-14 14:54 495 查看
微软Windows操作系统最初的设计目标是面向非技术用户, 甚至是对计算机不感兴趣的人群, 因此, 真正自动化, 强大的Shell一直不是微软公司所关心的问题。
但是,随着Windows开拓市场,随着需要管理的计算机数量提升, 就必须依靠能够有效自动化计算机配置的工具, 这是开发PowerShell的一个重要原因。
为什么不使用已有的shell或扩展cmd.exe呢? 我们熟知的bash, ksh是为unix, linux系统设计的, 优化的shell, 从这些操作系统内核提供的system call来看, shell将内核的特性真正表现出来。
但是, Windows操作系统和unix, linux是完全不同的, Windows将大部分管理通过面向对象的方式进行管理, 提供了诸如COM, WMI等概念。
传统的shell输出信息都是字符串, 这样有利于统一的处理, 但是字符串也是你唯一能够操作的对象。
PowerShell开发队伍为了能够为Windows提供更好的优化, 因此选择了重新创建一门新的语言。
希望大家在和Cantgis一起学习PowerShell的过程中, 能够多思考。

下面开始放出powershell语法及解释

1.其实在powershell 中,运行数学运算相当简单,只需要输入自己想要输入的数值和法则,结果就立即呈现。这里不需要打什么语句,执行的结果可以输入,不会丢失,第四个例子就是输出结果。
你看我们轻松计算出20+200的结果在使用powershell。

PS C:\> 20 + 200
220
2.我们在学习HTML语言或者任何语言首先使用的是helloworld,powershell也不例外,让我们尝试输入一下。

PS D:\> "hello world,powershell"
hello world,powershell
3.powershell也很好的支持四则混合运算,使用()括号键来修改运算符的优先级和结合性,这里需要注意:powershell支持不同的数据类型
PS D:\> (6+8)*45-(56*7)/2
434
4.除了将运算结果输出到显示屏幕, 我们可以将结果存储到临时文件, 然后用type命令将文件的结果取回. 看起来powershell 确实power了。
你看我这里就把运算出来的数值放到D盘的powershell命名的txt文档,如果你懒得手动打开txt查看结果,这时候需要键入type命令,直接读取这个文本里的数值。

PS D:\> (6+8)*45-(56*7)/2 >d:powershell.txt
PS D:\> type D:\powershell.txt
434
5.除了将运算结果存储到文件, 我们可以通过变量赋值, 将运算结果存储到变量中, 并使用该变量进行后续的计算工作,更深入的四则运算。
下面我们看到 我们定义了 $N的数值为9 结果运算显示了出来,结果我们/3 显示结果为3,由于首次定义为n=9他是不会被改变的,所以我们在继续运算也是那个固定的数值哦。

PS D:\> $n = (1+2)*3
PS D:\> $n
9
PS D:\> $n/3
3
PS D:\> $n/3
3
PS D:\> $n/5
1.8
6.powershell是支持对象的语言,我们将命令返回的结果赋值给这个变量,$files中包含了当前目录的对象集合,使用数组访问的语法,就可以获得改位置的对象。
下面我们看到的D盘的目录。注意powershell的数组是从零开始的。

PS D:\> $files =dir
PS D:\> $files[1]
目录: D:\
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----          2013/6/8      9:40            fs.cer
7.大多数常见语言,都提供一些操作集合类型的语法。最基本的集合类型就是数组类型,它提供了一种下标基于0的数组对象。
首先Cantgis会通过几个例子,来了解一下PowerShell中的数组是如何使用的。
[b]这个例子输出了四个对象:数值1、字符串“a”、数值“10MB”和十六进制的“0x100”,也明确的解释出powershell数组类型的语法,事实上,在powershell中只要把不同对象用逗号“,”连接起来。就可以构成数组对象。如果不手动执行输入文本格式,powershell默认的格式器和输出器会输出到显示器上,最终我们看到了这个数组的结果。[/b]
PS D:\> 1,'a',10MB,0x100
1
a
10485760
256
8.下面我们简单的使用几个变量来存储数组,在输出看看数组对象的更多可用特性,在下面的第一个例子中,将四个数组存放到变量:$array1中,接下来我们要将数值1定位于$int中。
数组对象上属性为count来指出当前数组对象的数量值为4(a.b.c.d.确实是四个)$int中并没有count属性(这个现象就需要下一个例子解释)
PS D:\> $array1 = 'a','b','c','d'
PS D:\> $int = 1
PS D:\> $array1.count
4
PS D:\> "$array1"
a b c d
PS D:\> $int.count
PS D:\> "$int"
1
PS:这里我们说一下。在powershell中如果引用的属性不存在,它会返回$null对象,该对象不会对显示器也就是呈现的控制台造成任何影响,只提示用户继续输入命令。

9.powershell是基于对象的shell,我们看看数组究竟是什么对象呢,接下来我们继续进行cmdlet,我们执行后发现一个现象,在powershell中调用对象gettype()方法,可以得到该对象的类型对象,注意类型对象也是一个对象。改对象的fullname属性表现为该类型的名称。
如果你想要知道一个对象的类型就调用gettype()方法,然后再访问fullname属性就可以了。


PS D:\> $array1.gettype().fullname
System.Object[]
10.下面我们学习一下如何访问数组中的元素。实际上powershell的数组是通过.net类库中的数组来实现的,到这里我们发现了powershell是在.net类库原有之上添加了访问的接口,对象还是.net类库的对象
使用数组时候大家记住数组的第一个元素为“0”、数组的最后一个元素下表是数组长度减一 数组长度就是属性length得出,Count是属性Length的别名,这主要是为不同对象提供一致性接口的技术。这里需要特别注意的是,当数组访问越界也就时,PowerShell是不会给出任何错误信息的,只会得到一个$null对象。

PS D:\> $cantgis = 1,2,3
PS D:\> $cantgis.length
3
PS D:\> $cantgis[0]
1
PS D:\> $cantgis[2]
3
PS D:\> $cantgis[4]
PS D:\>
11.向数组中添加新的元素,在perl中,大家只需要见得使用索引,然后再存储上数值就OK,然后如果大家用perl的方法在继续操作的话,会出现数组赋值错误,超出范围哦!
对于索引越界问题,powershell 需要执行下面的代码。

PS D:\> $a = "Cantgis","IPHONE4"
PS D:\> $a[0]
Cantgis
PS D:\> $a[1]
IPHONE4
PS D:\> $a[2]="IPHONE5"
数组赋值失败,因为索引“2”超出范围。
所在位置 行:1 字符: 4
+ $a[ <<<< 2]="IPHONE5"
+ CategoryInfo          : InvalidOperation: (2:Int32) [], RuntimeException
+ FullyQualifiedErrorId : IndexOutOfRange
只需要把数组中“加”起来,执行下列代码解决索引越界
PS D:\> $a = $a+"IPHONE5"
PS D:\> $a
Cantgis
IPHONE4
IPHONE5
PS D:\> $a[2]
IPHONE5
12.结尾如果需要向数组中添加更多的对象时,必须使用“+”运算符。在执行powershell实际上进行下面的操作过程

创建一个新的数组,该数组的大小能够存下运算结果的所有对象;
将第一个数组的成员拷贝到新数组中;
将第二个数组的成员拷贝到新数组中;
如果数组中包含的元素很多,过多的向数组中添加对象,一定会使powershell执行脚本时更慢。
powershell是一个工具,不要依赖它来向数组添加对象,在.net类库中好多数据结构都能够满足经常向数组中添加对象的请求。

谢谢大家陪Cantgis一起学习powershell之路,我们刚刚走过往里长征的开端,接下来,我们会逐渐深入。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  windows powershell