Shell脚本和自动化指南

Ani*_*esh 4 shell powershell scripting perl

我目前正在研究一些脚本,这些脚本可以自动化很多东西并且中等大小.我已经开始关注某些事情,使我的脚本具有通用性和可移植性,如:

  • 管理员登录以安排脚本
  • 使用绝对路径
  • 使用配置文件
  • 在开发时使用write-host并在部署(调试)时切换到日志记录

我最感兴趣的是知道是否有任何标准的脚本技术和指南,旨在使脚本开发人员生活简单.我在perl和powershell上工作,所以更受欢迎和赞赏的是更广泛的建议.

在此先感谢您的帮助.
steeluser

Nou*_*him 6

这有点宽泛,我肯定是主观的.但是,我已经做了一些脚本工作,可以提供一些我从经验中学到的东西.

  1. 使脚本数据驱动.硬编码尽可能少.路径,资源位置等所有内容都应该从配置文件中更改,而不是通过编辑主脚本.这与你关于绝对路径的观点有关.对所有路径进行硬编码是不行的.使一切相对强加太多限制.例如,有一个名为变量的变量,DATA_ROOT你可以修改,然后让所有的例程引用${DATA_ROOT}/resources/images等等,这样会很好.$ {PROGRAM_ROOT}也很有用,你可以安装多个套件到测试等
  2. 错误检查.脚本语言通常是动态类型的,因此请务必检查您所做的每件事的返回值.创建一个可以用来做call_safely(fn, arg0, arg1,.. )和做的事情的图书馆甚至是有意义的call_and_abort_on_failure(fn, arg0, arg1,...).
  3. 评论和文件自由.脚本更容易修改编译的程序,因此当人们想要扩展它们时,它们经常以错误的方式修补.确保您的API具有良好的文档记录,以便在人们想要添加新的命令行选项时,他们知道如何执行此操作,而不是在您的上面编写包装脚本.
  4. 如果需要,让一个脚本做一件事并编写聚合器.if(FLAG) {do_something} else {do_something_completely_different}会破坏你的脚本.让你的脚本做一件事并做好,如果你愿意,你可以编写包装,根据需要委托给这些脚本(以获得更好的用户体验).
  5. 大量使用第三方工具而不是发明自己的工具.命令行解析,文本处理等都是旧区域,并且有很多库可以很好地完成它们.使用这些而不是重新实现.最无bug的程序是从未编写过的程序.
  6. 使您的日志记录和测试框架坚如磐石.当坏事发生时,你应该知道一切,而不必重新运行脚本.从第一天开始使用一些标准日志记录框架,并使其可以从可以按需重新加载的文件进行配置.确保您的代码经过单元测试,以便在进行新的更改时不会引入回归错误.此外,记录计时指标,以便随时了解脚本放慢速度的位置.它将来会很有用.
  7. 尽可能使您的脚本免受修补.这很难描述,但我可以举个例子.我有一些脚本来跟踪各种分支的构建的各种指标,并将它们放入目录中.我写了它,如果你想foo跟踪一个分支,你所要做的就是创建一个foo在某个地方调用的目录,它会跟踪它.您不必修补很多东西,而实际想要跟踪指标的经理可以根据需要创建目录.

这些是我能从头脑中想到的要点.

  • 因为你的代码会被`if`和`else`完全弄乱,并且会变得难以阅读和不可维护.如果您有一个通知框架,可以发送可以从命令行或配置文件调整其配置的电子邮件,那么它将比ifs和elses更易于管理. (2认同)