Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl Shell脚本和自动化指南_Perl_Shell_Scripting_Powershell - Fatal编程技术网

Perl Shell脚本和自动化指南

Perl Shell脚本和自动化指南,perl,shell,scripting,powershell,Perl,Shell,Scripting,Powershell,我目前正在编写一些脚本,这些脚本可以自动化很多东西,而且大小相当中等。我已经开始遵循某些方法,使我的脚本具有通用性和可移植性,如: 计划脚本的管理员登录 绝对路径的使用 配置文件的使用 开发时使用写主机,部署(调试)时切换到日志记录 我最感兴趣的是知道是否有任何标准的脚本技术和指导方针,旨在使脚本开发人员的生活变得简单。我同时使用perl和powershell,因此非常欢迎并感谢您提供更一般化的建议 感谢您提前提供的帮助。 steeluser这有点宽泛,我相信是主观的。不过,我做了一些脚本编

我目前正在编写一些脚本,这些脚本可以自动化很多东西,而且大小相当中等。我已经开始遵循某些方法,使我的脚本具有通用性和可移植性,如:

  • 计划脚本的管理员登录
  • 绝对路径的使用
  • 配置文件的使用
  • 开发时使用写主机,部署(调试)时切换到日志记录
我最感兴趣的是知道是否有任何标准的脚本技术和指导方针,旨在使脚本开发人员的生活变得简单。我同时使用perl和powershell,因此非常欢迎并感谢您提供更一般化的建议

感谢您提前提供的帮助。

steeluser

这有点宽泛,我相信是主观的。不过,我做了一些脚本编写工作,可以提供一些我从经验中学到的东西

  • 使脚本成为数据驱动的。硬编码尽可能少的东西。路径、资源位置等所有内容都应该可以从配置文件中更改,而不是通过编辑主脚本。这与你关于绝对路径的观点是一致的。对所有路径进行硬编码是不可能的。使所有内容都是相对的会施加太多的约束。最好有一个名为
    DATA\u ROOT
    的变量,您可以修改它,然后让所有例程引用
    ${DATA\u ROOT}/resources/images
    等内容。一个${PROGRAM\u ROOT}也很有用,这样您就可以对套件的多个安装进行测试等
  • 错误检查。脚本语言通常是动态键入的,因此请确保检查您所做的每件事的返回值。甚至可以创建一个库,使用它您可以安全地调用(fn,arg0,arg1,…)和
    调用并在失败时中止(fn,arg0,arg1,…)
  • 自由地评论和记录。脚本更容易修改已编译的程序,因此,当人们想要扩展脚本时,脚本常常以错误的方式进行修补。确保您的API有很好的文档记录,以便当人们想要(例如)添加新的命令行选项时,他们知道如何操作,而不是在您的API之上编写包装器脚本
  • 如果需要,让一个脚本做一件事并编写聚合器。如果脚本有
    if(FLAG){do_something}或者{do_something}
    会杀死你。让您的脚本做一件事并做好它,如果您愿意,您可以编写包装器,根据需要委托给这些脚本(为了更好的用户体验)
  • 自由地使用第三方工具,而不是发明自己的工具。命令行解析、文本处理等都是旧的领域,有很多库可以很好地完成它们。使用这些,而不是重新实现。最没有bug的程序是从未编写过的程序
  • 让您的日志记录和测试框架坚如磐石。当坏事情发生时,您应该知道一切,而不必重新运行脚本。从第一天开始使用一些标准日志框架,并使其可从一个可根据需要重新加载的文件进行配置。确保您的代码经过单元测试,以便在进行新更改时,不会引入回归错误。另外,记录计时指标,以便您知道随着时间的推移,脚本的速度会减慢。它在未来将是有用的
  • 尽可能使您的脚本不需要修补。这很难描述,但我可以给你举个例子。我有一些脚本来跟踪各个分支构建的各种指标,并将它们放到一个目录中。我写它是为了如果你想跟踪一个分支
    foo
    ,你所要做的就是在某个地方创建一个名为
    foo
    的目录,它就会跟踪它。你不需要修改很多东西,真正想要跟踪指标的经理可以根据需要创建目录
    这些是我头脑中能想到的要点。

    < P>只是我认为好的一些实践:

    • 只要在运行时捕捉到绝对路径,就可以使用绝对路径。看这个
    • 用于配置文件的一些易于处理的格式,如xmlyaml
    • 不要使用
      写入主机
      ,使用更好的
      写入输出
      ,或者更好的是,实现一个自定义功能,允许您根据配置文件上的设置在控制台/日志之间切换。更多细节请参见我的答案
    根据你的观点,这些只是一些建议


    编辑关于采用XML配置文件的注意事项

    尽量使用XML,因为您的配置文件将包含一些设置,并且您将仅通过脚本来管理它


    希望这有帮助


    干杯

    当你说“使用绝对路径”时,你的意思是“你使用绝对路径”还是“你避免使用绝对路径”?前者容易导致不可移植性;后者是可移植性。我的意思是使用绝对路径更好。我之所以这样想,是因为我的脚本必须完美地工作,无论从哪里调用,都不会抛出错误。我不确定我是否理解它是如何导致不可移植性的。你能再详细说明一下吗?谢谢。这意味着每台机器都必须把所有东西放在同一个地方。一旦你想把脚本放在其他地方,或者没有空间放脚本,那么你的手上就有一个大问题。这对我来说很有意义,不要使用绝对路径。谢谢你的洞察力。你的观点都很好。我不知道为什么像if($productionmode-ne1){dont send mail}这样的东西会杀死我的脚本。您能详细说明一下吗?因为您的代码将完全被
    if
    else
    乱七八糟,难以阅读和维护。如果你有一个发送电子邮件的通知框架