我如何学习 bash shell 脚本?

Ami*_*ole 5 mac bash automation macos

我是 mac 用户和 web 开发人员,我想创建自动化工具来管理我的工作流程。说一个命令来启动一种网站。

我应该学习 bash shell 脚本的哪些部分?有这么多:

  • sed
  • awk
  • 格雷普

或者我应该学习其他东西来为我的 Web 项目归档命令行自动化吗?

Dan*_*eck 11

您需要注意,与其他脚本或编程语言不同,shell 脚本在很大程度上依赖于操作系统提供给您的命令行应用程序。这意味着,由于 OS X 是 BSD,因此在 Linux 上运行的大部分内容在您的计算机上的运行方式略有不同,从而使许多教程变得无用。通常,您可以期望您的命令行工具具有比 Linux 同类工具更少的功能和灵活性,但也有例外。

如果您不熟悉 shell 并且不觉得有必要学习它,那么最好从命令行使用您最喜欢的 Web 脚本语言(PHP、Ruby、Python)。优点是整个函数库中的 API 可能更加一致。


bash自身学习

  • 条件(包括在处理文件时使用test/ [...]进行防御性编程)
  • 循环
  • 变量赋值
  • 职能
  • 输入和输出重定向和管道
  • 调用程序和 shell 函数(包括如何捕获它们的输出和读取它们的返回值),包括常规调用和命令替换。
  • 选项。我喜欢set -u并拒绝使用无法处理这个问题的脚本。
  • 变量类型、数组、通配符

这里的问题是,bash它与作业控制等系统密切相关,并且对于创建复杂脚本而言,学习曲线相当陡峭。

根据我的经验 *bash手册页的任何部分都是不必要的。做足够长的时间,那里的一切都以某种方式适用(如果只是为了回答关于 SU 的问题)。


一些(以我的经验)shell 脚本中常用的程序:

  • 文件处理和导航:find, ls, cd, rm, mv, cp, chmod, chown, chflags, dd,ln
  • 程序执行:xargs,find -exec
  • 数据转换:sort, wc, cat, sed, awk,grep

特定于 OS X 的可能如下:

launchctl, open, dscl, PlistBuddy, plutil, osascript, automator, networksetup, systemsetup, growlnotify(如果你有咆哮)

当然,根据你想做的事情的确切性质,还有其他的......

date(BSD 变体——与 GNU 非常不同), mount, fsck, kill,sendmail


有些,例如netcat要求您安装第三方软件包,例如使用 Homebrew、MacPorts 或 Fink。

如果您的脚本大量使用这些命令行程序,或者可以以这种方式编写,则bash脚本是自动化此操作的好方法。


由于您使用的是 OS X,还可以查看 AppleScript(通过 AppleScript 编辑器)和 Automator。这两者都可以与 shell 脚本结合使用,以实现非常好的集成脚本解决方案。如果您正在考虑控制其他 OS X 应用程序(例如您的网络浏览器),这些是必不可少的。虽然您可以使用open命令行在不同浏览器中打开 URL,但从加载的选项卡中检索数据需要 Automator 或 AppleScript。

此外,Mac 上还预装了其他脚本语言,例如ruby,python可用于轻松创建简单的帮助实用程序。这些更像是bash常规 UNIX 实用程序的替代品。这取决于你想做的事情的性质。

如果您想在磁盘上移动少量文件,将它们压缩并通过 SSH 传输,bash这可能是最好的选择。一旦你有了真正的编程逻辑(任何涉及大量对象或数字的东西),你就应该研究其他脚本语言。