zoukankan      html  css  js  c++  java
  • PowerShell入门(八):函数、脚本、作用域

      脚本所体现的是PowerShell的编程特性,是任务自动化的基础。函数是比脚本粒度更细的代码复用单元,可以定义在命令行中或者脚本中。作用域就是变量和函数的作用范围,是执行上下文的划分。

    函数

      函数就是命名的命令列表,与一般编程语言中的函数概念具有相同的范畴。函数中不但可以有简单命令,还可以有控制流程的命令,如if、while、switch等。函数可以有匿名参数或者命名参数列表。命令参数列表可以用大括号或者Param关键字定义。匿名函数可以使用$Args变量来访问。函数也可接收来自管道的对象作为输入,管道对象可以通过$input变量类访问。

      

      在脚本中定义的函数,可以定义在#require命令和Param关键字之后的任何位置,但要定义在调用之前。还有,自定义的函数不会自动运行,需要被明确调用。可以使用filter或者function定义函数,用filter关键字定义的函数比较简单,而使用function关键字定义的函数可以有更加复杂的功能。 

      简单函数定义示例如下:

    function SayHello
    {
       "Hello" 
    }
    

    函数调用方法与使用Cmdlet方法相似,输入SayHello,并回车。则结果为Hello。

    脚本

      脚本就是将一些命令存贮到文件文件中,并将该文本文件的扩展名设置为.ps1。脚本中除了可以使用常用cmdlet,控制流程的命令外,还可以定义和调用自定义函数,调用方法与调用cmdlet方法类似。

      脚本也可以有参数,既可以是命名参数也可以是匿名参数。在参数的使用上,脚本与函数非常相似。

      另外,PowerShell的脚本执行策略默认不允许执行任何脚本文件,修改执行策略可执行如下命令:Set-ExecutionPolicy RemoteSigned。需要谨记的是,修改执行策略会带来安全隐患,修改执行策略之前请三思。

      简单脚本d:\greet.ps1示例如下

    Param([String] somebody)
    
    function Greet([String] name)
    {
        "Hello $name"  
    }
    
    echo "Call function Greet ..."
    Greet $somebody

      脚本调用方法如下:

    d:\greet.ps1 "Luke"
    或
    .\greet.ps1 "Luke"
    

    以上脚本的执行结果是,“Hello Luke”。

    作用域

      按类型分,有两种作用域:global(全局作用域)和script(脚本作用域)。启动PowerShell命令行后,所有命令行命令在全局作用域中运行。而脚本上下文在script作用域中运行,运行结束后脚本中定义的变量和函数不在可见。这是因为在脚本中定义的变量和函数默认位于script作用域中。当然也可以显示定义变量和函数的作用域,比如function global:fun1 (){…}。这样以来,脚本执行完之后,fun1还能够在全局作用域中执行。

      按轴关系分,可以有父作用域、本地作用域(当前作用域)和子作用域。这些不是新的作用域类型,而是作用域之间的相对关系。子作用域还可以有子作用域,这个层次可以很深。

      除了可以将脚本中的变量和函数定义在全局作用域中,还可以使用点".”获取来源,将一个普通脚本在本地作用域中执行,执行完毕退出脚本后,所有在脚本中定义的变量和函数,在本地作用域中继续可用。

      使用点".”获取来源示例如下:

    . d:\greet.ps1 "Luke"
    或者
    . .\greet.ps1 "Luke"
    

    即点".”,空格,然后是一般脚本执行方式。

    结语

      函数、脚本和作用域,每个概念要说得详细都得要很大的篇幅。这里只简单说明它们的概念、彼此间的关系以及简单的用法。让读者有个大概的印象,能够拿来就用。

  • 相关阅读:
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 133 克隆图
  • 原文地址:https://www.cnblogs.com/ceachy/p/PoweShell_Function_Script_Scope.html
Copyright © 2011-2022 走看看