高级bash脚本编写指南 Zsh 开发指南(一):变量和语句
很多人在 zsh 中用 bash 语法写脚本,虽然也可以正常运行,但这样无法利用 zsh 的众多优秀特性,还是非常遗憾的。熟悉下 zsh 下独有的特性,对写脚本的帮助是很大的。-- 陌辞寒
本文导航◈导读00%◈为什么用 zsh 写脚本08%◈Zsh 脚本样例30%◈为什么要使用 shell 脚本语言33%◈格式约定46%◈变量50%◈变量定义54%◈变量比较59%◈语句64%◈条件语句68%◈循环语句77%◈分支语句87%◈用户输入选择语句91%◈异常处理语句93%◈简化的条件语句94%◈总结98%转载自|
作者|陌辞寒
导读
网上关于 zsh 的文章有很多,但其中超过 95% 的文章讲如何使用和配置,写如何用 zsh 编程的文章很少,能找到的多数也是只言片语,不成系统。国外有几本讲 zsh 的书,其中也有很多内容是配置、使用、编写补全脚本等等,对编程有用的篇幅占比并不多,而且比较零散不便于查询。至于官方文档[1]?那是让即使有多年编程经验的开发者也会抓狂的神奇存在。可读性极差,而且基本没有例子,不熟悉文档结构和内容的话辅助卡盟,很难找到自己想要的东西。但内容覆盖很全面,洋洋洒洒近 500 页,耐心去看总会找到的。还有一份官方“入门”文档[2],上次更新时间是 2002 年,也要 300 多页,至于可读性,比官网文档要稍微好一些吧,还是有一定的参考价值的。官网[3]上还有一些链接,里边内容比较零散,也可以看看。
很多人在 zsh 中用 bash 语法写脚本,虽然也可以正常运行,但这样无法利用 zsh 的众多优秀特性,还是非常遗憾的。熟悉下 zsh 下独有的特性,对写脚本的帮助是很大的。
本系列文章无关 zsh 的安装、使用、配置(如果需要配置文件,可以参考我的 .zshrc[4],里边有比较详细的注释),更无 oh-my-zsh 相关内容,安装 zsh 后无需配置即可开始学习编写脚本。读者不需要有 bash 的基础(最好了解一些),但需要接触过任何一门编程语言,对编程的一些基础概念要有了解。
为什么用 zsh 写脚本
很多人对 zsh 的了解停留在界面漂亮、主题多、插件多、补全强等等,而对 zsh 的语言特性了解并不多。因为 zsh 基本兼容 bash,不少人使用 bash 语法写 zsh 脚本,或者偶尔使用一些 zsh 特有的小技巧,很难体会出 zsh 作为一门编程语言的强大之处。
另外有些人认为 bash 几乎在所有类 Unix 系统都有默认安装,而 zsh 往往要自己安装,为了通用性而用 bash 写脚本比较好。这个说法也有一定的道理,但并不是对所有开发者来说都有影响。如果是开源软件的开发者,为了避免洁癖用户因为不想安装他用不到的 zsh 而不使用自己的软件,而避免使用 zsh,是有一定道理的(但现在 zsh 的用户量也有一定的积累了)。除此之外,自己平时写脚本、公司内部使用等多数场景,都是不需要考虑这个因素的。
如果在公司使用,还涉及其他因素。
第一个是 zsh 的部署成本。但因为多数情况都需要部署其他软件,甚至自己的脚本可以和 zsh 打包部署(去掉用不到的文件后的 zsh 只有 1M 多),所以基本不成问题。而且如果使用系统默认的 bash 的话,还涉及版本不同导致的问题,比如不同系统的 bash 版本不一样,或者系统升级后,bash 的升级导致之前的脚本挂掉等等。所以即使使用 bash,最好也是统一部署或者自带一个特定的版本,而不是使用系统默认的,以减少不必要的麻烦。
第二个就是非常重要的学习成本。因为会写 bash 的人很多,但会写 zsh 的比较少,如果只有自己会写,那么和别人合作会出问题。但 zsh 的学习成本并没有那么大,尤其是对会 bash 开发者来说,要大致看懂 zsh 脚本基本只需要几十分钟的学习,而编写的话,循序渐进也是很自然的事情,而且想不起来的时候还可以用 bash 的语法写。所以学习成本没有那么可观。