如何学习 bash shell 脚本?

如何学习 bash shell 脚本?

我是一名 Mac 用户和一名 Web 开发人员,我想创建自动化工具来管理我的工作流程。只需输入一个命令即可启动某种类型的网站。

我应该学习 Bash Shell 脚本的哪些部分?有很多:

  • sed
  • awk
  • grep
  • 寻找

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

答案1

您需要知道,与其他脚本或编程语言不同,shell 脚本沉重依赖于操作系统提供给您的命令行应用程序。这意味着,由于 OS X 是 BSD,因此在 Linux 上运行的许多功能在您的计算机上运行会略有不同,从而导致许多教程毫无用处。一般来说,您可以预期您的命令行工具的功能和灵活性会比 Linux 同类工具少,但也有例外。

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


本身bash就学习

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

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

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


根据我的经验,一些 Shell 脚本中常用的程序如下:

  • 文件处理和导航:find,,,,,,,,,,,ls​​​​​cdrmmvcpchmodchownchflagsddln
  • 程序执行:xargsfind -exec
  • 数据转换:sort,,,,,,wccatsedawkgrep

特定于 OS X 的可能如下:

launchctl,,,,,,,,,,,(如果你opendscl咆哮)​​​PlistBuddyplutilosascriptautomatornetworksetupsystemsetupgrowlnotify

当然,根据您想要做的事情的具体性质,还有其他方法......

date( BSD变体 — 与GNU有很大不同)mount,,,,fsckkillsendmail


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

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


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

此外, Mac 上还预装了其他脚本语言(例如)ruby,可用于轻松创建简单的辅助实用程序。这些更像是常规 UNIX 实用程序的替代品。这取决于您要执行的操作的性质。pythonbash

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

答案2

我发布了一个(以 OS X 和 bash 为中心)书签列表OS X 终端教程 - 超级用户

学习脚本语言的最佳方法之一是修改现有脚本。请查看以下内容:

一些有免费下载代码示例的书籍:

答案3

我认为对于你来说,只要掌握大约 20-25 个命令的基本用法就足够了,并且 Linux 的基本架构是必须的。根据你的工作类型,你可以只开始学习这些 bash 命令:

vi、ls、find、sed、awk、grep、cat、服务启动和关闭、netstat、nmap、traceroute、ping、mv、cp、rm 等。

这些是 bash 中最常用的命令。

除此之外,您还可以按照本教程进行操作:

http://www.faqs.org/docs/bashman/bashref_toc.html

http://blog.emson.co.uk/2009/06/18-useful-bash-scripts-for-web-developers/

此外,您需要学习基本的 shell 脚本来自动化一些流程。

相关内容